【问题标题】:MATLAB: Why is double looping so much slower than squaring?MATLAB:为什么双循环比平方慢得多?
【发布时间】:2018-01-09 17:55:40
【问题描述】:

我想知道为什么用A2=A^2 命令(A 是一个LxL 矩阵)对矩阵求平方比只执行一个双重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 有一个非常有效的矩阵乘法实现,我不会感到惊讶,因为它是做什么的,但我不明白如何有一种比循环遍历更快的方法来执行元素操作.

感谢您的时间。

【问题讨论】:

    标签: matlab performance loops matrix


    【解决方案1】:

    有几件事可以使向量运算比您的循环更快。

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

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

    最后,可以将操作推送到 GPU,GPU 可以同时处理更多元素(数百个内核,而 CPU 上只有 4-8 个内核)。您的脚本循环无法做到这一点。

    【讨论】:

    • 非常感谢您的回答。我很惊讶,因为我什至检查了 MATLAB 在这方面比 FORTRAN 快。我一直认为 MATLAB 很慢。我知道有很多事情我没有考虑到。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-09-13
      • 2015-10-07
      • 2019-09-29
      • 2014-01-21
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多