2017-08-09 9 views
0

私はOpenCLを初めて使用し、FPGA上でOpenCLを使用してブロック暗号の暗号化に取り組んでいます。私はいくつかの論文を読んで、Openclには2種類のカーネルがあることを知っています(単一のワークアイテムとNDRange)。 NDRangeカーネルの機能はコンパイラによって自動的にパイプライン化されるのではなく、単一のワークアイテムカーネルの機能が自動的にパイプライン化されます。FPGA上のOpenCL単一作業項目VS NDRangeカーネル

FPGAにNDRangeカーネル ではなく単一のワークアイテムカーネルを実装することをお勧めしますか?どうして?

すべてのデータを読み込むまでカーネルをループさせたいのであれば、カーネルは一度にホストから何らかのデータを取り出して、FPGA上で実行して書き戻します。パイプラインはどのように達成できますか?

+1

FPGAベンダーからのガイダンスを確認することをお勧めします。彼らはコンパイラをよく知っています。私は彼らのウェブサイトでも良いビデオを見たことがあります。あなたはこの質問に対する答えを知るだけでなく、その過程でさらに多くのことを学ぶでしょう。 – Dithermaster

答えて

1

単一の作業項目カーネルでは、計算ループをカーネルに移すことができます。カスタムパイプラインの生成、累積の巧妙な最適化、「プラグマ」によるアクセスパターンの制御が可能です。 NDRangeカーネルは、ワークアイテム間でデータをパーティション化することに依存し、コンパイラは、カーネルによって記述された各ユニットをSIMDタイプのハードウェアを生成します。問題に規則的なデータ並列処理があると、パーティション化が容易になります。 OpenCLのNDRangeカーネルは、GPUのようなSIMD計算ユニット向けに設計されています。ストリーミングアプリケーションでは、「チャネル」を使用して単一のワークアイテムカーネル間でデータを移動し、DRAMの帯域幅を解放することもできます。 NDRangeカーネルでは、カーネル間のデータ共有の媒体としてグローバルメモリを使用する必要があります。

関連する問題