私はProfessional CUDA C Programmingを読んでいる、とGPUアーキテクチャの概要セクションで:「ワープ内のすべてのスレッドは、同じ命令を同時に実行します。 GPUで?
CUDAは32と呼ばれる縦糸のグループ内のスレッドを管理し、実行するための単一命令複数スレッド(SIMT)アーキテクチャを採用しています。ワープ内のすべてのスレッドは、同じ命令を同時に実行します。各スレッドはそれ自身の命令アドレスカウンタとレジスタ状態を持ち、それ自身のデータに対して現在の命令を実行する。各SMは、割り当てられたスレッドブロックを32スレッドのワープに分割し、使用可能なハードウェアリソース上での実行をスケジュールします。
SIMTアーキテクチャは、SIMD(単一命令、複数データ)アーキテクチャに似ています。 SIMDとSIMTは、同じ命令を複数の実行ユニットにブロードキャストすることによって並列性を実装します。重要な違いは、SIMDでは、ベクトルのすべてのベクトル要素が単一の同期グループ内で一緒に実行される必要がありますが、SIMTでは同じワープの複数のスレッドが独立して実行できることです。ワープ内のすべてのスレッドが同じプログラムアドレスで一緒に開始されても、個々のスレッドが異なる動作をする可能性があります。 SIMTを使用すると、独立したスカラースレッド用のスレッドレベルのパラレルコードと、コーディネートされたスレッド用のデータパラレルコードを作成できます。 SIMTモデルには、SIMDにはない3つの重要な機能があります。
➤各スレッドにはそれぞれ独自の命令アドレスカウンタがあります。
➤各スレッドには独自のレジスタ状態があります。
➤各スレッドは独立した実行パスを持つことができます。
第二段落で、それは「Even though all threads in a warp start together at the same program address, it is possible for individual threads to have different behavior.
」と言いながら、最初の段落は、「All threads in a warp execute the same instruction at the same time.
」を言及しています。それは私を混乱させ、上記の陳述は矛盾しているようです。誰でもそれを説明できますか?
これらの2つのケースでマスクされているスレッドに大きな違いがあるかどうかは分かりますか?プログラミングガイドには、「誤った述語を持つ命令は結果を書き込まず、アドレスやオペランドを評価しない」と述べています。これはNOPとはまったく違いますか?また、2番目のケースでは、どのような指示がどの段階で再生されるのかよく分かりません。ありがとう。 –