[ 目次 ]  [ 1ページ目 ]  [ 前ページ ]  [ 次ページ ]  [ Q&A ]
科学技術計算分科会「次世代HPCを支える基盤技術」

SPARC64 V/VIの高性能、高信頼技術

(4/9)
3.SPARC64 のマイクロアーキテクチャ

SPARC64 V [8] [10]は、アウト・オブ・オーダ実行機構を備えたスーパースカラ・プロセッサである。SPARC64 VI/VII [9] [11] [12] は、SPARC64 V からの性能向上を目的に、マルチコア化、Jupiterバスの採用、マルチスレッド化と演算機能の強化を行った。CPUコアのマイクロアーキテクチャは基本的に同じで、コア数が SPARC64 V は 1コア、SPARC64 VI は 2コア、SPARC64 VII は 4コアである。マルチコア化については後述する事として、ここでは SPARC64 Vのマイクロアーキテクチャを概説し、また SPARC64 VI/VII における Jupiterバスとコアのエンハンスについて述べる。

3.1. SPARC64 Vのマイクロアーキテクチャ

キャッシュは、命令とオペランドに対する個々の 1次キャッシュと、命令とオペランドで共有の 2次キャッシュの 2階層構造である。(2コアを備える SPARC64 VI,4コアを備える SPARC64 VIIでは、いずれもコア間で 2次キャッシュを共有している。)
命令フェッチは、命令バッファを介して実行部とデカップリングされている。ブランチヒストリを備え、命令実行とは非同期的に命令を先取りして命令バッファに充填する。この制御を、以降、先行制御と呼ぶ。命令のフェッチ幅は 32バイトであり、8命令を同時にフェッチできる。
サイクルあたり最大 4命令を、デコード&イシューする。分散型のリザベーションステーションは、アドレス生成用(2つ)、固定小数点演算用(2つ)、浮動小数点(2つ)、および分岐処理用(1つ)の合計 7つ有り、各リザベーションステーションから、サイクルごとに最大 1命令をディスパッチできる。個々のリザベーションステーションで、実行準備の出来たものからアウト・オブ・オーダでディスパッチする実行機構を備える。真のデータ依存の待ち合わせは投機的に処理する。すなわち、投機的にディスパッチし、演算開始のタイミングでデータが利用できなければ、ディスパッチを無効化する。レジスタのリネーミングはレジスタ・アップデート・バッファ方式で、命令デコード時に割り当て、コミットで開放する。
オペランドのロードとストアは、フェッチポートとストアポートで管理する。キャッシュミスの場合にはフェッチポートからリサイクルし、ストアはストアポートに対応するストアバッファにデータを格納して、それ以降は突き放し処理を行う。
オペランド用の 1次キャッシュは 8バンクに分割されており、干渉がなければ 2オペランド同時に読出せる。従ってサイクルあたり最大で 16バイト(8バイト×2)のスループット持つ。
ウィンドウレジスタのアクセスを高速化するために、Joint Window Register(JWR)と称する機構をもつ。全部で 8ウィンドウある内の、現ウィンドウを含む前後 3ウィンドウ分のコピーを JWRに置き、演算実行時にはここからデータを読み出す。

3.2.Jupiterバス

Jupiterバスは、システムスループットの大幅な改善を狙い開発した。PRIMEPOWER(*)は、2CPUから 128CPUまでを 250/450/650/850/900/1500/2500の 7つの性能レンジの機種でカバーする。その開発当初は SPARC64GP[13] を搭載して、良好なリニアリティを実現していた。その後、SPARC64GP を SPARC64 V に置き換え、CPU性能を大幅に向上させてシステムのポテンシャルを引き出し、大きな性能向上を図ってきた。しかし、アプリケーションによっては、少数の CPUでシステムスループットを使い切ってしまうことがあり、これはCPUの数を増やしたときの性能伸び悩みに繋がる。
スループット改善のほかに、キャッシュコヒーレンシ制御にも工夫を行い、キャッシュの状態遷移に伴うトランザクション発生を減らした。さらに RASの観点から、アドレスとデータの何れも ECCによってエラー修復可能とした。

(*)SPARC64プロセサが組み込まれるシステム

3.3. コアのエンハンス:マルチスレッド化と演算機能強化

SPARC64 VI は Vertical Multi-Treading(VMT)をサポートし、これに対応してウィンドウレジスタを 8ウィンドウ× 2セットに倍増した。またデータパスの実装に着目して、SPARC64 V の JWRにかえて、Current window Replace Buffer(CRB)と Current Window Register(CWR)から演算器への読出しを行う方式とした。
そして、SPARC64 VII ではマルチスレッドを 2つのスレッドを混在して実行する Simultaneous Multi-Threading(SMT)方式にエンハンスし、これに対応して CRBと CWRもそれぞれ 2セットを装備した。さらにレジスタリネーミング用のGeneral register Update Buffer(GUB)を 32本から 48本に強化した。
SPARC64 VIで、FMAの演算のレイテンシを短縮して、Linpackなどの FMAを高密度で実行するアプリケーションで、FMAを稠密に実行できるようにした。これにあわせてレジスタの書き込みポートを 4つに増強し、レイテンシ短縮にバランスさせた他、レジスタリネーミング用の Floating point register Update Buffer(FUB)を 48本に強化した。
SPARC64VI/VIIは,マルチスレッドのサポートのために Floating Point Register(FPR)本体も 2セットに強化した。

[ 目次 ]  [ 1ページ目 ]  [ 前ページ ]  [ 次ページ ]  [ Q&A ]

All Rights Reserved, Copyright©サイエンティフィック・システム研究会 2006