Single Instruction, Multiple Threads
原文と比べた結果、この記事には多数の(または内容の大部分に影響ある)誤訳があることが判明しています。情報の利用には注意してください。(2025年2月) |
単一命令・複数スレッド(英: single instruction, multiple threads、SIMT)は、並列計算で用いられる実行モデルであり、単一命令・複数データ(SIMD)とマルチスレッドを組み合わせたものである。すべての「スレッド」においてすべての命令がロックステップ方式によって同期して実行される点で、単一プログラム・複数データ(SPMD)とは異なる。SIMT実行モデルは、多くのGPUに実装されており、GPU上での汎用計算(GPGPU)において特に重要である。例えば、いくつかのスーパーコンピュータではCPUとGPUを組み合わせて使用している。
プロセッサの数をpとすると、実際にはp以上の多くのタスクを実行しているように見える。これは各プロセッサが複数の「スレッド」(「ワークアイテム」や「SIMDレーン操作のシーケンス」)を持つことによって達成されているが、このスレッド群は同期してタスクを実行し、SIMDレーンに類似している[1]。
SIMTを最も簡単に理解する方法は、各コアが個別のレジスタファイル、個別のALU(SIMDおよびスカラー両方)、および個別のデータキャッシュを持つような、マルチコアシステムを想像することである。ただし、標準的なマルチコアシステムが複数の独立した命令キャッシュとデコーダ、そして複数の独立したプログラムカウンタレジスタを持つのと違って、単一の命令キャッシュと単一の命令デコーダを持ち、単一のプログラムカウンタを用いて命令を読み取る単一の演算装置から、命令が全SIMTコアに対して同期的にブロードキャストされる。
SIMTとSIMDレーンの主要な違いは、各SIMTコアが完全に異なるスタックポインタを持ち得る(それによって全く異なるデータセット上で計算を行うことができる)点であり、一方SIMDレーンは単にメモリに関する知識を持たないALUの一部である。
歴史
編集SIMTはNVIDIAのG80チップに採用されたTeslaマイクロアーキテクチャにおいて導入された[2][3][4]。2006年11月8日にG80を搭載したGeForce 8800シリーズおよびCUDAが発表された[5][6][7][8]。ATI Technologies(現在のAMD)は競合製品として、やや遅れて2007年5月14日にTeraScale 1ベースの「R600」GPUチップをリリースした。
解説
編集すべての一般的なRAM(例えば、DDR SDRAM、GDDR SDRAM、XDR DRAMなど)のアクセス時間が依然として比較的高いため、技術者たちはメモリアクセスのたびに不可避的に発生するレイテンシを隠すというアイデアを考案した。厳密に言えば、レイテンシ隠蔽は現代のGPUによって実装された無オーバーヘッドスケジューリングの機能である。これはSIMT自体の特性とみなすことができるかもしれないし、そうでないかもしれない。
SIMTは命令フェッチのオーバーヘッド、すなわちメモリアクセスに伴うレイテンシを制限することを目的としており[9]、現代のGPU(NvidiaやAMDのものなど)では、レイテンシ隠蔽と組み合わせることで、メモリアクセス操作におけるかなりのレイテンシがあるにもかかわらず高性能な実行を可能にしている。この戦略はプロセッサが計算タスクで過負荷になっているとき、メモリを待たなければならない状況で素早くタスクを切り替えることができる。この戦略はCPUの同時マルチスレッディング(マルチコアと混同しないように)に類似している[10]。SIMDと同様に、もう一つの大きな利点は、多くのデータレーンによる制御ロジックの共有であり、これにより計算密度が増加する。一つの制御ロジックブロックがN個のデータレーンを管理できるため、制御ロジックをN回複製する必要がない。
SIMT実行の欠点は、スレッド固有の制御フローが「マスキング」を用いて行われることであり、プロセッサのスレッドが異なる制御フローパスをたどるときに効率が悪くなることである。例えば、プロセッサの様々なスレッドが異なるパスを実行するIF-ELSEブロックを処理するためには、実際にはすべてのスレッドが両方のパスを処理しなければならない(プロセッサのすべてのスレッドは常に同期して実行されるため)、しかし適切にマスキングを用いて様々なスレッドを無効化および有効化する。制御フローがプロセッサのスレッドにとって一貫している場合、すなわちすべてが同じ実行パスをたどる場合、マスキングは避けられる。このマスキング戦略がSIMTを普通のSIMDと区別するものであり、プロセッサ内のスレッド間で安価な同期化を実現する利点がある。[11]
NVIDIA CUDA | OpenCL | Hennessy & Patterson[12] |
---|---|---|
スレッド | ワークアイテム | SIMDレーン操作のシーケンス |
Warp | サブグループ | SIMD命令のスレッド |
ブロック | ワークグループ | ベクトル化ループの本体 |
グリッド | NDRange | ベクトル化ループ |
NVIDIA GPUは32個のハードウェアスレッドを同期して並列実行する「Warp」と呼ばれるスレッドグループの概念を持っている[13]。AMD GPUでこれに相当するものは「Wavefront」と呼ばれており、64個のハードウェアスレッドからなる。OpenCLでは「サブグループ」と呼ばれ、CUDAのWarpシャッフル命令に相当する機能サポートは拡張cl_khr_subgroupsとして標準化されている。
脚注
編集出典
編集- ^ Michael McCool; James Reinders; Arch Robison (2013). Structured Parallel Programming: Patterns for Efficient Computation. Elsevier. p. 52
- ^ “NVIDIA Fermi Compute Architecture Whitepaper”. www.nvidia.com. NVIDIA Corporation (2009年). 2014年7月17日閲覧。
- ^ Lindholm, Erik; Nickolls, John; Oberman, Stuart; Montrym, John (2008). “NVIDIA Tesla: A Unified Graphics and Computing Architecture”. IEEE Micro 28 (2): 6 ( 要購読契約). doi:10.1109/MM.2008.31.
- ^ コンピュータアーキテクチャの話(314) Teslaアーキテクチャが採用した「SIMT方式」 | TECH+(テックプラス)
- ^ NVIDIA Unveils CUDA™-The GPU Computing Revolution Begins | Press Release | NVIDIA, Internet Archive
- ^ “これがGPUのターニングポイント NVIDIAの次世代GPU「GeForce 8800」 - 後藤弘茂のWeekly海外ニュース”. pc.watch.impress.co.jp. 2025年1月25日閲覧。
- ^ “G80とG7xの最大の違いはマルチスレッディング - 後藤弘茂のWeekly海外ニュース”. pc.watch.impress.co.jp. 2025年1月25日閲覧。
- ^ “シェーダプログラムの進化と連動するGPUのマルチスレッディング化 - 後藤弘茂のWeekly海外ニュース”. pc.watch.impress.co.jp. 2025年1月25日閲覧。
- ^ 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。
- ^ “Advanced Topics in CUDA”. cc.gatech.edu (2011年). 2014年8月28日閲覧。
- ^ Michael McCool; James Reinders; Arch Robison (2013). Structured Parallel Programming: Patterns for Efficient Computation. Elsevier. pp. 209 ff
- ^ John L. Hennessy; David A. Patterson (1990). Computer Architecture: A Quantitative Approach (6 ed.). Morgan Kaufmann. pp. 314 ff. ISBN 9781558600690
- ^ 【後藤弘茂のWeekly海外ニュース】基本アーキテクチャの柔軟さが産んだGeForce GTX 460 - PC Watch