単一命令複数スレッド( SIMT ) は、単一命令複数データ (SIMD) とマルチスレッドを組み合わせた並列コンピューティングで使用される実行モデルです。すべての「スレッド」のすべての命令がロックステップで実行されるという点でSPMDとは異なります。SIMT 実行モデルはいくつかのGPUに実装されており、グラフィックス プロセッシング ユニット (GPGPU) での汎用コンピューティングに関連しています。たとえば、一部のスーパーコンピューターでは CPU と GPU が組み合わされています。
プロセッサ(たとえばp個)は、 p個よりはるかに多くのタスクを実行するようです。これは、各プロセッサが複数の「スレッド」(または「作業項目」または「SIMDレーン操作のシーケンス」)を持ち、ロックステップで実行することで実現され、SIMDレーンに類似しています。[1]
SIMT を理解する最も簡単な方法は、各コアが独自のレジスタ ファイル、独自のALU (SIMD とスカラーの両方)、独自のデータ キャッシュを持つマルチコア システムを想像することです。ただし、複数の独立した命令キャッシュとデコーダー、および複数の独立したプログラム カウンター レジスタを持つ標準のマルチコア システムとは異なり、命令は、単一の命令キャッシュと、単一のプログラム カウンターを使用して命令を読み取る単一の命令デコーダーを持つ単一のユニットから、すべての SIMT コアに同期的にブロードキャストされます。
SIMT レーンとSIMD レーンの主な違いは、SIMT コアはそれぞれ完全に異なるスタック ポインターを持つことができる (したがって、完全に異なるデータ セットに対して計算を実行する) のに対し、SIMD レーンはメモリ自体について何も知らない ALU の一部にすぎないことです。
歴史
SIMTは、NvidiaによってG80チップを搭載したTesla GPUマイクロアーキテクチャに導入されました。[2] [3] ATI Technologies(現在のAMD)は、2007年5月14日に競合製品であるTeraScale 1ベースの「R600」 GPUチップをリリースしました。
説明
広く普及しているすべてのRAMタイプ (例: DDR SDRAM、GDDR SDRAM、XDR DRAMなど)のアクセス時間はまだ比較的長いため、エンジニアは各メモリ アクセスで必然的に発生するレイテンシを隠すというアイデアを思いつきました。厳密に言えば、レイテンシを隠すことは、最新の GPU によって実装されているゼロ オーバーヘッド スケジューリングの機能です。これは、「SIMT」自体の特性であると見なされる場合とそうでない場合があります。
SIMTは、命令フェッチのオーバーヘッド[4]、つまりメモリアクセスに伴うレイテンシを制限することを目的としており、最新のGPU( NvidiaやAMDなど)では、「レイテンシ隠蔽」と組み合わせて使用され、メモリアクセス操作でかなりのレイテンシがあっても高性能な実行を可能にしています。これは、プロセッサが計算タスクでオーバーサブスクライブされ、そうでなければメモリを待たなければならない場合にタスク間をすばやく切り替えることができる場合です。この戦略は、CPUのマルチスレッドに相当します(マルチコアと混同しないでください)。[5] SIMDと同様に、もう1つの大きな利点は、制御ロジックを多くのデータレーンで共有することで、計算密度が向上することです。制御ロジックをN回複製するのではなく、1つの制御ロジックブロックでNデータレーンを管理できます。
SIMT 実行の欠点は、スレッド固有の制御フローが「マスキング」を使用して実行されるため、プロセッサのスレッドが異なる制御フロー パスに従う場合に使用率が低下することです。たとえば、プロセッサのさまざまなスレッドが異なるパスを実行するIF - ELSEブロックを処理するには、すべてのスレッドが実際に両方のパスを処理する必要があります (プロセッサのすべてのスレッドは常にロック ステップで実行されるため)。ただし、マスキングは、さまざまなスレッドを適切に無効または有効にするために使用されます。プロセッサのスレッドの制御フローが一貫している場合、つまり、すべてのスレッドが同じ実行パスに従う場合は、マスキングは回避されます。マスキング戦略は、SIMT を通常の SIMD と区別するものであり、プロセッサのスレッド間の同期を安価に行えるという利点があります。[6]
参照
- グラフィックス プロセッシング ユニット(GPGPU)上の汎用コンピューティング
参考文献
- ^ Michael McCool、James Reinders、Arch Robison (2013)。構造化並列プログラミング: 効率的な計算のためのパターン。Elsevier。p. 52。
- ^ 「Nvidia Fermi コンピューティング アーキテクチャ ホワイトペーパー」(PDF) . www.nvidia.com/ . NVIDIA Corporation. 2009 . 2014 年 7 月 17 日閲覧。
- ^ Lindholm, Erik; Nickolls, John; Oberman, Stuart; Montrym, John (2008). 「NVIDIA Tesla: 統合グラフィックスおよびコンピューティング アーキテクチャ」. IEEE Micro . 28 (2): 6 (購読が必要です。) . doi :10.1109/MM.2008.31. S2CID 2793450.
- ^ Rul, Sean; Vandierendonck, Hans; D'Haene, Joris; De Bosschere, Koen (2010). OpenCL カーネルのパフォーマンス移植性に関する実験的研究。Symp. Application Accelerators in High Performance Computing (SAAHPC). hdl : 1854/LU-1016024。
- ^ 「CUDA の高度なトピック」(PDF) . cc.gatech.edu . 2011 . 2014 年 8 月 28 日閲覧。
- ^ Michael McCool、James Reinders、Arch Robison (2013)。構造化並列プログラミング: 効率的な計算のためのパターン。Elsevier。209 ページ以降。
- ^ John L. Hennessy、David A. Patterson (1990)。コンピュータアーキテクチャ:定量的アプローチ(第6版)。Morgan Kaufmann。pp. 314 ff. ISBN 9781558600690。
