uBLAS を使用している場合、Boost uBLAS 関数の代わりにインテル® マス・カーネル・ライブラリー (インテル® MKL) の関数を使って、C++ で BLAS 行列-行列乗算を実行できます。 uBLAS は Boost C++ オープンソース・ライブラリーで、密行列、圧縮行列、およびスパース行列で BLAS の機能を利用できます。ライブラリーは式を関数の引数として渡すために式テンプレート方式を使用しており、1 つのパスで (一時行列を使用しないで) ベクトルと行列式を評価できます。uBLAS には 2 つのモードがあります。
Boost uBLAS のドキュメントは、http://www.boost.org/ (英語) から入手できます。
インテル® MKL には、uBLAS dense 行列-行列乗算をインテル® MKL gemm 呼び出しに置換するオーバーロードされた prod() 関数が用意されています。 これらの関数は uBLAS 式テンプレートではなく一時行列を使用しますが、行列のサイズが小さくない (50 以上) 場合はパフォーマンスの向上が期待できます。
関数を使用するためにソースコードを変更する必要はありません。関数の呼び出し方法は以下のとおりです。
以下に置換される式の一覧を示します。
prod( m1, m2 )
prod( trans(m1), m2 )
prod( trans(conj(m1)), m2 )
prod( conj(trans(m1)), m2 )
prod( m1, trans(m2) )
prod( trans(m1), trans(m2) )
prod( trans(conj(m1)), trans(m2) )
prod( conj(trans(m1)), trans(m2) )
prod( m1, trans(conj(m2)) )
prod( trans(m1), trans(conj(m2)) )
prod( trans(conj(m1)), trans(conj(m2)) )
prod( conj(trans(m1)), trans(conj(m2)) )
prod( m1, conj(trans(m2)) )
prod( trans(m1), conj(trans(m2)) )
prod( trans(conj(m1)), conj(trans(m2)) )
prod( conj(trans(m1)), conj(trans(m2)) )
これらの式は、リリースモードでのみ (NDEBUG プリプロセッサー・シンボルが定義されている場合のみ) 置換されます。 サポートしている uBLAS のバージョンは、Boost 1.34.1、1.35.0、1.36.0、および 1.37.0 です。http://www.boost.org/ から入手できます。
<mkl ディレクトリー>/examples/ublas/source/sylvester.cpp ファイルのコードサンプルは、シルベスター方程式の特別なケースを解くインテル® MKL uBLAS ヘッダーファイルの使用例です。
インテル® MKL ublas サンプルを実行するには、BOOST_ROOT パラメーターを make コマンドで指定します。例えば、Boost バージョン 1.37.0 を使用する場合は、次のように指定します。
make libia32 BOOST_ROOT = <your_path>/boost_1_37_0
© 2006 - 2010 Intel Corporation. 無断での引用、転載を禁じます。