直到今天,我都坚信对于大问题,需要求助于 C++、C 或 Fortran。然而,在最近的一次基准测试中,我使用 r-evolution 包和多线程在 5 秒内得到了 18000x18000 类的下三角矩阵的a %*% t(a)
结果。a
dgCMatrix
然而,即使使用英特尔 ifort 编译器、并行计算和 MKL 库中内置的 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,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_ilp64.a \ $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \ $(MKLROOT)/lib/intel64/libmkl_core.a \ -Wl,--end-group -liomp5 -lpthread -lm
- 此外,编译和链接:-i-static -O3 -parallel
- 本地 BLAS
- f77 BLAS 库
- 使用 -O3 -parallel 编译