2016-08-24 2 views
0

私はOpenCL Khronosの本、GATechのチュートリアル、NYUのチュートリアルなど、いくつかのリソースを使いました。しかし、私はまだ完全に理解していません。 カーネルとプログラムオブジェクトの違いは何ですか?カーネルとプログラムオブジェクトの違いは何ですか?

は、これまでのところ最良の説明は私のために、このですが、私は完全に理解し、これは十分ではありません。 プログラムオブジェクトを:プログラムオブジェクトは、いくつかのソース(潜在的にいくつかのカーネル関数を使用)コードとその最後に成功したビルドをカプセル化します。 KERNEL:カーネルオブジェクトは、カーネルが実行されるときに使用されるカーネルの 引数の値をカプセル化します。

おそらくプログラムオブジェクトはコードですか?カーネルはコンパイルされた実行ファイルですか?それですか?私はそのようなことを理解することができたからです。

ありがとうございます!

+0

この説明も私には意味がありません。カーネルはOpenCLデバイス上で動作するOpenCL関数です。プログラムオブジェクトは、プログラムのソースコードとカーネルを実装する実行ファイルです。私の切断は、関数とソースコードが同じことを意味するということです。 –

+1

私はこのことがなぜあなたにとって重要なのか分かりません。あなたは専門用語にこだわっているようです。実用的な側面は重要であり、それはかなり明確です。カーネルは実行可能なコンパイル済みの関数です。プログラムは、潜在的にいくつかのカーネルを含むコンパイルされたコードです。つまり、プログラミング言語のプログラムと関数/ルーチンと全く同じ抽象化レベルのオブジェクトです。 –

+0

それは完全に意味をなさない。ありがとう! –

答えて

3

プログラムは、1つ以上のカーネルとオプションでサポートされている関数のコレクションです。プログラムは、ソースまたはいくつかのタイプのバイナリ(例えば、SPIR、SPIR-V、ネイティブ)から作成することができる。カーネルを選択する前に、(clBuildProgramまたはclCompileProgramとclLinkProgramを使用して)1つ以上のデバイス用に(ソースまたは中間バイナリから作成された)いくつかのプログラムオブジェクトを構築する必要があります。プログラムを考える最も簡単な方法は、プログラマーが使用するためのDLLとエクスポートカーネルのようなものであるということです。

カーネルは実行可能なエンティティです(インテルハードウェア上のビデオモーション推定カーネルなど)を表すビルトインカーネルを持つことができるため、必ずしもコンパイルされません)、引数をバインドしてさまざまなキューに送信できます実行のために。

+0

ありがとう、私はルーフォのコメントとあなたの答えの組み合わせが、私が本/スライドで見つけられなかった豊かな理解を与えてくれたと思う。再度、感謝します! –

関連する問題