Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:为什么双循环比平方慢得多?_Matlab_Performance_Loops_Matrix - Fatal编程技术网

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很慢。我知道有很多事情我没有考虑过。