SunのNiagaraプロセサ

Sun Microsystems(現在はOracleの一部となっている)は、2004年にNiagara(正式名称はUltraSPARC T1)と呼ぶプロセサをHot Chips 16で発表した。Niagaraは、4スレッドをサイクルごとに切り替えて実行するマルチスレッドプロセサコアを、1チップに8個搭載し、チップ全体では32スレッドを並列に実行できるプロセサであった。

現在ではこの程度の並列度は珍しくないが、Hot Chips 16で一緒に発表されたPentium 4は1コア1スレッドであり、当時のプロセサチップは4スレッドも実行すれば多い方という状況であったので、32スレッドの並列実行というNiagaraのマイクロアーキテクチャは斬新なものであった。

図1.6に示すように、Niagaraのプロセサコアは、4つのスレッドそれぞれに対応するPCロジックを持ち、そのうちの1つを選択して命令をIキャッシュから読み出し、対応する命令バッファに命令を格納する。そしてスレッド選択マルチプレクサで、実行するスレッドに対応する命令バッファから命令を読み、実行パイプラインに送る。

実行パイプラインはレジスタファイルとストアバッファはスレッドごとに存在するが、演算器などのその他のリソースはすべてのスレッドで共有している。

命令の取り出しは、スレッド0~3をサイクルごとに順次選択するというのが基本であるが、Iキャッシュミスで命令バッファに命令がないスレッドや、データ待ちで進めないスレッドなどは飛ばしてスケジュールしていく。

サイクルごとに異なるスレッドの命令が実行されるSMTとも言えるが、HEPに近い思想のプロセサである。ただし、HEPは最大50スレッドを順次実行することによりメモリアクセスレーテンシを隠すことができたが、Niagaraは4スレッドしかないので、1次データキャッシュのヒットのケースや数サイクルかかる演算命令のレーテンシを隠す程度で、1次キャッシュミスなどは隠せない。しかし、1つのキャッシュミスで止まるのは1つのスレッドだけで、残りの3スレッドは実行を続けられるため、スループットの低下は小さい。

図1.6 2004年のHot Chips 16で発表されたNiagaraコアのブロック図

Niagaraは、小規模なマルチスレッドコアを使い、単一のスレッドの実行性能は低かったが、32スレッド合計のスループット(単位時間に実行できる命令の総数)は他のプロセサより高いという特徴をもっていた。このスループット重視の考え方は、現在に至るSPARC Tシリーズのプロセサに受け継がれている。