6

CUDAがどのように機能するかについて少し混乱していますが、スレッドはそれぞれ同じ命令(SIMT)を実行しますが、異なるインデックスでアクセスされる単一のデータを使用しますか?それとも「異なるデータ」と見なされますか(つまり、SIMDでもあります)?

SMXはGPUチップ全体ですか?SMXは、それぞれが一度に1つのスレッドを実行する複数のSPで構成されている必要がありますが、スレッドのブロックは1つのSPにのみ割り当てられていますか?

私は今少し混乱しています

4

1 に答える 1

13

グリッド起動は、スレッドブロックの1〜3次元の起動です。スレッドブロックは、1〜3次元のスレッドのグループです。CUDAワークディストリビューターはスレッドブロックをSMXユニットに配布します。ローエンドデバイスには、1つのSMXユニットが含まれる場合があります。ハイエンドデバイスには、10を超えるSMXユニットが含まれる場合があります。

SMXユニットは、ワープと呼ばれる32スレッドのグループにスレッドブロックを分割します。SMXユニットには、一度に最大64のワープまたは16のブロックを割り当てることができます。リソースの制限(ブロック、ワープ、スレッドごとのレジスタ、ブロックごとの共有メモリ、またはバリア)により、数が少なくなる場合があります。

各SMXユニットには4つのワープスケジューラがあり、それぞれがワープのサブセットを担当します。各サイクルで、ワープスケジューラは適格なワープを選択し、1つまたは2つの命令を発行します。二重発行するには、2つの命令が独立しており、異なる実行ユニットを使用する必要があります。たとえば、1つの命令を浮動小数点ユニットにディスパッチし、2番目の命令をロードストアユニットにディスパッチできます。

ワープスケジューラの二重発行に加えて、ワープに対して独立した命令を連続して発行できます。依存関係が検出された場合、次の命令の実行ユニットがビジー状態の場合、またはワープに命令がない場合(フェッチを待機中)、ワープスケジューラは、適格な場合は別のワープを選択します。

各スレッドには、独自の汎用レジスタ、条件コード、述語コード、およびローカルメモリのセットがあります。各スレッドはスレッドブロックのメンバーです。すべてのスレッドは、共有メモリとバリアを含むスレッドブロックリソースにアクセスできます。グリッド起動のすべてのスレッドは、定数メモリ、テクスチャバインディング、およびサーフェスバインディングを含むグリッドリソースにアクセスできます。すべてのスレッドがグローバルメモリにアクセスできます。

于 2012-09-08T15:07:03.350 に答える