第4章 データ並列実行モデル
「超並列プロセッサ プログラミングの実践」の学習。他の章ではCUDA Cのコラムに焦点を当てています。
CUDA C プログラミングに適したリンク:
- 第 3 章 CUDA の概要 - CUDA C プログラミング ベクトルの追加
- 第4章 CUDAデータ並列実行モデル
- 第5章 CUDAメモリ
- 第 6 章 CUDA パフォーマンスの最適化 (原書へのリンク付き)
- カーネル関数: CUDA プログラミング入門 (1) - スレッドの構成とイメージ操作によるカーネル関数の使用方法を参照
- 拡張: CUDA 畳み込みの計算と最適化 - 1 次元の畳み込みを例にします
スレッドはスレッド ブロックを形成し、スレッド ブロックはスレッド グリッドを形成し、スレッド グリッドはカーネルです。カーネル内のすべてのスレッドは同じコードを実行します。違いは、異なるスレッドが異なるブロック (異なる 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}}∑d私、k1∗dk 、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 に供給される理由でもあります。