私はProfessional CUDA C Programmingを読んでおり、GPUアーキテクチャの概要セクションで:
CUDA は、ワープと呼ばれる 32 個のグループでスレッドを管理および実行するために、Single Instruction Multiple Thread (SIMT) アーキテクチャを採用しています。ワープ内のすべてのスレッドは、同じ命令を同時に実行します。各スレッドには独自の命令アドレス カウンターとレジスタ状態があり、独自のデータに対して現在の命令を実行します。各 SM は、割り当てられたスレッド ブロックを 32 スレッド ワープに分割し、使用可能なハードウェア リソースでの実行をスケジュールします。
SIMT アーキテクチャは、SIMD (Single Instruction, Multiple Data) アーキテクチャに似ています。SIMD と SIMT はどちらも、同じ命令を複数の実行ユニットにブロードキャストすることで並列処理を実装します。主な違いは、SIMD ではベクトル内のすべてのベクトル要素がユニファイド同期グループで一緒に実行される必要があるのに対し、SIMT では同じワープ内の複数のスレッドが独立して実行できることです。ワープ内のすべてのスレッドが同じプログラム アドレスで同時に開始されたとしても、個々のスレッドが異なる動作をする可能性があります。SIMT を使用すると、独立したスカラー スレッド用のスレッド レベルの並列コードと、調整されたスレッド用のデータ並列コードを記述できます。SIMT モデルには、SIMD にはない 3 つの重要な機能が含まれています。
➤ 各スレッドには独自の命令アドレス カウンタがあります。
➤ 各スレッドには独自のレジスタ状態があります。
➤ 各スレッドは独立した実行パスを持つことができます。
最初のパラグラフでは " All threads in a warp execute the same instruction at the same time.
" が言及されていますが、2 番目のパラグラフでは " Even though all threads in a warp start together at the same program address, it is possible for individual threads to have different behavior.
" と述べられています。それは私を混乱させ、上記のステートメントは矛盾しているように見えます。誰でも説明できますか?