matlab - Matlab parfor 中的工人数量
问题描述
我正在使用 MATLAB 的 parfor 函数运行一个 for 循环。我的 CPU 规格是
我将首选工作人员数量设置为 24。但是,MATLAB 将此数字设置为 6。工作人员数量是否受内核数量或(内核数量)x(处理器数量 = 6x12?
解决方案
Matlab 更喜欢将工作人员的数量限制为核心数量(在您的情况下为六个)。您的 CPU ( intel i7-9750H ) 具有超线程,即每个内核可以运行多个(此处为 2 个)线程。但是,如果您想在满负荷下运行它们,这将毫无用处,这意味着根本没有可用于切换到不同任务的资源(有效的附加线程是什么)。
请参阅文档。
每个物理内核限制为一个工作人员可确保每个工作人员对浮点单元具有独占访问权限,这通常可以优化计算代码的性能。如果您的代码不是计算密集型的,例如,它是输入/输出 (I/O) 密集型的,则考虑每个物理内核最多使用两个工作器。在太少的资源上运行太多的工作人员可能会影响机器的性能和稳定性。
请注意,Matlab 需要将数据流式传输到每个内核才能运行分布式代码。这是某种初始化工作,也是如果将核心/工作人员数量加倍,您将无法将运行时间减半的原因。这也是为什么 Matlab 没有使用超线程的原因。这只是意味着在没有任何加速的情况下增加初始流式传输工作 - 事实上,核心可能会强制 matlab 保存中间结果并不时切换到其他任务......这与以前的任务相同;)
推荐阅读
- c# - Microsoft.Extensions.DependencyInjection 是否使用单例概念?
- python - 使用 JSON 为我的不和谐服务器创建调平系统
- laravel - BitBucket 连接超时
- ios - 如何使用 UICollectionViewCompositionalLayout 创建具有相等行高的网格布局
- firebase - 如何在没有 X 的情况下在 Flutter 中添加适用于 ios 的 firebase SDK - 代码
- javascript - 使用 JavaScript 更新 JSON 文件中的值
- laravel - 使用我的数据库中的数据,使用 Laravel 制作一个真实的表
- concatenation - 在pytorch中连接两个不同形状的火炬张量
- excel - 你可以在excel中编辑csv文件,而不用excel改变“”的格式吗?
- javascript - i18next 更改整个应用程序的语言