for循环中的计算速度

时间:2012-11-19 14:09:30

标签: performance matlab random for-loop matrix

我在matlab中编写了一个小循环来生成随机NxN矩阵。循环是

tic
for i=1:10000
    u=rand(1,10000);
    tau(i,:)=d.*(u(1,:)-0.5);
end
toc

我首先尝试了一次循环程序,

    u=rand(1,10000);
    tau=d.*(u(1,:)-0.5);

在0.000169秒给了我tau。我认为循环然后需要大约1.69秒。事实并非如此,粉丝狂奔需要555.018280。

有没有 a)速度与迭代次数线性不相关的原因是什么? b)为什么所以多长时间做多次常规的原因 c)一种加快这一速度的方法(我实际上想生成更大的矩阵),例如一个更好的循环或方式给我一个相同类型的1'000'000x1'000'000矩阵?< / p>

1 个答案:

答案 0 :(得分:0)

一个显而易见的可能性是内存访问量。测试循环的内存可能完全在缓存中,但是完整循环写入的内存需要大量的主内存访问。

这是一个可检验的假设:时间写完整个矩阵,而不进行算术运算。

如果我了解Matlab索引,您可以更快地切换维度,以便编写位于同一列中的块,而不是同一行。将u转换为循环外的列向量也可能有所帮助。通常,应尽可能按内存顺序进行大型矩阵访问。