SPARC

**SPARC**（スパーク、**''S**calable **P**rocessor **Arc**hitecture*）は、[[サン・マイクロシステムズ]]（現:[[オラクル (企業)|オラクル]]）が開発・製造した[[RISC]]ベースの[[マイクロプロセッサ]]であり、その[[命令セット|命令セットアーキテクチャ]]の名称である。

現在は*'SPARCインターナショナル**の登録商標であり、複数のメーカーがこのアーキテクチャに基づいたプロセッサを製造している。
オープンソース版がある。

== 歴史の概要 ==
SPARCはサン・マイクロシステムズ(当時)により、[[1985年]]に最初に開発された。

SPARCは[[RISC]]ベースで、特に浮動小数点演算とバイナリレベルの互換性に注意が払われている。サン・マイクロシステムズは当初、自社の[[ワークステーション]]に、[[モトローラ]]の[[MC68000|68000]]シリーズの[[CPU|MPU]]を利用していたが、後に[[カリフォルニア大学バークレー校]]のをモデルに自社開発に着手。Sun4のSPARC搭載モデルを発表した。

SPARCは、[[ビッグエンディアン|完全ビッグエンディアン]]の[[RISC]][[命令セットアーキテクチャ|アーキテクチャ]]で、**SPARCインターナショナル** (''SPARC International, Inc.'') の登録商標である。SPARCインターナショナルは、SPARCアーキテクチャの普及と規格検定テストの実施を目的として[[1989年]]に設立された組織であり、SPARCアーキテクチャをオープンにすることで寿命を延ばすことを目的としている。[[テキサス・インスツルメンツ]]、[[サイプレス・セミコンダクタ]]、[[富士通]]、オラクルなどの製造業者がSPARCのライセンス供与を受けている。結果として、SPARCアーキテクチャは完全にオープンとなっており、[[GNU General Public License|GPL]]の下に[[オープンソース]]として実装されたも存在する。

SPARCアーキテクチャの最初の実装はサンのワークステーションで使われた。その後[[富士通]]などでも使われ始め、やがてさらに大きな[[対称型マルチプロセッシング|SMP]]システムや[[スーパーコンピュータ]]や制御用としても使われるようになった。SPARCマシンは一般に[[Solaris]][[オペレーティングシステム]]（サンがSPARC用に設計したオペレーティングシステム）と結びつけて考えられているが、[[NEXTSTEP]]、[[Linux]]、[[FreeBSD]]、[[OpenBSD]]、[[NetBSD]]などのオペレーティングシステムも使用できる。

アーキテクチャは何回か改訂されていて、最も新しいものがバージョン8と9である。1999年10月、富士通とサンはバージョン9をベースに[[ハイエンド]]SPARCプロセッサの共通仕様（コモン プログラマ リファレンスモデル）を共同開発することを発表した。この共通仕様は、SPARC Joint Programming Specification (JPS1) - Commonalityとして公開されている。また2005年12月、サンは[[UltraSPARC T1]]をオープンソース化することを発表した。

SPARCは正統な[[UNIX]]が動く信頼性の高い[[CPU]]として長らく幅広いシステムで用いられてきたが、[[2010年代]]の[[クラウドコンピューティング]]の普及と運用実績の蓄積に伴い、大多数のシステムが汎用的なハードウェアで[[x86仮想化]]を用いてソフトウェア的に定義して構築されるようになった結果、SPARCは特に性能要求の厳しい極一部のシステムにのみ用いられるようになった。

== 特徴 ==
SPARCアーキテクチャは[[カリフォルニア大学バークレー校]]のRISC I & II（）の設計に大きな影響を受けている。本来のRISC設計は必要最小限のものであり、機能や命令の種類を可能な限り切り詰め、クロックサイクル毎に命令を実行することを目指した。このため、乗除算命令が無い、[[分岐遅延スロット]]が存在するなど、[[MIPSアーキテクチャ]]と様々な面で類似している。

SPARCプロセッサは通常128本の汎用[[レジスタ (コンピュータ)|レジスタ]]を持つ。ただし、任意の時点でソフトウェアから見えるのは128本のうちの32本だけである。そのうち8本は汎用レジスタだが、''g0''レジスタは常に内容がゼロであり、実質的な汎用レジスタは7本で、常に同じ内容が見える。他の24本は[[コールスタック]]の一部をレジスタ化したものである。

これら24本のレジスタは、いわゆる[[レジスタ・ウィンドウ]]を形成し、関数呼出とリターンの際に、このウィンドウがレジスタスタック上を上下に移動する。各ウィンドウは8本のローカルレジスタを持ち、8本のレジスタを上下の隣接ウィンドウのレジスタと共有する。共有されたレジスタは関数のパラメータ渡しと結果の値を戻すために使われ、ローカルレジスタは、各関数でのローカルな値を保持するために使われる。

SPARCの名称の由来にある「Scalable」とは、組み込み用途からサーバ用途まで同じ仕様を実装し、非特権命令に関しては完全に互換を維持することを意味している。アーキテクチャ上、用途に合わせて規模を変更できる点は、実装するレジスタ・ウィンドウの個数である。仕様では3個から32個までのウィンドウ実装を許可していて、実装者は32個を実装して関数コール性能を向上させるか、3個だけ実装してコンテキスト切り替え性能を向上させるか、あるいはその中間を選択できる。このため、SPARCのアーキテクチャは[[C言語]]など[[構造化プログラミング]]言語に向けて最適化されているとも言われる。同様なレジスタ・ウィンドウを持つアーキテクチャとして、[[Intel i960]]、[[AMD 29000]]がある。

SPARCバージョン8（1987年）では、[[浮動小数点数|浮動小数点]][[レジスタファイル]]は16本の[[倍精度]]レジスタを持つ。各レジスタは2本の[[単精度]]レジスタとしても使用でき、全部で32本の単精度レジスタとなる。2本の倍精度レジスタを四倍精度レジスタとして使用することもでき、全体で8本の四倍精度レジスタとなる。SPARCバージョン9（1995年）ではさらに16本の倍精度レジスタを追加したが、これらは単精度レジスタとしては使用できない（四倍精度レジスタ8本としては使用可能）。

タグ付き加減算命令は[[最下位桁ビット|LSB]]の2ビットを無視して加減算を行う。これは、[[プログラミング言語ML|ML]]や[[LISP]]などのタグ付きの整数フォーマットを使うような言語の実装に有効と思われる。

== 仕様の履歴 ==
アーキテクチャは何回か改訂されている。ハードウェアによる乗算と除算がバージョン8で追加されている。バージョン9ではかなり大幅な改訂が加えられ、[[64ビット]]化されたSPARC仕様が完成している。

さらにSPARC Joint Programming Specification (JPS1) では、MMU等のバージョン9では未定義とされた部分の仕様が規定されている。

サン固有のアーキテクチャ仕様であるUltraSPARC Architecture 2005では、命令とレジスタが追加され、超特権 (hyperprivileged) モードも追加された。この仕様は[[UltraSPARC T1]]から始まる新たなUltraSPARCシリーズで実装される。T1はCPUコアを8個備え、全体で32[[スレッド (コンピュータ)|スレッド]]を実行できる。UltraSPARC Architecture 2005にはサンの標準拡張が含まれるが、それ以外はSPARC V9 Level 1仕様に完全準拠している。このアーキテクチャは1987年のSPARC V7からのアプリケーションのバイナリ互換性を維持している。

2005年12月にサンはUltraSPARC T1の実装をオープンソース化した（[[OpenSPARC]]参照）。

SPARCの様々な実装の中で、サンのSuperSPARCとUltraSPARC-1は非常に人気があったことから、[[SPEC CPU95]]と[[SPEC CPU2000|CPU2000]]ベンチマークの基準システムとして使われている。



=== SPARC64 ===

**SPARC64**は、[[HALコンピュータシステム]]ならびに富士通が開発したプロセッサファミリであり、SPARCシリーズのハイエンドのプロセッサとなっている。

**SPARC64 V**は富士通の[[PRIMEPOWER]]サーバシリーズで、**SPARC64 VI**および**SPARC64 VII**は同社とサンの[[SPARC Enterprise]] M3000からM9000に使用された。

富士通の[[メインフレーム]]用[[CPU|プロセッサ]]と同じ開発者が設計・開発しているため、メインフレーム用[[CPU|プロセッサ]]のRAS（信頼性、可用性、保守性）技術をすべて継承している。[[キャッシュメモリ]]、演算器、[[レジスタ (コンピュータ)|レジスタ]]等、どの回路でエラーが発生しても必ず検出できるよう、[[誤り検出訂正|ECC]]、[[パリティビット|パリティ]]で保護している。エラーが発生すると、[[誤り検出訂正|ECC]]、ハードウェア命令リトライにより訂正を行う。

万一、訂正不可能なエラーが発生しても、正常なコア、[[キャッシュメモリ]]だけで動作し続けることができる。プロセッサの動作を記録する機能も持ち、エラー発生時の原因特定に役立つ。

また、[[スーパースケーラ]]、[[アウト・オブ・オーダー実行]]、[[ノンブロッキングキャッシュ制御]]、[[ハードウェア・プリフェッチ]]等の高速化技術を採用している。

SPARC64 VIおよびSPARC64 VIIでは、[[マルチコア]]・[[ハードウェアマルチスレッディング|マルチスレッド]]対応がなされている。

[[2009年]]に発表されたSPARC64 VIIIfxはHPC向け製品である。2-Way SMTからシングルスレッドになったが、コア数は4コアから8コアに増えた。また、メモリーコントローラがプロセッサに統合され、新規に開発されたHPC向け命令拡張「HPC-ACE (High Performance Computing - Arithmetic Computational Extensions)」が実装され、レジスタ本数が増加し、[[SIMD]]命令が強化された。

**SPARC64 VIIIfx**は、[[2011年]]6月、同年11月と2期連続で[[TOP500]]リスト首位を獲得した[[スーパーコンピュータ]]の「[[京 (スーパーコンピュータ)|京]]」に採用されている。

[[2011年]]に発表された**SPARC64 IXfx**はSPARC64 VIIIfxと同じくHPC向け製品である。クロック周波数が2GHzから1.848GHzに低下したものの、コア数は8コアから16コアに倍増し、メモリ帯域も64GB/sから85GB/sと向上している。

SPARC64 IXfxは、富士通のスーパーコンピュータ[[PRIMEHPC FX10]]（[[2011年]][[11月7日]]に販売開始、[[2012年]][[1月]]より出荷）に採用されている。

**SPARC64 X**は、UNIXサーバ向けプロセッサとして初めてHPC-ACEを実装し、富士通のUNIXサーバSPARC M10（2013年4月10日提供開始）に採用された。

**SPARC64 X+'''は、富士通のUNIXサーバSPARC M10（2014年4月8日提供開始）に採用されている。SPARC64 Xのクロック周波数が3.0GHzであるのに対し、SPARC64 X+はそれを3.7GHzに向上させたうえで、暗号処理・十進浮動小数点数（IEEE 754形式とOracle NUMBER形式）・データベース処理をサポートする命令が追加された。また、従来不可能であったcall/returnを跨いだアウトオブオーダー処理を可能としている。

2019年8月、富士通は「京」の後継となるスーパーコンピューター「富岳」にSPARCとは異なるARMアーキテクチャを使用するA64FXを開発したことを発表した。

2022年2月、富士通はメインフレーム及びUNIXサーバーの開発・販売を2030年までに終了する方針を発表した。SPARC64ファミリ搭載製品はSPARC64 XIIを搭載したUNIXサーバー「SPARC M12」が最後となる予定。

### Rock
Rockはサンがかつて自社開発していた、ハイエンド用のマルチコアSPARCモデルの開発コード名である。次期UltraSPARCとも呼ばれた。2007年1月の発表では、最大で16コアを搭載するとされ、2008年後半に提供予定とされた。2008年2月のISSCC 2008では、16コアで最大32スレッドを並行実行し、アウト・オブ・オーダーを採用し、動作周波数2.3GHzを実現するとされたが、提供時期は最適化のために2009年以降へ延期が発表された。更に2009年6月には、2008年の提供が延期されたのは社内で欠陥が発見されたためであり、開発中止が決定されたと報道された。

2010年1月27日、サンはオラクルに吸収合併され、独立企業・法人としては消滅したがその後もSPARCの開発は人員を補強して続けられた。

## 参照

## 関連項目
* CPU
* マイクロプロセッサ
* RISC
* 京 (スーパーコンピュータ)

## 外部リンク

* SPARC International, inc.（日本語ページあり）