MATLAB:为什么双循环比平方慢得多?
我想知道为什么用MATLAB:为什么双循环比平方慢得多?,matlab,performance,loops,matrix,Matlab,Performance,Loops,Matrix,我想知道为什么用A2=a^2命令(a是LxL矩阵)将矩阵平方比只对循环执行双,并将值分配给一个归零的矩阵更快。 我已经运行了以下代码来检查第一个案例 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; 在几个矩阵的运行时间中,显示了大小(L),加速比清晰可见 看到MATLAB有一个非常高
A2=a^2
命令(a
是LxL
矩阵)将矩阵平方比只对循环执行双,并将值分配给一个归零的矩阵更快。
我已经运行了以下代码来检查第一个案例
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;
在几个矩阵的运行时间中,显示了大小(L
),加速比清晰可见
看到MATLAB有一个非常高效的矩阵乘法实现,我不会感到惊讶,因为它是为什么而设计的,但我不明白为什么有一种比循环更快的方法来进行元素操作
谢谢你给我时间 ^2利用CPU执行并行操作的优势。对于嵌套循环(双循环)解决方案,整个解决方案按顺序完成。此外,它还具有对回路控制变量增量的控制和状态检查 ^2利用CPU执行并行操作的优势。对于嵌套循环(双循环)解决方案,整个解决方案按顺序完成。此外,它还具有对回路控制变量增量的控制和状态检查 有几种因素使向量运算比循环快
首先,编译成C++代码的循环比脚本循环更快,它被解释/转换为java。
P.> C或C++编译器可以在一次操作中使用单指令、多数据指令(SIMD)对多个矩阵元素进行操作。然后在多个线程中执行此操作
最后,可以将操作推送到GPU,GPU可以同时处理更多的元素(数百个内核,而CPU上只有4-8个)。脚本化循环无法做到这一点。有几种因素使向量操作比循环更快
首先,编译成C++代码的循环比脚本循环更快,它被解释/转换为java。
P.> C或C++编译器可以在一次操作中使用单指令、多数据指令(SIMD)对多个矩阵元素进行操作。然后在多个线程中执行此操作
最后,可以将操作推送到GPU,GPU可以同时处理更多的元素(数百个内核,而CPU上只有4-8个)。您的脚本循环无法做到这一点。非常感谢您的回答。我非常惊讶,因为我甚至检查了MATLAB在这方面比FORTRAN快。我一直认为MATLAB很慢。我知道有很多事情我没有考虑过,非常感谢你的回答。我非常惊讶,因为我甚至检查了MATLAB在这方面比FORTRAN快。我一直认为MATLAB很慢。我知道有很多事情我没有考虑过。