我运行了以下matlab代码:

rng(1)
matrix_size = 200;
iterations = 100000;
A = rand(matrix_size);
B = rand(matrix_size);

profile on
for i = 1:iterations
  A * B;
end
profile off

在我的MacAir(英特尔®酷睿™i5-4260U CPU @ 1.40GHz)上,这花费了39秒。在具有7核的工作站(英特尔®至强®CPU E5-2687W v4 @ 3.00GHz)上,这需要62秒。

我没有指定-singleCompThread。该工作站有12个核心,但是有5个单线程进程正在运行。我(几乎)拥有7个核心。他们一直忙得不可开交。

怎么会这样?

当使用-singleCompThread运行以上代码时,它会在54秒内完成。

最佳答案

引用Mathworks支持团队post:



您的案例无法满足2或3的要求。乘法非常快速且简单,并且受内存限制,矩阵相对较小。从使用-singleCompThread的测试可以看出,多线程似乎包含更多的开销。您可以尝试使用更大的矩阵作为基准,并观察差异是否发生了变化。您也可以在-singleCompThread启用的情况下尝试Macbook上的基准测试,以查看相对单线程性能是否落在预期范围内。

另一个(部分)解释可能是Sandy Bridge和Haswell之间的不同向量指令,即AVX2。在研究之前,我会先进行基准测试。

还要注意,Matlab探查器会关闭JIT。因此,您获得的结果可能无法与基准测试的任何实际情况相提并论。

10-08 19:59