# The CRAY-1 Computer System > [!abstract] 概要 > 本論文は CRAY-1 を記述し、そのアーキテクチャの発展を論じ、製造の過程で克服された問題のいくつかを報告する。CRAY-1 は、ERDA のクラス VI 要件(毎秒 2,000 万〜6,000 万回の浮動小数点演算を処理できる計算機)を満たすと知られる唯一の計算機である。CRAY-1 の Fortran コンパイラ(CFT)は、科学技術計算のユーザーが CRAY-1 のベクトル処理アーキテクチャの利点をただちに利用できるよう設計されている。最適化コンパイラである CFT は、最内側の DO ループを「ベクトル化」する。ANSI 1966 Fortran 標準および多くの一般的な Fortran 拡張と互換であり、ベクトル化のために元のソースプログラムを修正することも、標準外の Fortran 文を追加することも求めない。したがって、他の同時代の計算機向けに Fortran プログラムを開発するために数百人月を費やしたユーザーの投資は保護される。 ## 論文情報 - 著者: [[Richard M. Russell]](Cray Research, Inc.) - 掲載: Communications of the ACM, Vol. 21, No. 1, 1978 年 1 月, pp. 63–72(1977 年 2 月受領、同年 9 月改訂) - DOI: 10.1145/359327.359336 - 分類: Computer Systems 特集(編者 G. Bell、S. H. Fuller、D. Siewiorek)の 1 編 - 対象: [[CRAY-1]](設計は [[Seymour Cray]]) ## 概要 CRAY-1 は、[[Seymour Cray]] が CDC 1604・6600・7600 の系譜の上に設計したベクトル計算機である。円筒形の小型筐体、4 種類の ECL チップ、64 ビット語の 100 万語半導体主記憶、12 個のパイプライン化された機能ユニット、64 要素のベクトルレジスタを備える。ベクトル演算の結果を主記憶へ戻さず次の機能ユニットへ流すチェイニングにより、スカラー計算機に近い短いベクトル長でも高速化する。著者はこれを、STAR 100 や ASC のような長ベクトル前提の第 1 世代に対する第 2 世代の設計と位置づける。ソフトウェアは、バッチ OS の COS とベクトル化 Fortran コンパイラの CFT で構成され、単体では動作せずフロントエンド計算機を要する。 ## 問題設定 - 当時の大規模計算機市場ではベクトルプロセッサはまだ一般的でない。著者が把握する非 CRAY-1 のベクトル機は世界で 12 台であり、最強が ILLIAC IV(1 台)、最多が Texas Instruments の ASC(7 台)、最も宣伝されたのが Control Data の STAR 100(4 台)である。 - 第 1 世代の STAR 100 と ASC は、データストリームの起動時間のために長いベクトルを要求し、STAR 100 はベクトル要素を連続したアドレスに置くことも要求する。長ベクトルでなければ、スカラープロセッサに対して競争力を持たない。 - 課題は、(1) ベクトル長が短くても得をすること、(2) 実際には多い非ベクトル化部分でもスカラー性能を落とさないこと、(3) 既存の Fortran 資産を書き換えずに使えることである。 ## 提案手法 **物理構成と回路。** 円筒形の筐体(Figure 1)を採り、12 個のくさび形カラムを 270 度の弧に並べて配線距離を縮める。小型化はクロック 12.5 ns の前提であり、著者は「小さいほど速い」を設計の要点とする。 ![[_attachments/The-CRAY-1-computer-system/fig01-mainframe-organization.png]] 写真は稼働中の CRAY-1 の外観(Figure 2)、カラムに装着されたモジュール(Figure 3)、モジュール 1 枚の内部(Figure 4)である。 ![[_attachments/The-CRAY-1-computer-system/fig02-cray1-computer.png]] ![[_attachments/The-CRAY-1-computer-system/fig03-modules-in-place.png]] ![[_attachments/The-CRAY-1-computer-system/fig04-single-module.png]] チップは 4 種類だけである。16×4 ビットのバイポーラレジスタチップ(サイクル 6 ns)、1024×1 ビットのバイポーラメモリチップ(サイクル 50 ns)、伝播時間がナノ秒未満のバイポーラ論理チップ(5 幅・4 幅の NAND ゲート、5/4 NAND)である。全体を ECL 技術で構成する。5 層のプリント基板(幅 6 インチ、長さ 8 インチ)は外側 2 面を信号に、内側 3 層を -5.2 V、-2.0 V、グランドに使う。IC は 16 ピンの密閉フラットパックで、1 モジュールに最大 288 個、28 インチ高のシャーシに最大 72 モジュールを収める。 **主記憶。** 16 バンク、1 バンクあたり 72 モジュールで、各モジュールが 64 ビット語の 1 ビットを担い、残り 8 ビットは 1 ビット訂正・2 ビット検出(SECDED)のチェックバイトになる。語は 1 バンク単位で順に配置されるため、16 ウェイのインターリーブになり、8 語または 16 語刻みで進むアクセス以外ではバンク競合を起こさない。 **冷却。** 発熱密度は 7600 の約 4 倍であり、Freon を使うが既存の金属導体を新しい方法で使う冷却技術を開発した。各カラム壁に沿ってアルミ/ステンレス製の垂直な冷却バーを置き、内部のステンレス管に Freon 冷媒を通す。モジュールはステンレスのピンで銅の伝熱板を冷却バーのアルミ外殻に押し付ける。目標はケース最高温度 130°F(54°C)であり、次の温度差を保つ。 | 位置 | 温度 | |---|---| | モジュール中央 | 130°F (54°C) | | モジュール端 | 118°F (48°C) | | くさび部の冷却板 | 78°F (25°C) | | 冷却バー | 70°F (21°C) | | 冷媒管 | 70°F (21°C) | **CPU の特性(表I)。** | 区分 | 特性 | |---|---| | 計算部 | スカラー・ベクトル両モード。クロック周期 12.5 ns。語長 64 ビット。整数・浮動小数点演算。完全にセグメント化(パイプライン化)された機能ユニット 12 個 | | レジスタ | 24 ビットのアドレス(A)レジスタ 8 本、24 ビットの中間アドレス(B)レジスタ 64 本、64 ビットのスカラー(S)レジスタ 8 本、64 ビットの中間スカラー(T)レジスタ 64 本、64 要素(要素 64 ビット)のベクトル(V)レジスタ 8 本、ベクトル長・ベクトルマスクレジスタ、64 ビットのリアルタイムクロック(RT)レジスタ 1 本 | | 命令 | 16 ビット単位(パーセル)64 個からなる命令バッファ 4 面。基本命令 128 個。優先度付き割込み制御 | | 主記憶 | 1,048,576 語(64 ビット、語あたり検査 8 ビット付き)。65,536 語の独立バンク 16 個。バンクサイクル 4 クロック。B・T・V レジスタとの転送率は 1 語/クロック、A・S レジスタとは 1 語/2 クロック、命令バッファへは 4 語/クロック(最大 16 命令/クロック) | | 入出力部 | 24 チャネルを 6 チャネルずつ 4 群に編成。各群は入力 6 または出力 6。各群を 4 クロックごとに主記憶が処理。チャネルあたりデータ 16 ビット・制御 3 ビット・パリティ 4 ビット。最大チャネル速度は 100 ns に 64 ビット語 1 個。最大ストリーミング速度 500,000 語/秒。チャネル誤り検出 | **機能ユニットとレジスタ(Table II、Figure 5)。** 機能ユニットは、アドレス・スカラー・ベクトル・浮動小数点の 4 群 12 個で、いずれも 1 クロック段にパイプライン化されて結果を 1 クロックに 1 個出せ、さらにユニット間も並行して動く。除算ユニットは無く、浮動小数点除算は逆数近似で行う(IBM System/360 Model 91 にも先例がある)。 | 機能ユニット | 使用レジスタ | ユニット時間(クロック) | |---|---|---| | アドレス加算 | A | 2 | | アドレス乗算 | A | 6 | | スカラー加算 | S | 3 | | スカラーシフト | S | 2(倍語シフトは 3) | | スカラー論理 | S | 1 | | 母集団計数・先頭ゼロ計数 | S | 3 | | ベクトル加算 | V | 3 | | ベクトルシフト | V | 4 | | ベクトル論理 | V | 2 | | 浮動小数点加算 | S と V | 6 | | 浮動小数点乗算 | S と V | 7 | | 逆数近似 | S と V | 14 | ![[_attachments/The-CRAY-1-computer-system/fig05-register-block-diagram.png]] 機能ユニットは A・S・V レジスタからだけオペランドを取り、そこへだけ結果を書く。プログラム可能なレジスタは総量 4,888 バイトの 6 ns の高速記憶であり、著者はこの大容量を CRAY-1 のアーキテクチャの決定的な要素とする。レジスタが無ければチェイニングは成立せず、CFT コンパイラが使う Pass 1・Pass 2 の表をレジスタに置けなければ速度は大きく落ち、帯域 80 百万語/秒の主記憶が性能の足かせになる。B・T レジスタはそれぞれ A・S レジスタの補助記憶であり、転送は 1 クロックである。 命令は 1 または 2 個の 16 ビットパーセルで表す。算術・論理命令は 7 ビットのオペコードに 3 ビットのレジスタ指定 3 個(結果 i、オペランド j・k)を続け、シフト・マスク命令は 3 ビットの i と 6 ビットの jk を使う。即値・主記憶の読み書き・分岐は 2 パーセル形式で、22 ビットの値または番地、分岐は 24 ビットの番地を持つ。計算部は最大で 1 クロックに 1 パーセルを処理する。 **チェイニング。** ベクトル演算の並列処理には、(a) 異なる機能ユニットと V レジスタを使う、(b) チェイニング、の 2 通りがある。チェイニングは、あるベクトルレジスタへ流れる結果ストリームを、同時に別の機能ユニットのオペランド集合として使う。ある機能ユニットが 1 クロックに 1 個ずつ出す結果を、次の機能ユニットへそのまま流し込むため、中間結果を主記憶へ格納せずに済み、生成元のベクトル演算が終わる前から使える。IBM 360/195 の「データ転送(data forwarding)」に似て自動的に起こるが、195 ではユーザーが転送バッファを扱えず、転送できるのもスカラー値だけである。ベクトルが 64 要素を超えるときは 64 要素ずつに分割して処理する。 **例外・割込みと交換シーケンス(Figure 6)。** 割込みを検出するとハードウェアは命令発行を止め、実行中のバンク動作とベクトル命令を完了させてから交換シーケンスを起動する。COS は常に交換の当事者になる。交換パッケージ(16 語)にはアドレスとスカラーのレジスタだけを保持し、B・T・V レジスタは OS がユーザーのジョブテーブル領域へ退避する。ベースアドレス(BA)とリミットアドレス(LA)のレジスタにより、動的再配置とメモリ保護を行う。交換シーケンスは CDC 7600 や Cyber で経験した人に馴染みがある。 ![[_attachments/The-CRAY-1-computer-system/fig06-exchange-package.png]] **短ベクトルへの対応。** ベクトル命令は 1 パーセルで 1 クロックに 1 個発行でき、機能ユニット(主記憶を含む)と入力オペランドレジスタを予約する。先行ベクトル演算に依存する演算は、チェイニングでき、最大でもユニット時間+2 クロックの「チェイン枠」時間だけ待たされる。ベクトル命令は、ユニット時間の遅れの後に最初の結果を出し、以後 1 クロックに 1 個ずつ結果を出す。結果はベクトルレジスタに置かれ、主記憶へは別の格納命令が要る。アドレス指定は開始番地と一定の刻みだけで、行・列・対角の走査や非単位刻みができる。 **ソフトウェアと接続(Figure 8)。** COS は最大 63 ジョブを多重プログラムで動かすバッチ OS で、フロントエンド計算機からジョブと入力ファイルを受け、出力は完了時に返す。CFT は ANSI 66 の Fortran IV を対象に最内側の DO ループをベクトル化する。分岐(GO TO、IF、CALL)を含むループは現状ではベクトル化せず、ベクトル版のある関数の参照は許す。今後のバージョンではベクトルマスクとベクトルマージを使い IF・GO TO を含むループにも対応する計画である。ほかにマクロアセンブラ CAL、オーバーレイローダ、テキストエディタ、デバッグ補助がある。CRAY-1 は単体運用を想定せず、最低でもミニコンピュータを介在させる。CRAY-1 の 12 本の入出力チャネルのどれにもフロントエンドを接続でき、社内開発では Data General Eclipse を使い、16 ビット・80 MIPS の Cray Research「A」プロセッサへの置換を 1978 年初頭に予定する。IBM 370/168 をフロントエンドにする例では、両側のチャネルアダプタの間を位相変調長距離線で結び、最遅の要素である IBM ブロックマルチプレクサチャネル(3 MB/秒)で速度が決まる。 ![[_attachments/The-CRAY-1-computer-system/fig08-front-end-interface.png]] **開発上の問題。** 主な問題は 2 つで、最初の冷却バー(cold bar)の製作と、完全に均衡した動的負荷の回路設計である(S. Cray の 1975 年の講演に基づく)。冷却バーは、小さなミネソタの会社が 1 年半の試行錯誤の末に最初の良品を作った。アルミ鋳物は多孔質で、ステンレス管と肘の接合部にひびがあると Freon がアルミ外殻を通って漏れ、混入した油がモジュールに付着して問題を起こす。鋳物には気泡も入りやすく、温度サイクルやステンレス管の予熱に長い工程を要した。回路側では、基板幅 6 インチを横切る時間が約 1 ns で信号のエッジ時間とほぼ同じであり、対策なしでは接地面に定在波が生じる。そこで全信号経路を同じ長さに揃え(箔の引き回しと IC パッケージでパディング、IC 全体の 10〜20% がこの目的)、単純なゲートだけを使って全ゲートの両側を必ず終端し、ツイストペアの上に等量逆符号の信号を流した。電源から見て動的成分が無く、純抵抗の負荷になる。 ## 新規性 - 第 1 世代の長ベクトル機(STAR 100、ASC)に対し、短ベクトルでも有利になる第 2 世代のベクトルプロセッサを提示した。損益分岐点が 2〜4 要素であることを、ライブラリ関数のスカラー/ベクトル時間比較(図7)で示す。 - チェイニングとベクトルレジスタ、スカラー用の B・T レジスタを組み合わせ、主記憶帯域の制約を大容量レジスタで補う均衡型の設計を採った。 - 標準の Fortran を無修正でベクトル化する最適化コンパイラ CFT を製品に含め、ベクトル化のためのソース修正や言語拡張を求めない。 ## 実験設定 本論文は新しい実験を持たない。性能の根拠は、(a) LASL の最終評価(T. W. Keller、LA-6456-MS)、(b) Michigan 大学のベクトルプロセッサ上の行列ベンチマーク予備報告、(c) Cray Research 社員による Fortran の DO ループと数学ライブラリ関数のスカラー/ベクトル時間測定、(d) Auerbach Computer Technology Reports の比較である。 ## 実験結果 - 独立ベンチマークで持続 138 MFLOPS、短時間 250 MFLOPS を計算できる。Auerbach の報告は、CRAY-1 が主要な競合機より強力で、IBM 370/195 の約 5 台に相当すると見積もる。 - 最終評価は、スカラーモードの CRAY-1 が CDC 7600 の 2 倍超速いと結論する。 - 数学ライブラリ関数の実行時間(クロック/結果)は、ベクトル長 1 で 340 クロック近くに達するが、長さが数要素を超えると急落し、ベクトル長 64 では COS・ALOG・SQRT・EXP のベクトル版が約 8〜25 クロックとなり、スカラー版(約 110〜160 クロック)を大きく下回る。スカラーとの交差点は 2〜4 要素である(Figure 7。本文が「Figure 1」と書く参照は、内容から Figure 7 の誤記と読める)。 ![[_attachments/The-CRAY-1-computer-system/fig07-scalar-vector-timing.png]] - 単純な DO ループ(`DO 10 I = 1,N` の `10 A(I) = B(I)` 型)の実行時間を表III(Table III。原本 OCR では Table 111 と読める)に示す。単位は 1 結果あたりのクロック数である。長いベクトルでは「主記憶参照数+1」クロック/結果に近づく。 | ループ本体 | N=1 | N=10 | N=100 | N=1000 | N=1000(スカラー) | |---|---|---|---|---|---| | 1. A(I) = 1. | 41.0 | 5.5 | 2.6 | 2.5 | 22.5 | | 2. A(I) = B(I) | 44.0 | 5.8 | 2.7 | 2.5 | 31.0 | | 3. A(I) = B(I) + 10. | 55.0 | 6.9 | 2.9 | 2.6 | 37.0 | | 4. A(I) = B(I) + C(I) | 59.0 | 8.2 | 3.9 | 3.7 | 41.0 | | 5. A(I) = B(I)*10. | 56.0 | 7.0 | 2.9 | 2.6 | 38.0 | | 6. A(I) = B(I)*C(I) | 60.0 | 8.3 | 4.0 | 3.7 | 42.0 | | 7. A(I) = B(I)/10. | 94.0 | 10.8 | 4.1 | 3.7 | 52.0 | | 8. A(I) = B(I)/C(I) | 89.0 | 13.3 | 7.6 | 7.2 | 60.0 | | 9. A(I) = SIN(B(I)) | 462.0 | 61.0 | 33.3 | 31.4 | 198.1 | | 10. A(I) = ASIN(B(I)) | 430.0 | 209.5 | 189.5 | 188.3 | 169.1 | | 11. A(I) = ABS(B(I)) | 61.0 | 7.5 | 2.9 | 2.6 | 記載なし | | 12. A(I) = AMAX1(B(I), C(I)) | 80.0 | 11.2 | 5.2 | 4.8 | 記載なし | | 13. C(I) = A(I); A(I) = B(I); B(I) = C(I) | 90.0 | 12.7 | 6.3 | 5.8 | 47.0 | | 14. A(I) = B(I)*C(I) + D(I)*E(I) | 110.0 | 16.0 | 7.7 | 7.1 | 57.0 | | 15. A(I) = B(I)*C(I) + (D(I)*E(I)) | 113.0 | 14.7 | 6.6 | 6.0 | 63.0 | | 16. A(I) = B(I)*C(I) + D(I) | 95.0 | 12.7 | 5.5 | 5.0 | 52.0 | - ASIN にはベクトル版が無く、ベクトル化ループの中でもスカラー版の ASIN を繰り返し呼ぶため性能が落ちる(表III の 10)が、ループの残りはベクトル化される。 - 一見ベクトル化できないループ 14〜16 は、チェイニングの影響を示す。ループ 14 は現行 CFT が 4 個のオペランドを先に全部ロードするため 1 クロック余計にかかり、ループ 15 は括弧を足してコンパイラを手助けすると解消する。 - 現行 CFT で生成した Fortran のループは、最適に手書きした機械語より速く動かないことが多い。今後は命令スケジューリングの改善で向上する見込みである。 - 出荷実績は、Los Alamos Scientific Laboratory([[Los Alamos National Laboratory]] の当時の名称)、NCAR、ECMWF の 3 顧客で、DoD 向け 2 台と United Computing Systems(UCS)向け 1 台の契約がある。生産計画は四半期あたり 1 台の出荷を見込む。 ## 考察 - 著者は、CRAY-1 がスカラーとベクトルの双方に均衡した設計であり、7600 から発展したものだと総括する。スカラー性能の高さは「ベクトル化できないことの多い現実の世界」で必要だと述べる。 - 論文中の主張は主に Cray Research 内部の測定と設計者の証言に基づく。表III は著者と同社の社員による測定値で、外部検証は引用した LASL 評価などに依存する。 - CRAY-1 が汎用計算機への道の重要な一歩になると結ぶが、この予測に定量的な根拠は示さない。 ## 強み / 弱点・課題 - 強み: 短ベクトルでも得をする設計、標準 Fortran の無修正ベクトル化、スカラー性能の高さ、冷却・信号完全性という物理設計の工夫を、開発上の失敗談とあわせて具体的に記述する。 - 弱点・課題: 分岐を含むループを現行 CFT がベクトル化しない。ソフトウェアは初期リリースで、性能は最適手書きに届かない。単体運用できずフロントエンドを要する。入出力チャネル数は本文で 12、表I で 24(6 チャネルの 4 群。入力群と出力群の区別あり)と書かれ、数え方が揃っていない。スキャン由来の本文の一部に判読しにくい箇所があり、値は図表で裏取りした。