Matlab 为什么7核工作站上的矩阵乘法运行速度比笔记本电脑慢?

Matlab 为什么7核工作站上的矩阵乘法运行速度比笔记本电脑慢?,matlab,parallel-processing,Matlab,Parallel Processing,我运行了以下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(Intel(R)Core(TM)i5-4260U CPU@1.40GHz)上,这需要39秒。在具有7核(英特尔(R)至强(R)CPU E5-26

我运行了以下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(Intel(R)Core(TM)i5-4260U CPU@1.40GHz)上,这需要39秒。在具有7核(英特尔(R)至强(R)CPU E5-2687W v4@3.00GHz)的工作站上,这需要62秒

我没有指定
-singleCompThread
。该工作站有12个内核,但有5个单线程进程正在运行。我自己有(几乎)7个核。他们一直都精疲力竭

这怎么可能


使用
-singleCompThread
运行上述代码时,需要54秒。

引用Mathworks支持团队的话:

从Matlab7.4(R2007a)开始,MATLAB支持多线程计算 对于多个函数和表达式,这些函数和表达式是 元素函数(例如y=4*x*(sin(x)+x^3))。这些功能 在多个线程上自动执行,您无需 显式指定在代码中创建线程的命令

使函数或表达式在多个计算机上执行得更快(加速) 对于堆芯,必须满足以下条件:

1) 函数在算法中执行的操作如下 易于划分为可并发执行的部分, 并且几乎不需要通信或很少需要顺序操作。 这是所有元素操作的情况

2) 数据大小足够大,因此并发 执行时间超过了对数据进行分区和管理所需的时间 单独的执行线程。例如,大多数函数只会加速 当数组大于数千个元素时

3) 在处理时间为的情况下,操作没有内存限制 由内存访问时间控制,对于简单操作也是如此 比如元素加成。一般来说,情况更复杂 函数的速度比简单函数快

你的案子还不够满。或3。乘法运算速度极快且简单,而且内存有限,而且矩阵相对较小。从使用-singleCompThread进行的测试中可以看出,多线程似乎包含更多的开销。您可以使用更大的矩阵来尝试基准测试,看看差异是否会发生变化。您还可以在Macbook上使用-singleCompThread来尝试基准测试,以查看相对的单线程性能是否符合预期范围

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


还请注意,Matlab profiler会关闭JIT。因此,您得到的结果可能无法与您所针对的任何实际案例进行比较

您应该使用特定矩阵而不是随机矩阵运行此测试。随机性可能是一个因素。请注意,由于设置种子的
rng(1)
,两台机器上的矩阵是相同的。如果使用?对于i=1:iterations,尝试
f=@();A*B;结束然后
t=timeit(f)。您确定matlab需要标准的
rand
?(在C和C++中,线性同余系数几乎都是实现的)。一定要考虑一下。@ Bathsheba,你能解释一下为什么会这么重要吗?代码>兰德
不是计时的一部分。