なぜ、CUDAやOpenCLの中GPUスレッドはグリッドに割り当てられていますか?

StackOverflow https://stackoverflow.com/questions/1342992

  •  20-09-2019
  •  | 
  •  

質問

私はちょうど OpenCLのを学んだ、としようとしたとき、私はポイントによカーネルを起動します。なぜそれがGPUスレッドがグリッド内で管理されているということでしょうか?

私は詳細にこれについての詳細を読んでするつもりですが、それは簡単な説明といいだろう。 GPGPUs の?

で作業する場合、それはこのように常にあります
役に立ちましたか?

解決

これは、CUDA、OpenCLのに使用される一般的なアプローチは、と私はATIストリームと思います。

グリッドの背後にある考え方は、処理されるデータとデータ処理を行うスレッド間の単純な、しかし柔軟なマッピングを提供することです。 GPGPU実行モデルの単純なバージョンでは、一つのGPUスレッドはデータの1D、2Dまたは3Dグリッド内の各出力要素は、「割り当て」です。この出力要素を処理するために、スレッドは、対応する位置又は入力データグリッド(S)に隣接する位置からの1つ(または複数)の要素を読み込みます。スレッドを読み、どこで、出力データ要素を格納するためにどの入力データ要素を把握するために、グリッド内のスレッドを編成することによって、それは簡単です。

これは、一つのスレッドがCPUコアごとに割り当てられている一般的なマルチコア、CPUスレッドモデルとは対照的で、各スレッドのプロセスの多くの入力と出力要素(例えば、クアッドコアシステムにおけるデータの1/4)

他のヒント

簡単な答えは、GPUには、画素の2次元グリッドである画像とテクスチャを処理するように設計されていることです。あなたはDirectXのまたはOpenGLで三角形をレンダリングする場合、ハードウェアは、ピクセルのグリッドにそれをラスタライズします。

私は丸い穴に四角いペグを置くの古典的なアナロジーを呼び出します。さて、この場合にはGPUは非常に正方形の穴ではなく、同様の丸いGP(汎用)としてお勧めします。

上記の説明は、GPUのアーキテクチャは、すべての処理がパイプラインは、各ストリームで同一であるとストリームで行われるので、データがそのようなセグメント化する必要が処理されるようになっている等、2Dテクスチャのアイデアを出します。

これは素敵なAPIである理由の一つは、通常、あなたは、いくつかのネストされたループを持っているアルゴリズムを使用して作業しているということです。あなたが1つ、2つまたは3つのループを持っている場合は、1つ、2つまたは3つの次元のグリッドはあなたに、各指標の値のためのスレッドを与え、問題にうまくマッピングします。

ですから、あなたのカーネル(インデックス値)に必要な値に自然APIで表現されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top