我一直在了解缓存大小对代码性能的影响。我编写了一个小代码来查看在 MATLAB 中使用列主循环如何比使用行主循环更好,因为 MATLAB 将矩阵存储在 FORTRAN 等主列中。我还与 MATLAB 的内部乘法例程进行了比较。这是代码和结果:
% row major access
tic
for i=1:n
for j=1:n
b1(i)=b1(i)+A(i,j)*x(j);
end
end
t1(count)=toc;
% column major access
tic
for j=1:n
for i=1:n
b2(i)=b2(i)+A(i,j)*x(j);
end
end
t2(count)=toc;
% column major vector ops
tic
for i=1:n
b3(i)=b3(i)+A(i,:)*x(:);
end
t3(count)=toc;
% row major vector ops
for j=1:n
b4(:)=b4(:)+A(:,j)*x(j);
end
t4(count)=toc;
% MATLAB built in
tic
b5=A*x;
t5(count)=toc;
% double vop
tic
b6=A(:,:)*x(:);
t6(count)=toc;
列主循环比行主循环快,但是 MATLAB 怎么这么快呢?
