CPUで有名なIntelは、実はソフトウェアも販売しており、高性能で中々良い。
純正Intel製のCPUで相当な速度を引出すらしい。C++とFortranがある。
工夫次第で上記FortranコンパイラによるLAPACKのビルドも可能のようです。 「Linux で PCクラスタを組む」記にて、大変有用な情報を得ることができました。以下はここの丸写しの様なものです。こちらと併用して以下の様にしたら、さしあたり私の環境(Debian, Kernel 2.4.18, ifc 7.1)で動作したようです。しかし細かい検証は**一切**行っていないため、トラブルを内包している可能性があります。
make.incは以下の様にします。
FORTRAN = ifc OPTS = -O3 DRVOPTS = $(OPTS) NOOPT = -O0 LOADER = ifc LOADOPTS = -O0 -L /opt/intel/compiler70/ia32/lib -lPEPCF90
次にMakefileの最後に以下を付け足します。
.f.o: $(FORTRAN) $(OPTS) -c $*.f dcabs1.o: $(FORTRAN) $(NOOPT) -c $*.f xerbla.o: $(FORTRAN) $(NOOPT) -c $*.f dlamch.f: $(FORTRAN) $(NOOPT) -c $*.f slamch.f: $(FORTRAN) $(NOOPT) -c $*.f
そして、先の「Linux で PCクラスタを組む」記から辿れるLAPACKのパッチをあてて、以下の様にコンパイルします。
make install make blaslib make lapacklib
上にも述べたとおり、こうしてできたライブラリは差し当たり動いてる感じです。
Intel Fortran Compiler に付属のデバッガidbについてメモしようと思ったが、書くことがなかった。
stop at x # x行目にbreakpointを設定 run # プログラム実行、最初のbreakpointで停止 sh hoge # シェルでのコマンドhogeを実行
性能の高い数値計算ライブラリ。
Linuxのmklは不具合を修正したsp1なるものも配布されているのですが、sp1自体にもLAPACKまわりに結構なバグがあって注意を要します。共有ライブラリのlibmkl_lapack.so(実体はlibmkl_lapack64.so)で定義されていない関数があるのです。
$ nm -A libmkl_lapack64.so | grep __MKL_LAPACK__dgeqrf libmkl_lapack64.so: U __MKL_LAPACK__dgeqrf
次のバージョンであるmkl6.0で修正されているようなのですが、リリースまでは静的にリンクするなどの対策を要します。また、マニュアルに記載されていない事項もあり、Cから使う場合はf2c依存性があるとかlibguideライブラリもリンクしなればならないとかで、実際に使えるようになるまでには随分と苦労しました。結局LAPACKをiccから使う時、リンクの際のコマンドラインは以下のようになります。(mkl.hをインクルードする必要もあります)
icc -I/opt/intel/mkl/include hoge.c -L/opt/intel/mkl/lib/32 \ /opt/intel/mkl/lib/32/libmkl_lapack.a \ /opt/intel/mkl/lib/32/libmkl_p4.a \ <---- Pentium4用 -lguide -pthread -lc -lm -lf2c