我刚买了Matlab Parallel Computing工具箱。
命令matlabpool open
打开并行工作程序,其中包含CPU中的核心数。
但我的每个CPU内核都有两个线程。根据Windows任务管理器,每个工作者只能使用一个CPU核心的一半性能,这似乎可以解释为一个工人=一个线程=“半核心”。
因此,在所有工人打开之后,仍然可以利用CPU总功率的一半。
还有其他命令可以帮助吗?
答案 0 :(得分:1)
默认情况下,local
matlabpool
群集类型在选择要启动的默认工作人员数时仅考虑“真实”核心。这是因为对于MATLAB工作负载,超线程通常不会带来太多好处。但是,此值仅为默认值 - 您可以编辑群集类型并运行最多12个本地工作人员。
答案 1 :(得分:1)
您需要了解HyperThreading才能回答这个问题。
Matlab为每个CPU启动一个工作线程。假设您现在使用类似parfor
的指令在多个线程上分配计算。现在每个线程都会愉快地处理数字。
假设你正在做一个大数字向量的总和。实际发生的是以下内容:
sum = sum + a[0]
a
不在我的CPU缓存中a
并将其放入CPU缓存中sum = sum + a[1]
sum = sum + a[2]
在获取a
期间,CPU 停止,等待系统内存。这称为pipeline bubble
,对性能不利。有时,数组a
的一部分被换出到硬盘驱动器。操作系统需要访问驱动器以将该部分放入主存储器,之后它将被传输到CPU缓存。发生这种情况时,操作系统不会让CPU等待+200 ms。它将使用该时间来执行另一个任务(例如在系统上运行的备份,或刷新屏幕,或......)。
在CPU上切换任务会导致性能下降。要切换到其他任务,操作系统必须将CPU寄存器保存在主存储器中,然后将其他任务的CPU寄存器首先加载回CPU。这需要时间。
使用HyperThreading,每个CPU的寄存器数量翻倍。这意味着两个过程可以占据' CPU。只能执行一个,但在停顿期间,操作系统可以切换到第二个进程而不会有任何性能损失。
忘记Microsoft Windows如何报告CPU使用情况。这是错的。 CPU使用情况要比简单的47%
复杂得多。真正的问题是:matlab应该为每个核心注册两个线程,还是只注册一个?
参数pro:
争论反对:
我的猜测是,Matlab开发人员认为参数反对比参数pro更重要。我自己的性能测试肯定表明HyperThreading对cpu密集型计算的性能提升很小。