私は、CUDAカーネル内でLAPACKE関数を使用して、小さな方程式系を解くことを試みています。私は呼び出したいカーネル関数を含むメインソースファイルを持っています。そのカーネル関数の中で、別のソースファイルで定義されているLAPACKE関数LAPACKE_dgesv()
を呼び出したいと思います。PyCuda SourceModuleを入手してデバイスコードを含む複数のソースファイルをコンパイルするには?
私のメインソースファイルには、LAPACKE_dgesv()
の宣言を含むlapacke.h
というヘッダーファイルが含まれています。さらに、lapacke.h
を編集して、__device__
の前に、LAPACKE_dgesv()
の関数宣言を追加しました。
LAPACKE_dgesv()
の定義を含むソースファイルのディレクトリをPythonコードのSourceModule呼び出しのinclude_dirs
引数に追加しました。私は、コードを実行したときしかし、私はこのエラーを取得する:
ptxas fatal : Unresolved extern function 'LAPACKE_dgesv'
私の推測では、LAPACKE_dgesv()
の定義を含むソースファイルをコンパイルされていないことです。
PyCudaにデバイスコードを含む複数のソースファイルをコンパイルする方法はありますか? --relocatable-device-code=true
フラグを持つCUDAコンパイラをPyCudaが実行する方法が必要になると思われます。
もし私が手動でPyCudaの外にあるcubinファイルを作成したら、それをPythonコードの 'module_from_file' PyCuda関数を使ってロードすることができましたか? – Thomas
はい。また、デバイスコードにC++リンケージがある場合に、シンボル名を取得するために、先験的にキューインテンの内容を調べることができるという利点があります – talonmies