MATLAB:为什么双循环比平方慢得多?

时间:2018-01-09 17:55:41

标签: matlab performance loops matrix

我想知道为什么用A2=A^2命令(ALxL矩阵)对矩阵进行平方比仅仅做一个双for循环和分配更快零值矩阵的值。 我运行了以下代码来检查第一个案例

tic
psi2=psi.^2;
T1=toc;

以及第二次

的以下内容
psi2=zeros(L,L);
tic 
for i=1:L
    for j=1:L
        psi2(i,j)=psi(i,j)^2;
    end
end
T2=toc;

this figure中显示了几个矩阵大小(L)的经过时间,并且加速很明显。

我不会惊讶地看到MATLAB有一个非常有效的矩阵乘法实现,因为它是为它做的,但是我不能理解如何以更快的方式进行元素操作而不只是循环它。

谢谢你的时间。

2 个答案:

答案 0 :(得分:4)

有几件事使得矢量操作比你的循环更快。

首先,编译成C ++代码的循环比解释/转换并编译为Java的脚本循环更快。

其次,C或C ++编译器可以使用单指令,多数据指令(SIMD)在单个操作中对多个矩阵元素进行操作。然后在多个线程中执行此操作。

最后,可以将操作推送到GPU,可以同时处理更多元素(数百个内核,而CPU上为4-8个)。你的脚本循环不能这样做。

答案 1 :(得分:1)

。^ 2利用CPU进行并行操作。对于嵌套循环(双循环)解决方案,整个解决方案按顺序完成。此外,它还可以增加循环控制变量和条件检查。