SPARC

SPARC
デザイナーサン・マイクロシステムズ(オラクル社に買収)[ 1 ] [ 2 ]
ビット64ビット(32→64)
紹介された1986年(生産)1987年(出荷) (1986年 (1987年
バージョンV9 (1993) / OSA2017
デザインRISC
タイプロード・ストア
エンコーディング修理済み
分岐条件コード
エンディアン(ビッグ→ビ)
ページサイズ8KB(4KB→8KB)
拡張機能VIS 1.0、2.0、3.0、4.0
開けるはい、ロイヤリティフリーです
レジスター
汎用31 (G0 = 0; 非グローバルレジスタはレジスタウィンドウを使用する)
浮動小数点32 (32 単精度、32 倍精度、または 16 4 倍精度として使用可能)
Sun UltraSPARC IIマイクロプロセッサ (1997)

SPARCスケーラブル・プロセッサ・アーキテクチャ)は、サン・マイクロシステムズによって開発された縮小命令セット・コンピュータ(RISC)命令セット・アーキテクチャです。その設計は、1980年代初頭に開発された実験的なバークレーRISCシステムの影響を強く受けています。1986年に開発され、1987年にリリースされたSPARCは、初期の商用RISCシステムの中で最も成功したものの1つであり、その成功をきっかけに、1980年代から1990年代にかけて多くのベンダーが同様のRISC設計を導入しました。Oracle Corporationはサンを買収した後、 2017年にSPARCの開発を終了しました。

説明

1980年代半ばまでに、コンピュータ業界ではRISCが従来のCISCアーキテクチャよりもはるかに優れた価格性能比を持つというコンセンサスが形成されました。ワークステーションベンダーのサン・マイクロシステムズは、モトローラ68000シリーズプロセッサからRISCへの移行を可能な限り迅速に行うことを決定しました。[ 3 ]

オリジナルの32 ビットアーキテクチャ (SPARC V7) の最初の実装は、Sun のSun-4コンピュータワークステーションおよびサーバシステムに使用され、Motorola 68000 シリーズに基づく初期のSun-3システムに取って代わりました。SPARC V8 では、1992 年にリリースされたSuperSPARCシリーズのプロセッサの一部である多くの改良が加えられました。1993年にリリースされた SPARC V9 では64 ビットアーキテクチャが導入され、1995 年に Sun のUltraSPARCプロセッサで初めてリリースされました。その後、SPARC プロセッサは、 Sun、 Solbourne富士通などが製造した対称型マルチプロセッシング(SMP) および非均一メモリ アクセス( CC-NUMA ) サーバで使用されるようになりました。

1989年に設計はSPARC International業界団体に引き継がれ、それ以来そのアーキテクチャはその会員企業によって開発されてきました。SPARC Internationalは、SPARCアーキテクチャのライセンス供与とプロモーション、SPARC商標(SPARCも所有)の管理、適合性テストの提供も行っています。SPARC Internationalは、SPARCアーキテクチャを成長させてより大規模なエコシステムを構築することを目的としており、SPARCはAtmelBipolar Integrated TechnologyCypress Semiconductor富士通松下電器、 Texas Instrumentsなど複数のメーカーにライセンス供与されています。SPARC Internationalのおかげで、SPARCは完全にオープンで、非独占的かつロイヤリティフリーとなっています。

2024 年現在、最新の商用ハイエンド SPARC プロセッサは、富士通SPARC64 XII (SPARC M12 サーバー用に 2017 年 9 月に導入) と、Oracleのハイエンド サーバー用に 2017 年 9 月に導入された SPARC M8です。

2016年11月にオラクル研究所で始まった一連のレイオフの後、2017年9月1日、オラクルはM8の完成後にSPARCの設計を終了した。テキサス州オースティンのプロセッサコア開発グループの大部分が解雇され、カリフォルニア州サンタクララとマサチューセッツ州バーリントンのチームも解雇された。[ 4 ] [ 5 ]

富士通もSPARCの生産を中止する(すでに自社のARMベースCPUの生産に移行している)。富士通の旧型SPARC M12サーバの「強化」バージョンを2020~22年(当初は2021年の予定)に1回生産した後、UNIXサーバは2029年に販売終了、メインフレームは1年後に販売終了、2034年には「顧客の近代化を促進するため」にサポートを終了する。[ 6 ]

特徴

SPARCアーキテクチャは、カリフォルニア大学バークレー校のBerkeley RISC IおよびII 、そしてIBM 801といった初期のRISC設計から大きな影響を受けています。これらの初期のRISC設計はミニマリズムを旨とし、機能やオペコードを可能な限り少なくし、1クロックサイクルあたりほぼ1命令の実行速度を目指していました。そのため、乗算や除算などの命令がないなど、多くの点でMIPSアーキテクチャに類似していました。SPARCのこの初期のRISCの動きの影響を受けたもう一つの機能は、分岐遅延スロットです。

SPARCプロセッサには通常、最大160個の汎用レジスタが搭載されています。「Oracle SPARC Architecture 2015」仕様によると、「実装には72~640個の汎用64ビットレジスタが搭載される可能性がある」とのことです。[ 7 ]いずれの時点でも、ソフトウェアから直接参照できるのはそのうち32個のみです。そのうち8個はグローバルレジスタのセット(そのうちの1つg0はゼロにハードワイヤードされているため、レジスタとして使用できるのは7個のみ)で、残りの24個はレジスタスタックから取得されます。これらの24個のレジスタは、レジスタウィンドウと呼ばれるものを形成し、関数の呼び出し/戻り時に、このウィンドウはレジスタスタック内を上下に移動します。各ウィンドウには8個のローカルレジスタがあり、隣接するウィンドウとそれぞれ8個のレジスタを共有します。共有レジスタは関数パラメータの受け渡しと値の戻りに使用され、ローカルレジスタは関数呼び出し間でローカル値を保持するために使用されます。

SPARC の「スケーラブル」という表現は、SPARC 仕様では、組み込みプロセッサから大規模なサーバー プロセッサまで、同じコア (非特権) 命令セットを共有する実装が可能であるという事実に由来しています。拡張可能なアーキテクチャ パラメータの 1 つは、実装されるレジスタ ウィンドウの数です。仕様では 3 から 32 までのウィンドウの実装が許可されているため、実装では、コール スタックの効率を最大限に高めるために 32 すべてを実装するか、設計のコストと複雑さを軽減するために 3 つのウィンドウのみを実装するか、またはその間の数を実装するかを選択できます。同様のレジスタ ファイル機能を備えた他のアーキテクチャには、 Intel i960IA-64AMD 29000などがあります。

このアーキテクチャは何度か改訂され、バージョン8ではハードウェアによる乗算・除算機能が追加されました。[ 8 ] [ 9 ] 1994年に公開されたバージョン9のSPARC仕様では、64ビット(アドレス指定とデータ)が追加されました。[ 10 ]

SPARCバージョン8では、浮動小数点レジスタファイルに16個の倍精度レジスタがあります。これらのレジスタはそれぞれ2個の単精度レジスタとして使用でき、合計32個の単精度レジスタとなります。奇数と偶数の倍精度レジスタのペアは4倍精度レジスタとして使用できるため、8個の4倍精度レジスタが使用可能です。SPARCバージョン9では、さらに16個の倍精度レジスタが追加されました(これらは8個の4倍精度レジスタとしてもアクセス可能)。ただし、これらの追加レジスタは単精度レジスタとしてアクセスすることはできません。2024年現在、ハードウェアで4倍精度演算を実装しているSPARC CPUはありません。[ 11 ]

タグ付き加算および減算命令は、値の加算および減算を実行する際に、両方のオペランドの下位2ビットが0であることを確認し、0でない場合はオーバーフローを報告します。これは、MLLisp、およびタグ付き整数形式を使用する可能性のある類似言語 のランタイム実装に役立ちます。

32ビットSPARC V8アーキテクチャのエンディアン純粋なビッグエンディアンです。64ビットSPARC V9アーキテクチャはビッグエンディアン命令を使用しますが、データへのアクセスはビッグエンディアンまたはリトルエンディアンのどちらのバイトオーダーでも可能で、アプリケーション命令(ロード・ストア)レベルまたはメモリページレベル(MMU設定経由)で選択できます。後者は、PCIバス上のデバイスなど、本質的にリトルエンディアンであるデバイスからのデータアクセスによく使用されます。

歴史

v7 → v8 → v9 (64ビット) → JPS1 → JPS2 (マルチコア) → UA2005 ( sun4v ) → UA2007 → OSA2011 → OSA2015 → OSA2017

このアーキテクチャには3回の主要な改訂がありました。最初に公開されたバージョンは、1986年に発表された32ビットSPARCバージョン7(V7)でした。SPARCアーキテクチャ定義を拡張したSPARCバージョン8(V8)は、1990年にリリースされました。V7とV8の主な違いは、整数乗算命令と除算命令の追加と、80ビットの「拡張精度」浮動小数点演算から128ビットの「4倍精度」演算へのアップグレードです。SPARC V8は、 32ビットマイクロプロセッサアーキテクチャの IEEE標準であるIEEE標準1754-1994の基礎となりました。

64ビットSPARCアーキテクチャであるSPARCバージョン9(V9)は、1993年にSPARC Internationalによってリリースされました。これは、Amdahl CorporationFujitsuICLLSI LogicMatsushitaPhilipsRoss TechnologySun MicrosystemsTexas Instrumentsで構成されるSPARCアーキテクチャ委員会によって開発されました。新しい仕様は常に、SPARC V9レベル1仕様の完全版に準拠しています。

2002年、富士通とサン・マイクロシステムズ社はSPARC Joint Programming Specification 1(JPS1)をリリースしました。この仕様は、両社のCPUに同一に実装されたプロセッサ機能(「共通性」)を規定しています。JPS1に準拠した最初のCPUは、サン・マイクロシステムズ社のUltraSPARC IIIと富士通社のSPARC64 Vでした。JPS1でカバーされていない機能は、各プロセッサの「実装補足資料」に記載されています。

2003年末、マルチコアCPUをサポートするために、ジョイント・プログラミング仕様2(JPS2)がリリースされました。JPS2に準拠した最初のCPUは、SunのUltraSPARC IVと富士通のSPARC64 VIでした。

2006年初頭、Sunは拡張アーキテクチャ仕様であるUltraSPARC Architecture 2005(UA2005)をリリースしました。これには、SPARC V9の非特権部分と特権部分の大部分だけでなく、UltraSPARC III、IV、IV+の各プロセッサ世代を通じて開発されたすべてのアーキテクチャ拡張、そしてUltraSPARC T1実装以降のチップ・マルチスレッディング・テクノロジCMT)拡張が含まれています。

  • VIS 1およびVIS 2命令セット拡張と関連するGSRレジスタ
  • GLレジスタによって制御される複数レベルのグローバルレジスタ
  • Sunの64ビットMMUアーキテクチャ
  • 特権命令 ALLCLEAN、OTHERW、NORMALW、INVALW
  • VERレジスタへのアクセスは超特権になりました
  • SIR命令は超特権命令になった

2007 年に、Sun はUltraSPARC T2実装が準拠した更新仕様UltraSPARC Architecture 2007 (UA2007)をリリースしました。

2007年12月、SunはOpenSPARCプロジェクトを通じてUltraSPARC T2プロセッサのRTLも公開した。[ 12 ]これはGNU General Public License v2の下でもリリースされた。[ 13 ] OpenSPARC T2は8コア、16パイプライン、64スレッドである。

2012年8月、オラクル社は新しい仕様であるOracle SPARC Architecture 2011(OSA2011)を公開しました。この仕様では、リファレンスの全体的な更新に加えて、2007年の仕様にVIS 3命令セット拡張とハイパー特権モードが追加されています。[ 14 ]

2015年10月、オラクルは新しいOracle SPARC Architecture 2015(OSA2015)仕様に基づく最初のプロセッサであるSPARC M7をリリースしました。 [ 7 ] [ 15 ] このリビジョンには、VIS 4命令セット拡張とハードウェア支援暗号化およびシリコンセキュアメモリ(SSM)が含まれています。[ 16 ]

2017 年 9 月、Oracle は新しいOracle SPARC Architecture 2017 (OSA2017) 仕様に基づく最初のプロセッサである SPARC M8 をリリースしました。

SPARC アーキテクチャは、1987 年の最初の SPARC V7 実装から Sun UltraSPARC アーキテクチャ実装まで、継続的なアプリケーション バイナリ互換性を提供してきました。

SPARCの様々な実装の中でも、SunのSuperSPARCとUltraSPARC-Iは非常に人気があり、SPEC CPU95およびCPU2000ベンチマークのリファレンスシステムとして使用されました。296MHzのUltraSPARC-IIは、SPEC CPU2006ベンチマークのリファレンスシステムです。

建築

SPARC はロード ストア アーキテクチャ(レジスタ レジスタ アーキテクチャとも呼ばれる) です。メモリにアクセスするためのロード/ストア命令を除き、すべての命令は RISC 設計原則に従ってレジスタ上で動作します。

SPARCプロセッサには、整数のロード、ストア、算術演算を実行する整数ユニット(IU)が搭載されています。[ 17 ]:9 [ 10 ]:15–16 浮動小数点演算を実行する浮動小数点ユニット(FPU)が搭載されている場合もあり[ 17 ]:9 [ 10 ]:15–16 、SPARC V8の場合は、コプロセッサ固有の演算を実行するコプロセッサ(CP)が搭載されている場合もあります。アーキテクチャでは、ロードおよびストア演算以外のコプロセッサが実行する機能は指定されていません。[ 17 ]:9

レジスター

SPARCアーキテクチャは、オーバーラップレジスタウィンドウ方式を採用しています。常に32個の汎用レジスタが参照可能です。ハードウェア内のカレントウィンドウポインタ(CWP )変数は、現在のレジスタセットを指します。レジスタファイルの合計サイズはアーキテクチャに含まれていないため、技術の進歩に伴ってレジスタを追加することが可能であり、SPARC V7およびV8では、 CWPが5ビットでPSRレジスタの一部であるため、最大32個のウィンドウまで拡張可能です。

SPARC V7およびV8では、CWPは通常、SAVE命令(プロシージャ呼び出し中にSAVE命令によって新しいスタックフレームが開かれ、レジスタウィンドウが切り替えられる)によって減分され、RESTORE命令(プロシージャから戻る前に呼び出しに戻る)によって増分されます。トラップイベント(割り込み、例外、またはTRAP命令)およびRETT命令(トラップからの復帰)もCWPを変更します。SPARC V9では、CWPレジスタはRESTORE命令中に減分され、SAVE命令中に増分されます。これは、SPARC V8におけるPSR.CWPの動作とは逆です。この変更は非特権命令には影響しません。

ウィンドウアドレス指定
グループを登録ニモニック登録住所可用性
グローバルG0...G7R[ 0]...R[ 7]常に同じもの、G0は常にゼロ
O0...O7R[ 8]...R[15]呼び出されたサブルーチンに渡され、そのサブルーチンから返される。
地元L0...L7R[16]...R[23]現在のサブルーチンに完全にローカル
I0...I7R[24]...R[31]発信者から渡され、発信者に返される。これは「アウト」である。

SPARC レジスタは上の図に示されています。

また、ウィンドウのないYレジスタもあり、乗算ステップ、整数乗算、整数除算命令で使用されます。[ 17 ]:32

FPUを搭載したSPARC V8プロセッサには、32ビットの浮動小数点レジスタが32個搭載されており、各レジ​​スタは単精度IEEE 754浮動小数点数を1つ保持できます。偶数と奇数の浮動小数点レジスタのペアは倍精度IEEE 754浮動小数点数を1つ保持でき、4つの浮動小数点レジスタの4倍精度グループは4倍精度IEEE 754浮動小数点数を1つ保持できます。[ 17 ] : 10

FPUを搭載したSPARC V9プロセッサには次のものが含まれています。[ 10 ]:36–40

  • 32 個の 32 ビット浮動小数点レジスタ。各レジスタは 1 つの単精度 IEEE 754 浮動小数点数を保持できます。
  • 32 個の 64 ビット浮動小数点レジスタ。各レジスタは 1 つの倍精度 IEEE 754 浮動小数点数を保持できます。
  • 16 個の 128 ビット浮動小数点レジスタ。各レジスタは 1 つの 4 倍精度 IEEE 754 浮動小数点数を保持できます。

レジスタは 64 個の 32 ビット レジスタのセットとして構成され、最初の 32 個は 32 ビット浮動小数点レジスタとして使用され、64 個のレジスタすべての偶数と奇数のペアは 64 ビット浮動小数点レジスタとして使用され、4 つの浮動小数点レジスタの 4 列グループは 128 ビット浮動小数点レジスタとして使用されます。

浮動小数点レジスタはウィンドウ化されておらず、すべてグローバルレジスタである。[ 10 ]:36–40

指示フォーマット

すべてのSPARC命令は32ビットワードを占有し、ワード境界から始まります。最初の2ビットによって区別される4つのフォーマットが用いられます。すべての算術および論理演算命令は、2つのソースオペランドと1つのデスティネーションオペランドを持ちます。[ 18 ] RDは「デスティネーションレジスタ」であり、演算の出力が格納されます。ほとんどのSPARC命令は少なくともこのレジスタを持つため、命令フォーマットの「先頭」付近に配置されます。RS1とRS2は「ソースレジスタ」であり、存在する場合も存在しない場合もあり、定数に置き換えられる場合もあります。

SPARC命令フォーマット
タイプ 少し
313029282726252423222120191817161514131211109876543210
SETHI形式00RD100即値定数 22ビット
I ブランチ形式00icc010変位定数22ビット
F ブランチ形式00FCCC110変位定数22ビット
C ブランチ形式00ccc111変位定数22ビット
コールディスプ01PC相対変位
算術レジスタ10RDオペコードRS100RS2
算術即値10RDオペコードRS11即値定数 13ビット
FPU操作10FD110100/110101FS1opfFS2
CP操作10RD110110/110111RS1OPCCRS2
JMPLレジスタ10RD111000RS100RS2
JMPL即時10RD111000RS11即値定数 13ビット
LD/STレジスタ11RDオペコードRS100RS2
LD/ST即時11RDオペコードRS11即値定数 13ビット

説明書

ロードとストア

ロード命令とストア命令は3オペランド形式であり、アドレスの値を表す2つのオペランドと、読み出しまたは書き込み先のレジスタを表す1つのオペランドを持ちます。アドレスは、2つのアドレスオペランドを加算して生成されます。2番目のアドレスオペランドは定数またはレジスタです。ロード命令はアドレスの値を取り出し、3番目のオペランドで指定されたレジスタに格納します。一方、ストア命令は1番目のオペランドで指定されたレジスタの値を取り出し、アドレスに格納します。これをより明確にするために、アセンブラ言語では、アドレスオペランドをカンマ区切りのリストではなく、角括弧とプラス記号で区切って示します。例:[ 18 ]

ld [%L1+%L2],%L3 !アドレス%L1+%L2の32ビット値をロードし、その値を%L3に格納します。 ld [%L1+8],%L2 !%L1+8の値を%L2にロードします ld [%L1],%L2 !上記と同じですが、オフセットはありません。これは +%G0 と同じです。 st %L1,[%I2] !%L1の値を%I2に格納されている場所に格納します st %G0,[%I1+8] !%I1+8のメモリをクリアする 

16ビットまたは8ビットの整数データや文字列内の8ビットバイトなど、32ビット以外のデータが広く使用されているため、16ビットのハーフワードおよび8ビットのバイトをロードおよびストアする命令、そして32ビットのワードをロードする命令があります。ロード時には、これらの命令は指定された位置のバイトまたはハーフワードのみを読み取り、その後、ターゲットレジスタの残りの部分をゼロで埋める(符号なしロード)か、バイトまたはハーフワードの最上位ビットの値で埋める(符号付きロード)かのいずれかを行います。ストア時には、これらの命令はレジスタの上位ビットを破棄し、下位ビットのみをストアします。また、浮動小数点演算に使用される倍精度値をロードする命令もあり、指定されたレジスタと「次の」レジスタから8バイトを読み書きします。したがって、ロード先がL1の場合、L1とL2がセットされます。 32ビットSPARCの汎用レジスタに対するロードおよびストア命令の完全なリストはLD、、STLDUB符号なしバイト)、LDSB(符号付きバイト)、LDUH(符号なしハーフワード)、LDSH(符号付きハーフワード)、LDD(ロードダブル)、STB(ストアバイト)、STH(ストアハーフワード)、STD(ストアダブル)である。[ 18 ]

SPARC V9では、レジスタは64ビットであり、LD命令(名前が変更されましたLDUW)はレジスタの上位32ビットをクリアし、その32ビット値を下位32ビットにロードします。また、ST命令(名前が変更されました)はSTWレジスタの上位32ビットを破棄し、下位32ビットのみを格納します。新しいLDSW命令は、レジスタの上位ビットをワードの最上位ビットの値に設定し、その32ビット値を下位ビットにロードします。新しいLDX命令は、64ビット値をレジスタにロードし、STXレジスタの64ビットすべてを格納します。

LDF、、LDDFおよび命令はLDQF、単精度、倍精度、または 4 倍精度の値をメモリから浮動小数点レジスタにロードします。STF、、STDFおよびSTQF命令は、単精度、倍精度、または 4 倍精度の浮動小数点レジスタをメモリに格納します。

メモリバリア命令MEMBARは、相互に関連する2つの目的を果たします。1つはメモリ参照間の順序制約を明確にし、もう1つはメモリ参照の完了を明示的に制御することです。例えば、MEMBAR命令に先行するストア命令の効果は、MEMBAR命令に続くロード命令を実行する前に、すべてのプロセッサから参照可能でなければなりません。[ 19 ]

ALU演算

算術命令と論理命令も3オペランド形式を採用しており、最初の2つがオペランド、最後の1つが結果を格納する場所です。中間のオペランドはレジスタまたは13ビット符号付き整数定数にすることができ、その他のオペランドはレジスタです。レジスタオペランドはいずれもG0を指すことができます。結果をG0に指すと、結果は破棄されます。破棄された結果はテストに使用できます。例としては、以下のものがあります。[ 18 ]

%L1、%L2、%L3 を加算します。%L1 と %L2 の値を加算し、結果を %L3 に格納します。 %L1,1,%L1 を追加 !%L1 を増加 %G0、%G0、%L4 を追加 !%L4 の値をクリア 

算術命令のリストはADD、、、、、、およびSUBそれらの否定形である、、、およびであるAND。SPARC設計の奇妙な点の1つは、ほとんどの算術命令がペアになっていることである。片方はステータスレジスタのNZVC条件コードビットを設定し、もう片方は設定しない。デフォルトでは、条件コードを設定しない。これは、コンパイラが遅延スロットを埋める際に命令を移動できるようにするためである。条件コードを設定したい場合は、命令に[ 18 ]を追加することで示す。ORXORANDNORNXNORcc

subcc %L1,10,%G0 !%L1と10を比較し、結果は無視するが、フラグを設定する 

add と sub には、演算でキャリー ビットを設定するかどうかを示す別の修飾子 X もあります。

addx %L1,100,%L1 !%L1の値に100を加算し、繰り上がりを追跡します 

SPARC V7 には乗算命令や除算命令はありませんが、 命令があります。これはMULSCC、1 ビットをテストし、条件付きで被乗数を積に加算する乗算の​​ 1 ステップを実行します。これは、MULSCCRISC 原理に従って が 1 クロック サイクルで完了できるためです。SPARC V8 では、UMUL(unsigned multiply)、SMUL(signed multiply)、UDIV(unsigned divide)、SDIV(signed divide) 命令が追加されました。条件コードを更新しないバージョンと更新するバージョンの両方があります。 MULSCCまた、乗算命令は、Y レジスタを使用して積の上位 32 ビットを保持します。除算命令は、Y レジスタを使用して被除数の上位 32 ビットを保持します。命令は、RDYY レジスタの値を汎用レジスタに読み込みますWRY。命令は、汎用レジスタの値を Y レジスタに書き込みます。[ 17 ] : 32 SPARC V9ではMULX、2つの64ビット値を乗算して64ビットの結果を生成する 、SDIVX64ビットの符号付き被除数を64ビットの符号付き除数で割って64ビットの符号付き商を生成する 、および64ビットの符号なしUDIVX被除数を64ビットの符号なし除数で割って64ビットの符号付き商を生成する が追加された。これらの命令はいずれもYレジスタを使用しない。[ 10 ] : 199

分岐

条件分岐は、IBM System/360アーキテクチャと後継アーキテクチャ、そしてx86アーキテクチャなど多くの命令セットで見られるように、ステータスレジスタ内の条件コードをテストします。つまり、テストと分岐は通常2つの命令で実行されます。最初の命令は条件コードを設定するALU命令であり、次の命令はそれらのフラグの1つを調べる分岐命令です。SPARCには特殊なテスト命令はなく、テストは通常​​のALU命令を使用して、分岐先を%G0に設定して実行されます。例えば、レジ​​スタに値10が格納されているかどうかをテストし、それを処理するコードに分岐するには、次のようにします。

subcc %L1,10,%G0 !%L1から10を減算し、%L1が10の場合はゼロフラグを設定する WASEQUAL !ゼロフラグが設定されている場合は、WASEQUAL とマークされたアドレスに分岐します。 

条件分岐命令では、iccまたはfccフィールドでテストする条件を指定します。22 ビットの変位フィールドは、現在の PC を基準としたターゲットの相対アドレス(ワード単位)です。これにより、条件分岐は最大 8 MB まで前方または後方に実行できます。ANNUL ( A) ビットは、一部の遅延スロットを削除するために使用されます。条件分岐でこのビットが 0 の場合、遅延スロットは通常どおり実行されます。1 の場合、遅延スロットは分岐が成立した場合にのみ実行されます。分岐が成立しない場合は、条件分岐に続く命令はスキップされます。

条件分岐にはさまざまな種類があります: BA(常に分岐、基本的にはジャンプ)、BN(常に分岐しない)、BE(BNE等しい)、BL(等しくない)、(より小さい)、BLE(以下)、BLEU(以下または等しい、符号なし)、BG(より大きい)、BGE(以上)、BGU(以上、符号なし)、BPOS(正)、BNEG(負)、BCC(キャリークリア)、BCS(キャリーセット)、BVC(オーバーフロークリア)、BVS(オーバーフローセット)。[ 17 ] :119–120

FPUとCPは、整数条件コードとは別に、また互いに独立した条件コードセットを持っています。これらの条件コードをテストするために、2つの追加の分岐命令セットが定義されています。上記のリストにある分岐命令の先頭にFを追加すると、FPUの条件コードに対するテストが実行されます[ 17 ]:121–122。 一方、SPARC V8では、Cを追加すると、それ以外は未定義のCPのフラグがテストされます[ 17 ]:123–124 。

(サブルーチンへのジャンプ)命令CALLは、30ビットのプログラムカウンタ相対ワードオフセットを使用します。ターゲットアドレスはバイトではなくワードの開始位置を指定するため、4ギガバイトのアドレス空間内の任意のアドレスに到達するには30ビットあれば十分です。[ 18 ] CALL命令は、戻りアドレスをレジスタR15(出力レジスタO7とも呼ばれます)に格納します。

(ジャンプ・リンク)命令JMPLは3つのオペランドを持つ命令で、2つのオペランドはターゲットアドレスの値を表し、1つのオペランドは戻りアドレスを格納するレジスタを表します。アドレスは、2つのアドレスオペランドを加算して32ビットのアドレスを生成します。2番目のアドレスオペランドは定数またはレジスタです。

大きな定数

命令オペコードは32ビット命令ワードの一部のビットを占有するため、単一の命令で32ビット定数をロードすることはできません。アドレスはレジスタを介して操作され、レジスタも32ビットであるため、これは重要な問題です。この問題を解決するため、この特殊用途SETHI命令は、22ビットの即値オペランドを任意のレジスタの上位22ビットにコピーし、下位10ビットをそれぞれ0に設定します。一般的な使用法では、SETHI命令の後には、値の下位10ビットのみを設定するOR命令が続きます。この問題を解決するため、アセンブラには%hi(X)AND%lo(X)マクロが組み込まれています。例えば、次のようになります。 [ 18 ]

sethi %hi(0x89ABCDEF),%L1 !L1の上位22ビットを設定します または %L1,%lo(0x89ABCDEF),%L1 !L1の下位10ビットをOR演算で設定します 

hiマクロとloマクロは実行時ではなくアセンブリ時に実行されるため、パフォーマンスへの影響はなく、L1が2つの無関係な値ではなく単一の値に設定されていることが明確になります。これをさらに容易にするために、アセンブラには「合成命令」も含まれています。この命令setは、これらの2つの操作を1行で実行します。

0x89ABCDEF、% L1 を設定 

値が13ビットより大きい場合は上記の2つの命令を出力し、そうでない場合はld値を含む単一の命令を出力します。[ 18 ]

合成指示

前述のように、SPARCアセンブラは「合成命令」を使用して一般的なコーディング作業を簡素化します。その他の例としては、以下が挙げられます(他にもいくつかあります)。[ 18 ]

SPARC合成命令
ニモニック 実際の出力 目的
nopsethi0,%g0何もしない
clr%regor%g0,%g0,%regレジスタをゼロに設定する
clr[address]st%g0,[address]メモリアドレスをゼロに設定する
clrh[address]sth%g0,[address]メモリアドレスのハーフワードをゼロに設定する
clrb[address]stb%g0,[address]メモリアドレスのバイトをゼロに設定する
cmp%reg1,%reg2subcc%reg1,%reg2,%g02つのレジスタを比較し、コードを設定し、結果を破棄する
cmp%reg,constsubcc%reg,const,%g0レジスタと定数を比較する
mov%reg1,%reg2or%g0,%reg1,%reg2あるレジスタから別のレジスタに値をコピーする
movconst,%regor%g0,const,%reg定数値をレジスタにコピーする
inc%regadd%reg,1,%regレジスタをインクリメントする
inccc%regaddcc%reg,1,%regレジスタをインクリメントし、条件を設定する
dec%regsub%reg,1,%regレジスタを減算する
deccc%regsubcc%reg,1,%regレジスタを減算し、条件を設定する
not%regxnor%reg,%g0,%regレジスタ内のビットを反転する
neg%regsub%g0,%reg,%reg2の補数レジスタ
tst%regorcc%reg,%g0,%g0レジスタの値が0より大きいか、0か、0より小さいかをテストする

SPARCアーキテクチャライセンシー

80386はIntelが唯一の製造元であったため、非常に高価であり、業界は単一供給元CPUに警戒感を抱いていました。サンが1987年にSPARCを発表した際、同社は複数の供給元から入手可能になると表明しました。富士通が最初のSPARCベンダーであり、サイプレス・セミコンダクタが2番目のライセンシーでした。1989年2月時点で、両社のSPARC CPUとテキサス・インスツルメンツのFPUが入手可能でした。[ 20 ]以下の組織がSPARCアーキテクチャのライセンスを取得しています。

実装

注記:

  1. ^ a bコアあたりのスレッド数 × コア数
  2. ^富士通、 LSIロジック、Weitek、テキサス・インスツルメンツ、サイプレス、テミックによって、様々なSPARC V7実装が製造されました。SPARC V7プロセッサは一般的に複数の個別チップで構成され、通常は整数演算ユニット(IU)、浮動小数点演算ユニット(FPU)、メモリ管理ユニット(MMU)、キャッシュメモリで構成されています。一方、アトメル(現マイクロチップ・テクノロジー)のTSC695は、シングルチップのSPARC V7実装です。
  3. ^ @167 MHz
  4. ^ @250 MHz
  5. ^ @400 MHz
  6. ^ @440 MHz
  7. ^最大 @500 MHz
  8. ^ @1200 MHz
  9. ^ I/Oバスを除く
  10. ^公称値; 接続されている RAM の容量に応じて 100 MHz から 424 MHz の仕様

オペレーティングシステムのサポート

SPARC マシンでは、一般的に Sun のSunOSSolarisJavaOS、または派生版のillumosOpenIndianaを含むOpenSolarisが使用されてきましたが、NeXTSTEPRTEMSFreeBSDOpenBSDNetBSDLinuxなどの他のオペレーティング システムも使用されてきました。

1993年にインターグラフはWindows NTをSPARCアーキテクチャに移植することを発表しましたが[ 48 ]、後にキャンセルされました。

2015年10月、オラクルは「SPARC向けLinuxリファレンスプラットフォーム」を発表しました。[ 49 ]

オープンソース実装

SPARC アーキテクチャの 完全にオープン ソースな実装はいくつか存在します。

  • LEON は、宇宙での使用を特に想定して設計された、32ビットの耐放射線SPARC V8実装です。ソースコードはVHDLで記述されており、GPLライセンスが適用されます。
  • OpenSPARC T1は2006年にリリースされ、UltraSPARC Architecture 2005およびSPARC Version 9(Level 1)に準拠した64ビット、32スレッド実装です。ソースコードはVerilogで記述されており、多くのライセンスの下でライセンスされています。OpenSPARC T1のソースコードのほとんどはGPLの下でライセンスされています。既存のオープンソースプロジェクトに基づくソースコードは、引き続き現在のライセンスの下でライセンスされます。バイナリプログラムは、バイナリソフトウェアライセンス契約の下でライセンスされます。
  • S1は、OpenSPARC T1設計に基づく64ビットWishbone準拠CPUコアです。4ウェイSMTに対応したシングルUltraSPARC V9コアです。T1と同様に、ソースコードはGPLライセンスです。
  • OpenSPARC T2は2008年にリリースされ、UltraSPARC Architecture 2007およびSPARC Version 9(レベル1)に準拠した64ビット、64スレッド実装です。ソースコードはVerilogで記述されており、多くのライセンスの下でライセンスされています。OpenSPARC T2のソースコードのほとんどはGPLの下でライセンスされています。既存のオープンソースプロジェクトに基づくソースコードは、引き続き現在のライセンスの下でライセンスされます。バイナリプログラムは、バイナリソフトウェアライセンス契約の下でライセンスされます。

SPARC アーキテクチャ用の 完全にオープン ソースのシミュレータも存在します。

  • RAMP Gold は、FPGAベースのアーキテクチャシミュレーション用に設計された、32ビット、64スレッドのSPARCバージョン8実装です。RAMP Goldは約36,000行のSystemVerilogで記述されており、BSDライセンスの下でライセンスされています。

スーパーコンピュータ

富士通は、HPC 負荷向けに、HPC-ACE (High Performance Computing – Arithmetic Computational Extensions) と呼ばれる新しい命令拡張セットを備えた 特殊なSPARC64 fxプロセッサを構築しています。

富士通の「京」コンピュータは、 2011年6月と2011年11月のTOP500リストで1位にランクされました。88,128個のSPARC64 VIIIfx CPU(それぞれ8コア)を組み合わせ、合計705,024個のコアを備えており、これは当時のTOP500の他のシステムのほぼ2倍の数です。「京」コンピュータは、リストの次の5つのシステムを合わせたよりも強力で、スーパーコンピュータシステムの中で最も高い性能対電力比を誇りました。[ 50 ]また、2011年6月のGreen500リストでは、824.56 MFLOPS/Wのスコアで6位にランクされました。 [ 51 ] 2012年11月のリリースのTOP500では、「」コンピュータは3位に ランクされ、トップ3の中では圧倒的に多くの電力を使用しました。[ 52 ] [ 53 ]最近のPRIMEHPC FX10およびFX100スーパーコンピュータ には、新しいHPCプロセッサIXfxXIfxが搭載されました。

天河2号(2014年11月時点のTOP500ランキング1位[ 54 ] )には、中国で開発されたGalaxy FT-1500 OpenSPARCベースプロセッサを搭載したノードが多数搭載されている。しかし、これらのプロセッサはLINPACKスコアには寄与していない。[ 55 ] [ 56 ]

参照

  • ERC32  — SPARC V7仕様に基づく
  • Ross Technology, Inc.  — 1980年代から1990年代にかけてSPARCマイクロプロセッサを開発していた企業
  • Sparcle  — MIT Alewife プロジェクトで使用される、マルチプロセッシングをサポートする修正 SPARC
  • LEON  — 宇宙仕様の SPARC V8 プロセッサ。
  • R1000  — SPARC V9仕様に基づくロシアのクアッドコアマイクロプロセッサ
  • Galaxy FT-1500  — 中国製の16コアOpenSPARCベースのプロセッサ

参考文献

  1. ^ a b「富士通、ARMをスーパーの領域へ」 CPU Shack Museum 2016年6月21日。2019年6月30日時点のオリジナルよりアーカイブ。2019年6月30日閲覧。
  2. ^ a b「タイムライン」 . SPARC International . 2019年4月24日時点のオリジナルよりアーカイブ2019年6月30日閲覧。
  3. ^ Bell, Gordon ; Strecker, WD 「PDP-11から学んだこと - VAXとAlphaから学んだこと」(PDF)(レポート) 。 2025年6月26日閲覧
  4. ^ Vaughan-Nichols, Steven J. (2017年9月5日). 「Sun set: Oracle closes down last Sun product lines」 . ZDNet . 2017年9月10日時点のオリジナルよりアーカイブ。 2017年9月11日閲覧
  5. ^ Nichols, Shaun (2017年8月31日). 「Oracle、ついに避けられない事態の長期化を止め、ハードウェアのレイオフを開始」 . The Register . 2017年9月12日時点のオリジナルよりアーカイブ。 2017年9月11日閲覧
  6. ^ 「ロードマップ:富士通グローバル」www.fujitsu.com . 2022年2月15日閲覧
  7. ^ a b「Oracle SPARC Architecture 2015: One Architecture ... Multiple Innovative Implementations」(PDF)。ドラフトD1.0.0。2016年1月12日。 2016年4月24日時点のオリジナルからアーカイブ(PDF) 。 2016年6月13日閲覧。IMPL . DEP. #2-V8:Oracle SPARC Architectureの実装には、72~640個の汎用64ビットRレジスタが含まれる場合があります。これは、レジスタをMAXPGL + 1セットのグローバルRレジスタと、16個のレジスタからなるN_REG_WINDOWSセットの循環スタック(レジスタウィンドウ)にグループ化したものに相当します。存在するレジスタウィンドウの数(N_REG_WINDOWS)は実装に依存し、3~32(両端を含む)の範囲となります。
  8. ^ "SPARC Options"GNU Compiler Collection (GCC) の使用GNU2013年1月9日時点のオリジナルよりアーカイブ、 2013年1月8日閲覧。
  9. ^ SPARC Optimizations With GCCOSNews、2004年2月23日、2013年5月23日時点のオリジナルよりアーカイブ、 2013年1月8日閲覧。
  10. ^ a b c d e f Weaver, DL; Germond, T. 編 (1994). SPARCアーキテクチャ・マニュアル バージョン9 . SPARC International, Inc.: Prentice Hall . ISBN 0-13-825001-4. 2023年5月27日閲覧
  11. ^ 「SPARCの動作と実装」 .数値計算ガイド – Sun Studio 10. Sun Microsystems, Inc. 2004. 2022年1月25日時点のオリジナルよりアーカイブ2011年9月24日閲覧。ただし、ハードウェアが浮動小数点命令を正常に完了できない状況が4つあります。…命令がハードウェアによって実装されていない場合(…SPARC FPU上の4倍精度命令など)。
  12. ^ 「サン、UltraSPARC CMTエコシステムの成長を加速」サン・マイクロシステムズ。 2008年1月26日時点のオリジナルよりアーカイブ。
  13. ^ 「OpenSPARCに関するよくある質問」 . Oracle. 2012年10月17日時点のオリジナルよりアーカイブ2021年3月20日閲覧。
  14. ^ 「Oracle SPARC Architecture 2011」(PDF)Oracle Corporation、2014年5月21日、2015年9月24日時点のオリジナルよりアーカイブ(PDF) 、 2015年11月25日閲覧。
  15. ^ Soat, John. 「SPARC M7イノベーション」 . Oracleウェブサイト. Oracle Corporation . 2015年9月5日時点のオリジナルよりアーカイブ。 2015年10月13日閲覧
  16. ^ 「Software in Silicon Cloud - Oracle」www.oracle.com2019年1月21日時点のオリジナルよりアーカイブ。 2019年1月21日閲覧
  17. ^ a b c d e f g h i『SPARCアーキテクチャマニュアル、バージョン8』SPARC International, Inc. 1992年. 2023年5月27日閲覧
  18. ^ a b c d e f g h i「SPARC基本命令」
  19. ^ 「SPARC64 IXfx拡張機能 富士通株式会社 Ver 12、2013年12月2日」(PDF) pp.  103– 104 . 2023年12月17日閲覧
  20. ^ a b c d e fトレバー・マーシャル、ジェーン・モリル・タゼラー(1989年2月)。「RISCの価値」 BYTE McGraw -Hill、pp.  245– 249。2024年10月8日閲覧
  21. ^ “Fujitsu SPARC” . cpu-collection.de . 2016年8月6日時点のオリジナルよりアーカイブ。 2019年6月30日閲覧
  22. ^ 「Floodgap Retrobits presents the Solbourne Solace: a Shrine to the forgotten SPARC」 www.floodgap.com . 2020年12月1日時点のオリジナルよりアーカイブ。 2020年1月14日閲覧
  23. ^ Sager, D.; Hinton, G.; Upton, M.; Chappell, T.; Fletcher, TD; Samaan, S.; Murray, R. (2001). 「4GHz整数演算ユニットを搭載した0.18μm CMOS IA32マイクロプロセッサ」. 2001 IEEE International Solid-State Circuits Conference. 技術論文ダイジェスト. ISSCC (Cat. No. 01CH37177) . サンフランシスコ, カリフォルニア州, 米国: IEEE. pp.  324– 325. doi : 10.1109/ISSCC.2001.912658 . ISBN 978-0-7803-6608-4
  24. ^ FX1の主な特徴と仕様(PDF)富士通、2008年2月19日、2012年1月18日時点のオリジナルよりアーカイブ(PDF) 、 2011年12月6日取得
  25. ^ Tremblay, Marc ; Chaudhry, Shailender (2008年2月19日)、「第3世代65nm 16コア32スレッド+32スカウトスレッドCMT SPARC(R)プロセッサ」(PDF)OpenSPARCSun Microsystems2013年1月16日時点のオリジナルよりアーカイブ、 2011年12月6日閲覧。
  26. ^ Vance, Ashlee (2009年6月15日)、「Sun Is Said to Cancel Big Chip Project」The New York Times2011年11月4日時点のオリジナルよりアーカイブ、 2010年5月23日閲覧。
  27. ^ 「Fujitsu shows off SPARC64 VII」heise online、2008年8月28日、2013年5月23日時点のオリジナルよりアーカイブ。 2011年12月6日閲覧。
  28. ^ Barak, Sylvie (2009年5月14日)、「富士通が世界最速のCPUを発表」The Inquirer、2009年5月17日時点のオリジナルよりアーカイブ、 2011年12月6日閲覧。
  29. ^ 「Sparc T3プロセッサ」(PDF)Oracle Corporation2016年4月24日時点のオリジナルよりアーカイブ(PDF) 、 2011年12月6日閲覧。
  30. ^ Morgan, Timothy Prickett (2010年12月3日)、「Ellison: Sparc T4 due next year」The Register2012年3月7日時点のオリジナルよりアーカイブ2011年12月6日閲覧。
  31. ^ 「SPARC Enterprise Mシリーズサーバアーキテクチャ」(PDF)富士通、2011年4月、2016年3月4日時点のオリジナルよりアーカイブ(PDF) 、 2011年11月5日取得
  32. ^ Morgan, Timothy Prickett (2011年8月22日)、「Oracle's Sparc T4 chip」The Register2011年11月30日時点のオリジナルよりアーカイブ、 2011年12月6日閲覧。
  33. ^ Morgan, Timothy Prickett (2011年11月21日)、「Fujitsu parades 16-core Sparc64 super stunner」The Register2011年11月24日時点のオリジナルよりアーカイブ、 2011年12月8日閲覧。
  34. ^ 「富士通、スーパーコンピュータ「PRIMEHPC FX10」を発売」富士通、2011年11月7日、2012年1月18日時点のオリジナルよりアーカイブ。 2012年2月3日閲覧。
  35. ^ 「Ixfx ダウンロード」(PDF) . fujitsu.com. 2015年5月18日時点のオリジナルよりアーカイブ(PDF) . 2015年5月17日閲覧
  36. ^ 「Images of SPARC64」(PDF) . fujitsu.com. 2016年4月22日時点のオリジナルよりアーカイブ(PDF) . 2017年8月29日閲覧
  37. ^ 「Oracle製品」(PDF) oracle.com. 2017年3月8日時点のオリジナルよりアーカイブ(PDF) 2017年8月29日閲覧
  38. ^ 「Oracle SPARC製品」(PDF) oracle.com. 2018年9月26日時点のオリジナルよりアーカイブ(PDF) 2017年8月29日閲覧
  39. ^ 「Fujitsu Presentation pdf」(PDF) . fujitsu.com. 2016年4月22日時点のオリジナルよりアーカイブ(PDF) 。 2017年8月29日閲覧
  40. ^ 「Fujitsu Global Images」(PDF) . fujitsu.com. 2015年5月18日時点のオリジナル(PDF)からアーカイブ2017年8月29日閲覧。
  41. ^ 「M7: 次世代SPARC。Hotchips 26」(PDF) . swisdev.oracle.com. 2014年10月31日時点のオリジナルよりアーカイブ(PDF) . 2014年8月12日閲覧
  42. ^ 「OracleのSPARC T7およびSPARC M7サーバーアーキテクチャ」(PDF) oracle.com. 2015年11月6日時点のオリジナルよりアーカイブ(PDF) 2015年10月10日閲覧
  43. ^ Vinaik, Basant; Puri, Rahoul (2015年8月24日). 「Hot Chips – August 23–25, 2015 – Conf. Day1 – Oracle's Sonoma Processor: Advanced low-cost SPARC processor for enterprise workloads」(PDF) . hotchips.org. 2022年10月9日時点のオリジナルよりアーカイブ(PDF) . 2022年1月25日閲覧
  44. ^ 「ブループリント公開:OracleがSparc M7とInfiniBandをより安価な「Sonoma」チップに詰め込む」 theregister.co.uk。2017年8月29日時点のオリジナルよりアーカイブ。 2017年8月29日閲覧
  45. ^ 「富士通の文書」(PDF) . fujitsu.com. 2017年8月29日時点のオリジナルよりアーカイブ(PDF) 。 2017年8月29日閲覧
  46. ^ 「Oracleの新しいSPARCシステムは、Intelベースのシステムよりも2~7倍優れたパフォーマンス、セキュリティ機能、効率性を実現」 oracle.com。2017年9月18日時点のオリジナルよりアーカイブ。 2017年9月18日閲覧
  47. ^ 「SPARC M8プロセッサ」(PDF) . oracle.com. 2019年2月28日時点のオリジナルよりアーカイブ(PDF) 。 2017年9月18日閲覧
  48. ^ McLaughlin, John (1993年7月7日)、「IntergraphがWindows NTをSPARCに移植」The Florida SunFlash55 (11)、2014年7月23日時点のオリジナルよりアーカイブ2011年12月6日閲覧。
  49. ^ Project: Linux for SPARC - oss.oracle.com、2015年10月12日、2015年12月8日時点のオリジナルよりアーカイブ。 2015年12月4日閲覧。
  50. ^ "TOP500 List (1-100)"TOP500、2011年6月、2011年6月23日時点のオリジナルよりアーカイブ。 2011年12月6日閲覧。
  51. ^ 「The Green500 List」Green500 、2011年6月、 2011年7月3日時点のオリジナルよりアーカイブ。
  52. ^ 「Top500 List – November 2012 | TOP500 Supercomputer Sites」TOP500 、2012年11月、2012年11月13日時点のオリジナルよりアーカイブ。2013年1月8日閲覧。
  53. ^ 「The Green500 List – November 2012 | The Green500」Green500、2012年11月、2016年6月6日時点のオリジナルよりアーカイブ。 2013年1月8日閲覧。
  54. ^ 「天河2号(ミルキーウェイ2号)」TOP500、2015年5月、2015年5月26日時点のオリジナルよりアーカイブ。 2015年5月27日閲覧。
  55. ^ Keane, Andy、「Tesla Supercomputing」mp4Nvidia2021年2月25日時点のオリジナルよりアーカイブ。 2011年12月6日閲覧。
  56. ^ Thibodeau, Patrick (2010年11月4日). 「米国、中国が『完全に国産』のスーパーコンピュータを構築していると主張」 Computerworld . 2012年10月11日時点のオリジナルよりアーカイブ。 2017年8月28日閲覧