2016-12-07 4 views
1

私は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.」を言及しています。それは私を混乱させ、上記の陳述は矛盾しているようです。誰でもそれを説明できますか?

答えて

5

矛盾はありません。ワープ内のすべてのスレッドは、常にロック・ステップで同じ命令を実行します。条件付きの実行をサポートし、分岐CUDAは

  1. プレディケート実行
  2. 命令リプレイ/シリアライゼーション(here参照)SIMTモデルにおいて二つの概念を紹介するために

プレディケート実行が結果ことを意味 (hereを参照)。条件付き命令を使用して、スレッドがブランチなしで次の命令を実行するのをマスクすることができる。命令の再生は、古典的な条件分岐がどのように処理されるかです。すべてのスレッドは、命令を再生することによって条件付き実行コードのすべての分岐を実行する。特定の実行パスに従わないスレッドはマスクされ、NOPに相当するものを実行します。これは、パフォーマンスに重大な影響を与えるため、CUDAにおけるいわゆるブランチ分岐のペナルティです。

これは、ロックステップの実行が分岐をサポートする方法です。

+0

これらの2つのケースでマスクされているスレッドに大きな違いがあるかどうかは分かりますか?プログラミングガイドには、「誤った述語を持つ命令は結果を書き込まず、アドレスやオペランドを評価しない」と述べています。これはNOPとはまったく違いますか?また、2番目のケースでは、どのような指示がどの段階で再生されるのかよく分かりません。ありがとう。 –

関連する問題