Matlab 的 parfor 中的工人数
Number of workers in Matlab's parfor
我是运行一个使用MATLAB的parfor函数的for循环。我的 CPU 的规格是
我将首选工人数设置为 24。但是,MATLAB 将此数字设置为 6。工人数是受内核数还是受(内核数)x(处理器数 = 6x12)限制?
Matlab 倾向于将工作人员的数量限制为核心数量(在您的情况下为 6 个)。
您的 CPU (intel i7-9750H) 具有超线程,即每个核心可以 运行 多个(此处为 2)线程。但是,如果您想 运行 它们处于满载状态,这就没有用了,这意味着根本没有可用资源来切换到不同的任务(额外的线程实际上是什么)。
Restricting to one worker per physical core ensures that each worker
has exclusive access to a floating point unit, which generally
optimizes performance of computational code. If your code is not
computationally intensive, for example, it is input/output (I/O)
intensive, then consider using up to two workers per physical core.
Running too many workers on too few resources may impact performance
and stability of your machine.
请注意,为了 运行 分布式代码,Matlab 需要将数据流式传输到每个核心。这是某种初始化工作,也是如果将 cores/workers 的数量加倍就无法将 运行 时间减半的原因。这也是为什么 Matlab 没有使用超线程的原因。这只是意味着在没有任何加速的情况下增加初始流式传输工作——事实上,核心可能会强制 matlab 保存中间结果并不时切换到另一个任务……这与以前的任务相同;)
我是运行一个使用MATLAB的parfor函数的for循环。我的 CPU 的规格是
我将首选工人数设置为 24。但是,MATLAB 将此数字设置为 6。工人数是受内核数还是受(内核数)x(处理器数 = 6x12)限制?
Matlab 倾向于将工作人员的数量限制为核心数量(在您的情况下为 6 个)。 您的 CPU (intel i7-9750H) 具有超线程,即每个核心可以 运行 多个(此处为 2)线程。但是,如果您想 运行 它们处于满载状态,这就没有用了,这意味着根本没有可用资源来切换到不同的任务(额外的线程实际上是什么)。
Restricting to one worker per physical core ensures that each worker has exclusive access to a floating point unit, which generally optimizes performance of computational code. If your code is not computationally intensive, for example, it is input/output (I/O) intensive, then consider using up to two workers per physical core. Running too many workers on too few resources may impact performance and stability of your machine.
请注意,为了 运行 分布式代码,Matlab 需要将数据流式传输到每个核心。这是某种初始化工作,也是如果将 cores/workers 的数量加倍就无法将 运行 时间减半的原因。这也是为什么 Matlab 没有使用超线程的原因。这只是意味着在没有任何加速的情况下增加初始流式传输工作——事实上,核心可能会强制 matlab 保存中间结果并不时切换到另一个任务……这与以前的任务相同;)