私はいくつかのプロジェクトでOpenCLを扱ってきましたが、カーネルを常に(たまに大きな)関数として書きました。今私はより複雑なプロジェクトに取り組んでおり、いくつかのカーネル間で機能を共有したいと考えています。大規模なOpenCLカーネルの構造
しかし、すべての例では、カーネルを1つのファイルとして表示しています(2次関数を呼び出すことはほとんどありません)。 clCreateProgramWithSource()
は複数の文字列を受け入れることができます(それらを組み合わせると思います)。pyopenclのProgram()
は単一のソースしか取りませんが、複数のファイルを使用することは可能です。
だから私は経験がこれをやって誰からも聞きたい:
- は、複数のソースファイルに関連するすべての問題はありますか?
- pyopenclがファイルを単純に連結する最善の方法はありますか?
- 関数のライブラリをコンパイルする方法はありますか?(すべてではないにしても、各カーネルでライブラリソースを渡すのではなく)
- 毎回ライブラリのソースを渡す必要がある場合、未使用の関数は破棄されます(オーバーヘッドはありません)?
- その他のベストプラクティス/提案はありますか?
ありがとうございます。
#include "part1.cl" #include "part2.cl"を持つ1つの連結ファイルを作成できます。これは私のために働く(NVidiaコンパイラ)、おそらくアプリケーションが動くたびにすべてがコンパイルされる。 私は、関数コードが各カーネルにインライン展開されるので、プリコンパイルされた関数のライブラリを持っているのはちょっとしたSFであると思います(再帰関数を書くことができない理由です)。ありがとう。 –