私は、集中的な行列操作を行う Linux 上の商用シミュレーション ソフトウェアを使用しています。このソフトウェアはデフォルトでインテル® MKL を使用しますが、カスタム BLAS/LAPACK ライブラリーに置き換えることができます。このライブラリは、共有オブジェクト (.so) ライブラリである必要があり、BLAS および LAPACK 標準ルーチンの両方をエクスポートする必要があります。ソフトウェアには、それらすべてに標準の Fortran インターフェイスが必要です。
カスタム ライブラリを使用できることを確認するために、ATLAS をコンパイルし、その中に LAPACK (netlib から) をリンクしました。このソフトウェアは、コンパイルした ATLAS バージョンを問題なく使用できました。
ここで、シミュレーション速度を向上させるために、ソフトウェアに cuBLAS を使用させたいと考えています。cublas
私は、cuBLAS が標準の BLAS 関数名 (プレフィックスが付いている)をエクスポートしないという問題に直面しました。さらに、ライブラリ cuBLAS ライブラリには LAPACK ルーチンが含まれていません。readelf -a
エクスポートされた関数を確認するために使用します。
一方で、この問題を解決するためにマグマを使用してみました。ATLAS、LAPACK、cuBLASの全てに対してコンパイル、リンクすることに成功しました。しかし、それでも正しい関数をエクスポートせず、最終的な共有オブジェクトに LAPACK を含めません。これが想定されている方法なのか、ビルドプロセス中に何か間違ったことをしたのかはわかりません。
CULAも見つけましたが、これで問題が解決するかどうかはわかりません。
cuBLAS/LAPACK (または適切なラッパー) を単一 (.so) にリンクして、標準の Fortran インターフェイスを正しい関数名でエクスポートしようとした人はいますか? 概念的には可能だと思いますが、その方法がわかりません!