Single Instruction, Multiple Threads

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

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

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

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

 歴史 
SIMTはNVIDIAのG80チップに採用されたTeslaマイクロアーキテクチャにおいて導入されたコンピュータアーキテクチャの話(314) Teslaアーキテクチャが採用した「SIMT方式」 | TECH+（テックプラス）。2006年11月8日にG80を搭載したGeForce 8800シリーズおよびCUDAが発表されたNVIDIA Unveils CUDA™-The GPU Computing Revolution Begins | Press Release | NVIDIA, Internet Archive。ATI Technologies（現在のAMD）は競合製品として、やや遅れて2007年5月14日にTeraScale 1ベースの「R600」GPUチップをリリースした。

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

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

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

+ SIMT 用語 NVIDIA CUDA  OpenCL  Hennessy & Patterson スレッド  ワークアイテム  SIMDレーン操作のシーケンス Warp  サブグループ  SIMD命令のスレッド ブロック  ワークグループ  ベクトル化ループの本体 グリッド  NDRange  ベクトル化ループ

NVIDIA GPUは32個のハードウェアスレッドを同期して並列実行する「Warp」と呼ばれるスレッドグループの概念を持っている【後藤弘茂のWeekly海外ニュース】基本アーキテクチャの柔軟さが産んだGeForce GTX 460 - PC Watch。AMD GPUでこれに相当するものは「Wavefront」と呼ばれており、64個のハードウェアスレッドからなる。OpenCLでは「サブグループ」と呼ばれ、CUDAのWarpシャッフル命令（スレッドグループ内での高速な並列データ交換を可能にする命令Faster Parallel Reductions on Kepler | NVIDIA Technical Blog）に相当する機能サポートは拡張cl_khr_subgroupsとして標準化されている。

 脚注 
 出典 

 関連項目 
 ハードウェアマルチスレッディング
 GPGPU

Category:スレッド (コンピュータ)
Category:SIMDコンピューティング
Category:GPU
Category:並列コンピューティング