行列乗算と分解(LU、SVDなど)に大きく依存する線形代数ツールをC++で開発しており、大きな行列に適用することを意図しています。 Intel MKLを使用してピーク性能を実現しましたが、インテルを搭載していない人やMKLをインストールしたくない人では動作しないと想定して、インテルMKL専用バージョンをリリースしたくありません。代わりに、私はインテル®MKL固有ではないより一般的なコードをリリースするべきですが、BLASとLAPACKのどちらの実装(例えばOpenBLASまたはATLAS)を使用するかを指定することができます。複数のBLAS/LAPACKライブラリの一般化
インテル®MKLに固有の機能(プロトタイプ)はいくつかありますが、いくつかの(ヘルパー?)機能とタイプがあります。たとえば、私が使用するMKL_INT型と、mkl_mallocがあります。このarticleは、マクロを使って型を再定義することを提案しています。これも私の最初の考えでした。私はまた、ヘッダーのマクロも持っていると思います。
BLAS/LAPACKの実装には無関係なコードを書くのが標準的だと思いますが、マクロに頼るよりも洗練された方法があるかどうかを知りたかったのです - 特に後者では再コンパイル切り替えるコードは、私が使用している他のツールのdoes not seem to be necessaryです。
これは素晴らしいです、ギャビンありがとうございます。 mkl.hやmkl_lapacke.hなど、MKLに固有のヘッダファイルはどうでしょうか? –
ほとんどの人は、あらゆる実装から悩み、独自のコードベースを維持できる一般的なlapack.h/blas1.h/blas2.h/etcを持っています。コンパイル時に実装ヘッダーに指定する人もいます(つまり、 'gcc -I $(MY_LAPACK_HEADER_DIR)...')。私は通常前者を選ぶ...次に何かのためにmkl.hは必要ないはずだ –
あなたの後者のオプションは私にはすぐには分かりません...あなたはディレクトリを渡していますが、ファイルの実際の名前はどこで指定しますか(mkl.h)?その場合にマクロを使用しますか? –