MATLAB矩阵乘法编码效率

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

我正在使用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
            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实现是明智的。