SPARC64 VIII fxは浮動小数点レジスタ数を256に拡大

また、AVXとの大きな違いはレジスタ数である。IntelのSSE2で使用できるXMMレジスタ数は64ビットアーキテクチャへの拡張時に16個に増強されたが、一般のRISCプロセッサが32個の浮動小数点レジスタを持つのに比べて数が少ない。これに対して、SPARC64 VIII fxでは、従来のSPARC64プロセッサの浮動小数点レジスタは32個であったのを、一挙に256個に拡張している。また、整数レジスタについても拡張グローバルレジスタを32個追加し、従来のウィンドウレジスタと合わせて64個に拡張している。

複雑なアプリケーションでは、実行頻度の高い最内ループの中でも32個のレジスタでは不足する場合がある。その場合は、一部のレジスタの内容を一旦キャッシュにストアしてレジスタを空けて、そのレジスタを別の用途に使用し、再度必要となった時点でキャッシュからレジスタにロードするスピル/フィル(Spill/Fill)処理が必要となり、無駄なロード、ストアが必要となるので、性能が低下してしまう。これに対して、256個のレジスタがあれば、このような溢れが発生するケースは大幅に減少する。

また、Top500のランキングに使われるLINPACKの性能を決めるのは行列積の計算性能であるが、

のように計算すると、AとBの掛け算とその結果をCに足しこむ2演算を実行するためには、AとBは毎回キャッシュから読んでくる必要がある。A、Bはそれぞれ8バイト(64ビット)であるので、2演算に対して16バイト、つまり、1演算あたり8バイトをキャッシュから読むことになる。

一方、大きなAとBの行列を8x8の部分行列に分解し、一組の部分行列をレジスタに格納し、その積であるCの8x8の部分行列を計算するという方法を採ると、それぞれ8x8のA、B、Cの部分行列をキャッシュから読み込み、レジスタだけを使って8x8の行列積を計算し、結果をキャッシュに書き戻すという処理を繰り返して大きな行列AとBの積を計算することができる。この方法では、レジスタとキャッシュの間で8x8の行列を4回転送する必要があるので、総転送量は2KBである。しかし、このデータで1024回の演算が実行できるので、1演算あたりのキャッシュとのデータ転送は2バイトと前述の方法の1/4で済むことになり、転送のオーバヘッドが減って性能を改善することができる。このように巨大レジスタはHPC性能の向上に非常に有効である。