是MATLAB';LAPACK调用的实现比直接调用更高效?

是MATLAB';LAPACK调用的实现比直接调用更高效?,c,matlab,lapack,numerical-computing,C,Matlab,Lapack,Numerical Computing,我正在尝试将我在MATLAB中拥有的许多东西制作成C版本,我使用MATLAB的eig和dsyev调用对特征值分解进行计时,MATLAB的速度更快。例如: 10 x 10:0.003246秒(eig),0.013897秒(dsyev在C中) 100 x 100:0.001516秒(eig),0.001764秒(dsyev在C中) 1000 x 1000:0.304438秒(eig),0.356483秒(dsyev为C) 我的印象是MATLAB只是使用LAPACK调用来处理这些低级的东西。这幅画还有

我正在尝试将我在MATLAB中拥有的许多东西制作成C版本,我使用MATLAB的eig和dsyev调用对特征值分解进行计时,MATLAB的速度更快。例如:

10 x 10:0.003246秒(eig),0.013897秒(dsyev在C中)

100 x 100:0.001516秒(eig),0.001764秒(dsyev在C中)

1000 x 1000:0.304438秒(eig),0.356483秒(dsyev为C)

我的印象是MATLAB只是使用LAPACK调用来处理这些低级的东西。这幅画还有别的吗


谢谢

它使用了LAPACK的Intel实现,称为Intel MKLPossible duplicate of Hmm。。。有趣。看起来一个完整的C版本不会比MATLAB快很多…这很有趣,因为我使用MATLAB提供的LAPACK库来编写mex文件。我真的想知道原因是否在于调用的选择(dsyev vs dsyevx vs dseyvr,等等),matlab很可能在特征值代码上有专有的改进。底层BLAS库也可能存在差异,为了提高缓存效率而对矩阵操作进行的分段可能会产生相当大的影响。它使用了被称为“英特尔MKLPossible复制Hmm”的英特尔LAPACK实现。。。有趣。看起来一个完整的C版本不会比MATLAB快很多…这很有趣,因为我使用MATLAB提供的LAPACK库来编写mex文件。我真的想知道原因是否在于调用的选择(dsyev vs dsyevx vs dseyvr,等等),matlab很可能在特征值代码上有专有的改进。底层BLAS库也可能存在差异,矩阵操作的分段对缓存效率可能会产生相当大的影响。