コンテンツにスキップ

SIMT

出典: フリー百科事典『ウィキペディア(Wikipedia)』

単一命令・複数スレッド: single instruction, multiple threadsSIMT)は、並列計算で用いられる実行モデルであり、単一命令・複数データ(SIMD)とマルチスレッディングを組み合わせたものである。すべての「スレッド」においてすべての命令が同期して実行される点で、単一プログラム・複数データ(SPMD)とは異なる。SIMT実行モデルは、多くのGPUに実装されており、GPU上での汎用計算(GPGPU)において特に重要であり、例えば、いくつかのスーパーコンピュータではCPUとGPUを組み合わせて使用している。

プロセッサの数をpとすると、実際にはp以上の多くのタスクを実行しているように見える。これは各プロセッサが複数の「スレッド」(「ワークアイテム」や「SIMDレーン操作のシーケンス」)を持ち、それらが同期して実行され、SIMDレーンに類似していることによって達成されている。[1]

SIMTを最も簡単に理解する方法は、マルチコアシステムを想像することである。各コアがそれぞれのレジスタファイル、独自のALU(SIMDおよびスカラー両方)、および独自のデータキャッシュを持つ。しかし、標準的なマルチコアシステムが複数の独立した命令キャッシュとデコーダ、そして複数の独立したプログラムカウンタレジスタを持つのに対し、SIMTコアには単一の命令キャッシュと単一の命令デコーダから単一のプログラムカウンタを用いて命令が同期的にすべてのSIMTコアにブロードキャストされる。

SIMTとSIMDレーンの主要な違いは、各SIMTコアが完全に異なるスタックポインタを持ち得る(それによって全く異なるデータセット上で計算を行うことができる)点であり、SIMDレーンは単にメモリに関する知識を持たないALUの一部である。

歴史

[編集]

2006年11月8日[2]NvidiaはTeslaマイクロアーキテクチャにおいてGeForce 8 シリーズ(G8x)とCUDAと共にSIMTを導入した。ATI Technologies(現在のAMD)はこれに対抗して、2007年5月14日にTeraScale 1ベースの「R600」GPUチップをリリースした。[3][4][5][6][7]

解説

[編集]

すべての一般的なRAM(例えば、DDR SDRAM、GDDR SDRAM、XDR DRAMなど)のアクセス時間が依然として比較的高いため、技術者たちはメモリアクセスのたびに不可避的に発生するレイテンシを隠すというアイデアを考案した。厳密に言えば、レイテンシ隠蔽は現代のGPUによって実装された無オーバーヘッドスケジューリングの機能である。これはSIMT自体の特性とみなすことができるかもしれないし、そうでないかもしれない。

SIMTは命令フェッチのオーバーヘッド、すなわちメモリアクセスに伴うレイテンシを制限することを目的としており[8]、現代のGPU(NvidiaやAMDのものなど)では、レイテンシ隠蔽と組み合わせることで、メモリアクセス操作におけるかなりのレイテンシがあるにもかかわらず高性能な実行を可能にしている。この戦略はプロセッサが計算タスクで過負荷になっているとき、メモリを待たなければならない状況で素早くタスクを切り替えることができる。この戦略はCPUの同時マルチスレッディングマルチコアと混同しないように)に類似している[9]。SIMDと同様に、もう一つの大きな利点は、多くのデータレーンによる制御ロジックの共有であり、これにより計算密度が増加する。一つの制御ロジックブロックがN個のデータレーンを管理できるため、制御ロジックをN回複製する必要がない。

SIMT実行の欠点は、スレッド固有の制御フローが「マスキング」を用いて行われることであり、プロセッサのスレッドが異なる制御フローパスをたどるときに効率が悪くなることである。例えば、プロセッサの様々なスレッドが異なるパスを実行するIF-ELSEブロックを処理するためには、実際にはすべてのスレッドが両方のパスを処理しなければならない(プロセッサのすべてのスレッドは常に同期して実行されるため)、しかし適切にマスキングを用いて様々なスレッドを無効化および有効化する。制御フローがプロセッサのスレッドにとって一貫している場合、すなわちすべてが同じ実行パスをたどる場合、マスキングは避けられる。このマスキング戦略がSIMTを普通のSIMDと区別するものであり、プロセッサ内のスレッド間で安価な同期化を実現する利点がある。[10]

SIMT 用語
Nvidia CUDA OpenCL Hennessy & Patterson[11]
スレッド ワークアイテム SIMDレーン操作のシーケンス
ワープ ウェーブフロント SIMD命令のスレッド
ブロック ワークグループ ベクトル化ループの本体
グリッド NDRange ベクトル化ループ

関連項目

[編集]

参照

[編集]
  1. ^ Michael McCool; James Reinders; Arch Robison (2013). Structured Parallel Programming: Patterns for Efficient Computation. Elsevier. p. 52 
  2. ^ NVIDIA Unveils CUDA™-The GPU Computing Revolution Begins | Press Release | NVIDIA
  3. ^ Nvidia Fermi Compute Architecture Whitepaper”. www.nvidia.com/. NVIDIA Corporation (2009年). 2014年7月17日閲覧。
  4. ^ Lindholm, Erik; Nickolls, John; Oberman, Stuart; Montrym, John (2008). “NVIDIA Tesla: A Unified Graphics and Computing Architecture”. IEEE Micro 28 (2): 6 (Paid subscription required要購読契約). doi:10.1109/MM.2008.31. 
  5. ^ これがGPUのターニングポイント NVIDIAの次世代GPU「GeForce 8800」 - 後藤弘茂のWeekly海外ニュース”. pc.watch.impress.co.jp. 25 January 2025閲覧。
  6. ^ G80とG7xの最大の違いはマルチスレッディング - 後藤弘茂のWeekly海外ニュース”. pc.watch.impress.co.jp. 25 January 2025閲覧。
  7. ^ シェーダプログラムの進化と連動するGPUのマルチスレッディング化 - 後藤弘茂のWeekly海外ニュース”. pc.watch.impress.co.jp. 25 January 2025閲覧。
  8. ^ Rul, Sean; Vandierendonck, Hans; D’Haene, Joris; De Bosschere, Koen (2010). An experimental study on performance portability of OpenCL kernels. Symp. Application Accelerators in High Performance Computing (SAAHPC). hdl:1854/LU-1016024
  9. ^ Advanced Topics in CUDA”. cc.gatech.edu (2011年). 2014年8月28日閲覧。
  10. ^ Michael McCool; James Reinders; Arch Robison (2013). Structured Parallel Programming: Patterns for Efficient Computation. Elsevier. pp. 209 ff 
  11. ^ John L. Hennessy; David A. Patterson (1990). Computer Architecture: A Quantitative Approach (6 ed.). Morgan Kaufmann. pp. 314 ff. ISBN 9781558600690. https://archive.org/details/computerarchitec00patt_045