超並列プロセッサプログラミング演習 - 第 4 章 CUDA データ並列実行モデル

第4章 データ並列実行モデル

「超並列プロセッサ プログラミングの実践」の学習。他の章ではCUDA Cのコラムに焦点を当てています。

CUDA C プログラミングに適したリンク:

スレッドはスレッド ブロックを形成し、スレッド ブロックはスレッド グリッドを形成し、スレッド グリッドはカーネルです。カーネル内のすべてのスレッドは同じコードを実行します。違いは、異なるスレッドが異なるブロック (異なる blockIdx) に属し、ブロック内で固有の位置 (threadIdx) を持っていることです。そのため、各スレッドは固有の座標を持ち、データへのアクセスは可能です。独立して制御されます。
同じ実行プロセス + 異なるデータソース = 並列データ処理

4.1 CUDA スレッドの構成

グリッド内のスレッド ブロックとブロック内のスレッドはすべて 3 次元の位置です。

ここに画像の説明を挿入

カーネルのサイズは、編成中に動的に指定することもでき、n によって制御され、カーネルの追加時に n のサイズに従って決定されます。
ここに画像の説明を挿入
クイックスタート 1D グリッドとスレッド:
ここに画像の説明を挿入

具体的な例:
ここに画像の説明を挿入

dimBlock(2,2,1) は、グリッド内のブロックが 2 2 1 構造であることを意味することに注意してください。dimGrid は、ブロック内のスレッドが 16*16 であることを意味します

4.2 スレッドと多次元データ間のマッピング

データの形式に応じて、適切なスレッド構成を選択します。画像 = 2D など。
スレッド ブロックは 16 16です。76 64 の画像の場合、76/16 * 64/16 = 5*4 のスレッド ブロックが必要です。n、m はピクチャの x、y の最大値を表し、d_Pin/d_Pout はピクチャ データのソース アドレスとデスティネーション アドレス ポインタです。
ここに画像の説明を挿入
ここに画像の説明を挿入

3 次元の位置測位を実行したい場合は、追加の空間 Z 情報を追加する必要があります
ここに画像の説明を挿入

4.3 行列の乗算

画像処理では、スレッドが処理対象のピクセル (ソース データ) に対応し、各ピクセルを処理して並列処理を実現します。行列乗算では、スレッドは宛先行列 (宛先データ) の値に対応し、同じ∑ di , k 1 ∗ dk , j 2 \sum{d^1_{i, k}*d^2_{k を実行します。 ,j}}d1dk j2並行効果を達成するために
ここに画像の説明を挿入

具体的な実装は以下の通りです。
ここに画像の説明を挿入

4.4 スレッドの同期と透過的なスケーラビリティ

_ syncthreads() フェンス同期 (つまり、同じスレッド ブロック内で高速と低速、2 つ)
フェンス デッドロック:
ここに画像の説明を挿入

異なるスレッド ブロック間にはバリア同期はなく、任意の順序で実行できます。
透過的なスケーラビリティ:
ここに画像の説明を挿入

4.5 スレッドブロックのリソース割り当て

実行リソースはストリーミング マルチプロセッサ (SM) に編成されます。1 つの SM には複数のスレッド ブロックが割り当てられ、各デバイスには 1 つの SM 上のスレッド ブロックにも制限があります。たとえば、SM は 64 スレッドと 2 ブロックを許可しますが、SM は 32 スレッドを含む 2 ブロックしか割り当てることができません。 block は、16 スレッドを含む 4 スレッド ブロックを割り当てることができません。

4.6 デバイスのプロパティのクエリ

ここに画像の説明を挿入

すべてのデバイスのプロパティをクエリする
ここに画像の説明を挿入

クエリに対応するその他のパラメータ
ここに画像の説明を挿入
ここに画像の説明を挿入

4.7 スレッドのスケジューリングと許容遅延時間

スレッド ブロックが SM に割り当てられると、スレッド ブロックは 32 個のスレッドから構成されるワープ ユニットに分割されます。Warp は、SM のスレッド スケジューリング ユニットです。
SM は、単一命令複数データ (SIMD) モードに従ってワープのすべてのスレッドを実行します。ワープ内のすべてのスレッドは、いつでも 1 つの命令のみをフェッチして実行できます。
SM には複数のストリーム プロセッサ (Streaming Processor、SP) が含まれており、SP は実際に命令を実行するコンポーネントです。一般に、SM 内の SP の数は割り当てられたスレッドの数よりも少なく、SM 内のハードウェアはすべてのワープの一部のみを実行します。SM に複数のワープが割り当てられている場合、各瞬間に実行されるのは一部だけですが、SM はハードウェアを無駄にしないように、「長い遅延」を必要とするワープ命令を脇に置き、短いレイテンシーの命令を実行します。他のスレッドの実行によって遅延時間をオーバーライドするこのメカニズムは、「遅延許容」または「遅延隠蔽」と呼ばれます
これは、SP がワープまたはスレッドの数より少ない場合でも、複数のワープが 1 つの SM に供給される理由でもあります。
レイテンシーの隠蔽**。
これは、SP がワープまたはスレッドの数より少ない場合でも、複数のワープが 1 つの SM に供給される理由でもあります。

おすすめ

転載: blog.csdn.net/qq_40491305/article/details/116235878