Multithreading R中矩阵乘法的速度 直到今天,我才相信,对于大的问题,我们需要求助于C++、C或FORTRAN。然而,在最近的一次基准测试中,我使用r-evolution软件包和多线程在5秒内得到了%*%ta的结果,其中a是dgCMatrix类18000x18000的下三角矩阵

Multithreading R中矩阵乘法的速度 直到今天,我才相信,对于大的问题,我们需要求助于C++、C或FORTRAN。然而,在最近的一次基准测试中,我使用r-evolution软件包和多线程在5秒内得到了%*%ta的结果,其中a是dgCMatrix类18000x18000的下三角矩阵,multithreading,r,performance,fortran,matrix-multiplication,Multithreading,R,Performance,Fortran,Matrix Multiplication,然而,即使在使用内置于MKL库中的英特尔ifort编译器、并行计算和BLAS例程时,Fortran代码也总是需要大约一分钟来解决相同的问题。有人知道这个诀窍是什么,以及如何在C或Fortran等纯语言中使用它吗 规格 编译器:ifort 14.0 mkl: 版本11.1 在fortran代码的模块头中:使用mkl95_blas,仅使用trmm 编译器选项:-i8-I$MKLROOT/include/intel64/ilp64-I$MKLROOT/include 链接器选项:$MKLROOT/li

然而,即使在使用内置于MKL库中的英特尔ifort编译器、并行计算和BLAS例程时,Fortran代码也总是需要大约一分钟来解决相同的问题。有人知道这个诀窍是什么,以及如何在C或Fortran等纯语言中使用它吗

规格 编译器:ifort 14.0 mkl: 版本11.1 在fortran代码的模块头中:使用mkl95_blas,仅使用trmm 编译器选项:-i8-I$MKLROOT/include/intel64/ilp64-I$MKLROOT/include 链接器选项:$MKLROOT/lib/intel64/libmkl_blas95_ilp64.a\ -Wl,-启动组$MKLROOT/lib/intel64/libmkl_intel_ilp64.a\ $MKLROOT/lib/intel64/libmkl_intel_thread.a\ $MKLROOT/lib/intel64/libmkl_core.a\ -Wl-端组-liomp5-lpthread-lm 除此之外,复合和连接:-i-静态-O3-并行 本地BLAS f77布拉斯图书馆 用-O3-并行编译
由于存在这样的差异,可能存在缓存冲突问题。表示稀疏矩阵,BLAS表示稠密矩阵。难怪会有速度差。。。不管怎样,dgCMatrix是用C写的,所以你之前的假设并不矛盾。好的,我更接近于这个解决方案。我包括一个在我的计算机上编译的外部blas库。与mkl 1分钟的benmark相比,我从dtrmm函数中获得的结果只需4秒钟,比R快一点。世界再次发生了翻天覆地的变化。干杯和感谢,而不是%*%ta推荐的方式tcrossproda@user1407220. 既然您使用dtrmm获得了更好的结果,那么最好按照steabert的要求提供一些关于您所做工作的线索,以便了解您以前的程序为何如此缓慢。