今日まで、私は大規模な問題には C++、C、または Fortran に頼る必要があると確信していました。ただし、最近のベンチマークでは、クラス の 18000x18000 の下三角行列であるa %*% t(a)
の結果が、r-evolution パッケージとマルチスレッドを使用して 5 秒で得られました。a
dgCMatrix
ただし、Intel ifort コンパイラー、並列計算、および MKL ライブラリーに組み込まれた BLAS ルーチンを使用する場合でも、Fortran コードは同じ問題に常に約 1 分かかります。トリックとは何か、C や Fortran のような純粋な言語でそれを利用する方法を知っている人はいますか?
仕様
- コンパイラ: ifort 14.0
- マーク:
- バージョン 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 でコンパイル