速度をあげるために考えねばならないこととして、講義では計算量
を説明した。これらのソフトウェアでは計算量の観点から無駄がないことはもち
ろんであるが、それ以外にも重要な要素がある。
- ループのアンロールなどのテクニック
- メモリー階層を考慮したプログラミング
これらを追求すると、
利用するコンピューター・システムに合わせた
プログラムのチューニングが必要になり、
プログラムの汎用性が低くなる恐れがある。
しかし、
システムごとにチューニングが必要な部分を小さな部分に凝縮し、
他と分離することにより、この問題をある程度解決できる。
LAPACK については、BLAS がこのチューニングが必要な部分を担当している。
LAPACK に付属する BLAS は ``reference (参考) BLAS'' と呼ばれ、
FORTRAN で書かれているので移植性があるが、高速な計算を望む場合は
最適化された BLAS に差し換えることになる。
例えば Sun Workstation の場合、
Sun Microsystem 製ソフトウェア開発環境 Sun Workshop では、
コンパイラーと一緒に BLAS が (と実は LAPACK も) 提供されている)。
Windows や Intel CPU 向けの Linux の場合は Intel から BLAS が提供されて
いる (無償)。これらは人手で最適化されたものである (と思われる) が、
色々なパラメーターを変化させながら性能を測定することで、
最適なパラメーターを実験的に「算出」し、その結果を元に BLAS プログラムを
自動生成するソフトウェアもある (例えばフリーソフトの ATLAS)。
桂田 祐史
2017-06-19