15

私はいくつかのプロジェクトで OpenCL を使用してきましたが、常にカーネルを 1 つの (場合によってはかなり大きな) 関数として記述してきました。現在、より複雑なプロジェクトに取り組んでおり、複数のカーネルで機能を共有したいと考えています。

しかし、私が見つけることができる例はすべて、カーネルを単一のファイルとして示しています (二次関数を呼び出すものはほとんどありません)。複数のファイルを使用できるように思われます-clCreateProgramWithSource()複数の文字列を受け入れます(そしてそれらを結合すると思います)-pyopenclProgram()は単一のソースしか取りません。

ですから、これを行った経験のある人から聞きたいです:

  • 複数のソース ファイルに関連する問題はありますか?
  • pyopencl が単純にファイルを連結するための最善の回避策はありますか?
  • 関数のライブラリをコンパイルする方法はありますか (すべてが使用されていなくても、各カーネルでライブラリ ソースを渡す代わりに)?
  • 毎回ライブラリ ソースを渡す必要がある場合、未使用の関数は破棄されますか (オーバーヘッドなし)?
  • その他のベストプラクティス/提案はありますか?

ありがとう。

4

2 に答える 2

6

OpenCL には、プログラム内に複数のソース ファイルという概念があるとは思いません。プログラムは 1 つのコンパイル単位です。ただし、#include を使用して、コンパイル時にヘッダーまたはその他の .cl ファイルを取り込むことができます。

OpenCL プログラムには複数のカーネルを含めることができます。そのため、1 回のコンパイル後に、コンパイルされたカーネル セットのいずれかを呼び出すことができます。

使用されていないコード (関数、または静的に到達できないことがわかっているもの) は、コンパイル時に多少のコストがかかりますが、コンパイル中に削除されると想定できます。

于 2011-10-06T12:02:23.987 に答える
5

OpenCL 1.2 では、さまざまなオブジェクト ファイルをリンクします。

于 2012-01-25T19:22:13.903 に答える