MATLAB矩阵乘法编码效率
我正在使用MATLAB制作一些矩阵乘法技术的原型,并比较其效率。最后,我将把原型代码移到C中。这是一个家庭作业,我们需要编写一个高效的矩阵乘法例程(通过了解缓存大小、位置等) 我很好奇这两个非常相似的回路之间的效率差异: 矩阵乘法循环1 -A的列总和乘以B的元素->C的列MATLAB矩阵乘法编码效率,matlab,performance,matrix,matrix-multiplication,Matlab,Performance,Matrix,Matrix Multiplication,我正在使用MATLAB制作一些矩阵乘法技术的原型,并比较其效率。最后,我将把原型代码移到C中。这是一个家庭作业,我们需要编写一个高效的矩阵乘法例程(通过了解缓存大小、位置等) 我很好奇这两个非常相似的回路之间的效率差异: 矩阵乘法循环1 -A的列总和乘以B的元素->C的列 function [C] = dgemm_naivepe( A,B,C,n ) for j=1:n tempcol=zeros(n,1); for k=1:n for i=1:n
function [C] = dgemm_naivepe( A,B,C,n )
for j=1:n
tempcol=zeros(n,1);
for k=1:n
for i=1:n
tempcol(i)=tempcol(i)+A(i+(k-1)*n)*B(k+(j-1)*n);
end
end
for k=1:n
C(k+(j-1)*n)=tempcol(k);
end
end
function [C] = dgemm_naivepe( A,B,C,n )
for j=1:n
for k=1:n
for i=1:n
C(i+(j-1)*n)=C(i+(j-1)*n)+A(i+(k-1)*n)*B(k+(j-1)*n);
end
end
end
end
结束
矩阵乘法循环2
-A的列总和乘以B的元素->C的列
function [C] = dgemm_naivepe( A,B,C,n )
for j=1:n
tempcol=zeros(n,1);
for k=1:n
for i=1:n
tempcol(i)=tempcol(i)+A(i+(k-1)*n)*B(k+(j-1)*n);
end
end
for k=1:n
C(k+(j-1)*n)=tempcol(k);
end
end
function [C] = dgemm_naivepe( A,B,C,n )
for j=1:n
for k=1:n
for i=1:n
C(i+(j-1)*n)=C(i+(j-1)*n)+A(i+(k-1)*n)*B(k+(j-1)*n);
end
end
end
end
在对各种矩阵大小进行多次测试后,我发现循环1比循环2快。有人能帮我理解为什么会这样吗
编辑:如您所见,矩阵按列主顺序存储为1D数组。您是如何精确计时的?另外,为什么要将
C
作为输入传递?它的内容似乎没有在函数中使用。您应该阅读Golub&Van Loan()。@LuisMendo使用MATLAB的tic
,toc
utility@EternusVia使用tic
,toc
不是很可靠。更好地使用timeit
如何知道Python中效率最高的东西在C中效率最高?如果您的目标是构建一个高效的C例程,那么比较各种C实现是明智的。