私はいくつかのプロジェクトで OpenCL を使用してきましたが、常にカーネルを 1 つの (場合によってはかなり大きな) 関数として記述してきました。現在、より複雑なプロジェクトに取り組んでおり、複数のカーネルで機能を共有したいと考えています。
しかし、私が見つけることができる例はすべて、カーネルを単一のファイルとして示しています (二次関数を呼び出すものはほとんどありません)。複数のファイルを使用できるように思われます-clCreateProgramWithSource()
複数の文字列を受け入れます(そしてそれらを結合すると思います)-pyopenclProgram()
は単一のソースしか取りません。
ですから、これを行った経験のある人から聞きたいです:
- 複数のソース ファイルに関連する問題はありますか?
- pyopencl が単純にファイルを連結するための最善の回避策はありますか?
- 関数のライブラリをコンパイルする方法はありますか (すべてが使用されていなくても、各カーネルでライブラリ ソースを渡す代わりに)?
- 毎回ライブラリ ソースを渡す必要がある場合、未使用の関数は破棄されますか (オーバーヘッドなし)?
- その他のベストプラクティス/提案はありますか?
ありがとう。