Cray-1
Cray-1(クレイ ワン)は、シーモア・クレイ率いるクレイ・リサーチ社が設計したスーパーコンピュータである。最初のCray-1システムはロスアラモス国立研究所に 1976年に納入された。Cray-1のアーキテクトはシーモア・クレイ、主任技術者はクレイ・リサーチの共同創設者であるレスター・デーヴィスだった[1]。
目次 |
[編集] 歴史
1970年代初め、クレイはCDCでCDC 8600という新しいマシンの開発に従事していた。8600はクレイがかつて設計したCDC 6600やCDC 7600の後継機である。8600は4台の7600をひとつの筐体に収めたもので、追加された特別なモードによって全体でSIMD的な動作をすることができるものであった。
クレイの初期設計のパートナーだったジム・ソーントンはさらに先進的なCDC STAR-100と呼ばれるプロジェクトを開始した。8600の力ずくの性能向上手法とは異なり、STARは全く異なる方法を採用した。STARのメインプロセッサは7600よりも性能が悪かったが、科学技術計算の性能向上のための特別なハードウェアと命令を追加していた。
1972年、8600の開発は中止された。マシンがあまりにも複雑であったため、正常に動作させることができなかったのである。どれかひとつの部品が故障してもシステム全体が動作できなくなってしまった。クレイはCDC社長のウィリアム・ノリスと会い、最初から設計をやり直す必要があることを告げた。当時、CDCは深刻な財政的問題を抱えており、STARの開発もあったため、ノリスはこれ以上8600への投資ができない状態であった。
クレイとその設計チームはCDCを辞め、CDCの研究所のすぐ近くに新たな会社を設立した。CDCの援助がなければ、新たなスーパーコンピュータを作り上げるのは不可能と思われた。しかし、ウォール街に行ってみると多くの投資家がクレイへの出資に意欲を見せた。彼らに必要なのは設計だけであった。
1975年、80MHzのCray-1が発表された。反響は大きく、ローレンスリバモア国立研究所とロスアラモス国立研究所が第一号機の争奪戦を繰り広げたほどである。結局、後者が勝ち、半年後の1976年に第一号機が納入された。クレイ・リサーチ社の公式の最初の顧客はアメリカ大気研究センター(NCAR)であり、1977年7月に886万ドルを支払った(790万ドルが本体、100万ドルがディスクの代金である)。NCARのマシンは1989年1月まで使用された[2]。クレイ・リサーチ社は1ダースほどの販売を予定していたが、実際には80台以上のCray-1が販売され、価格は500万~800万ドルであった。このマシンによってクレイは名士となり、会社は1990年代の凋落までは成功を収めたのである。
Cray-1の後継機は1982年の800MFLOPSの性能のCray X-MPであった。これはクレイ社初のマルチプロセッサ機である。1985年、後継機として革新的なCray-2が登場した。ピーク性能は 1.9GFLOPSであったが、商業的にはあまり成功しなかった。というのは、実際のアプリケーションを動作させたときに安定した高性能を発揮できなかったからである。そのため、Cray-1やCray X-MPを基にして拡張したCray Y-MPが1988年に投入されることになった。
[編集] 背景
典型的な科学技術計算は大きなデータセットを読み込み、何らかの変換を加え、書き戻すというものである。通常、変換はデータセット内のデータそれぞれに等しく適用される。例えば、百万個の数値それぞれに 5 を加算するというようなプログラムが考えられる。一般的なコンピュータでは、百万回ループして個々の数値に5を加算していく。つまり、
a = add b, c
のような命令を百万個生成するようなものである。コンピュータ内部では、この命令を実行するためにいくつかの過程を踏む。まず、命令を読み込んで解読(デコード)する。次に必要な追加情報を集める。この命令の場合、数値 b と c を集めることになる。そして加算を実行して結果を格納する。
[編集] ベクトル計算機
STARでは、新たな命令でループを表す。まず「数値の大きな列」がメモリのどこにあるのかをマシンに教え、ひとつの命令
a(1..1000000) = addv b(1..1000000), c(1..1000000)
を実行させる。一見してあまり変化がないようにも思われるが、この場合マシンは百万個ではなくひとつの命令を読み込んで解読すればよい。そのため全体の約4分の1の時間が節約される。
しかし実際の時間短縮はそれほどはっきりしていない。コンピュータのCPUは、特定の仕事をするいくつかの部分から構成される。例えば加算を実行する部分やメモリを読み込む部分などである。命令を処理する場合、CPUの一部分だけが働いていて、命令処理はCPUの中の部分から部分へと流れていくのである。しかし、命令パイプラインの追加によってこれが変わった。CPUは先読みをして、前の命令を処理中に次の命令を読み込む。この流れ作業的手法では、ひとつの命令は時間がかかっているが、全体としてみれば命令が次々と処理されていくのである。
ベクタープロセッサは、これにあるトリックを追加して使用する。データの配置は分かっているので(メモリ上に順番に数値が並んでいる)、データ読み込み性能を上げるようにパイプラインを調整する。ベクトル命令を受け付けると、特別なハードウェアを指定された配列を読み込むように設定し、プロセッサに数値を次々と送り込むのである。
CDCがSTARで使用した手法は、今日では「メモリ・メモリ・アーキテクチャ」として知られている。これはデータを集める方法を意味していて、パイプラインは直接メモリを読み書きするように設定される。この場合、いかなる長さのベクトルでも使用可能で、非常に汎用的である。しかし、遅いメモリにアクセスしてもパイプラインが埋まるようにするために、パイプラインの段数が極めて長くないと性能が出せない。これは、ベクトル演算から通常の命令処理への切り替えに時間がかかることを意味する。さらに通常の命令処理の性能が悪いため、ベクトルからの切り替え時間との相乗効果で通常の命令処理は極めて性能が低下する。結果的に実際のアプリケーション性能は残念なものとなった。これは、設計者がアムダールの法則を考慮していれば最初からわかったことかもしれない。
[編集] クレイの手法
クレイはSTARの失敗を見て学ぶことが出来た。彼はベクトル処理の高速化に加えて、一般の命令も高速化することを決断した。そうすれば、マシンのモードが切り替えられても高速に動作できる。さらに彼らはレジスタを使用することで劇的に性能を向上できることに気づいた。
初期のマシンは多くの演算をメモリ上のデータに対して行っていることを無視していたため、STARでも無自覚に同じ手法でベクトル演算を繰り返しメモリにアクセスするように実装してしまった。しかし、まとめてデータをレジスタに読み込んで、まとめて結果を書き込めば性能はさらに向上する。レジスタは回路としてはコストが高いため、無制限に実装することはできない。結果としてクレイの設計ではベクトルの大きさが制限されてしまった。STARではどんなサイズのベクトルでもよいがメモリアクセスは何度も発生するのに対して、クレイの設計したマシンではデータの一部だけを読み込む。しかし、一度に複数の処理を実行できるのである。一般的な負荷を考えるとメモリアクセスを何回かに分けたとしても性能向上が期待できるとクレイは考えた。
一般的なベクトル処理は小さなデータセットをベクターレジスタに読み込んで、それに対していくつかの演算を行うが、この新しいベクトルシステムは独立したパイプラインを持つよう設計された。そして、乗算ユニットと加算ユニットは別々のハードウェアとして実装されたので、内部でふたつの演算をつないで、例えば加算結果を次の乗算で使用することをパイプライン上でできた。これをクレイは chaining と呼び、これによってプログラマはいくつかの命令をつないで高性能を引き出すことができたのである。
[編集] 詳細
Cray-1はクレイにとって初めて集積回路(IC)を使ったマシンである。ICは1960年代から実用化されていたが、1970年代に入ってから高速性を要求される用途にも使えるものになったのである。Cray-1で使用しているICは、ECLによるNANDゲート2個を実装したもの、やや低速なMECLによるNANDゲートIC、レジスタ用の高速小容量SRAM、主記憶用の1024×1ビットのSRAM(50ns)の4種類だけだった[3]。それらのICはフェアチャイルドセミコンダクターおよびモトローラ製である。Cray-1は全体で 20万ゲートで構成された。
ICは5層のプリント基板上に実装され、基板1枚に144個のICが搭載されている。基板は冷却のために背中合わせに実装され、24台の28インチ高のラックに72組の背中合わせの基板がセットされた。モジュール(個別の演算ユニット)は一枚か二枚の基板で構成される。マシン全体では 113種類 1,662モジュールが使われた。
設計の初期段階で発見された問題は、処理速度が基板上の信号速度限界(パルスが立ち上がる速度)に極めて近いことであった。これは信号が目的のICに到達したときにパルスが下がる時間になってしまう可能性があることを意味していたが、これを検出するのは困難だった。この問題は信号線にディレイを加えることで解決された。その方法としては、信号路に金属箔を隣接されて置いて電荷を蓄えさせるか、ICを追加して信号を中継させるのである。概算によれば、40%の論理ゲートにディレイが追加された。
いつものようにクレイはサイクル時間を短くして性能を向上させるために、電気的・機械的設計に多くの時間を費やした。モジュール間の配線は高電圧回路を使用して雑音の影響を受けないようにして、受信側が高速に受け取れるようにした。モジュール間のケーブルはツイストペアケーブルとし、長さも緻密に計算してパルスの反射が起きないようにした。増幅器は均衡を保つようになっていて、ツイストペアの一方が高電圧ならもう一方は低電圧となっている。したがって電力は一定であり、スイッチングノイズを防いでいた。
高電圧であるために全体として発熱が非常に大きかった。クレイの設計者は多くの時間を冷却システムに費やした。このために2枚の基板の間に銅板を挟んで背中合わせにした。銅板は熱をケースの端へ送り出すので、そこにフロンの通るパイプを設置して熱を交換し、筐体下部の冷却装置でフロンを冷却した。最初のCray-1の完成が六ヶ月遅れたのは、この冷却機構に問題が生じたためである。コンプレッサのためにフロンに混ぜられていた潤滑剤が漏れて、回路がショートしてしまったのである。パイプの溶接に新たな技術を導入して漏れを防いだのである。
配線の長さを少しでも短くするため、筐体は "C" のような形に配置された。速度に影響するものはその形の内側の端に置かれ、配線の長さを少しでも短くした。これによりサイクル時間は12.5ns(80MHz)まで短縮された。彼があきらめた8600の8nsよりも長いが、CDC 7600やSTARよりずっと高速である。NCARはシステムのスループット計測結果を概算でCDC 7600の4.5倍とした。
Cray-1は64ビットシステムであり、7600/6600の60ビットとは異なる(8600でも同様の変更がなされる予定だった)。アドレスは24ビットであり、最大で1Mワード(8Mバイト)の主記憶を扱える。メモリは16バンクに分割され、それぞれ50nsのサイクル時間であり、1サイクルで4ワードを読み込むことができる。
メインレジスタセットは 8本の64ビット・スカラー(S)レジスタと8本の24ビット・アドレス(A)レジスタから構成される。これらレジスタを一時退避するそれぞれ64本のレジスタ(T および B と呼ばれた)があり、こちらは演算ユニットからは見えない。ベクトル機構には別に 64本の64ビット・ベクター(V)レジスタとベクター長(VL)レジスタ、ベクターマスク(VM)レジスタがある。そして、64ビットクロックと4本の64ビット命令バッファがあり、各命令バッファには16ビットの命令が4つ格納される。ハードウェアは1サイクル毎に1ワード分のベクター命令を命令バッファからベクトル機構に送り込むことができる。一方、アドレスおよびスカラーレジスタには1サイクル毎に2ワード分の命令を実行できる。
システムは12個のパイプライン型機能ユニットがある。24ビットのアドレス演算に加算ユニット1つと乗算ユニット1つを使用する。システムのスカラー部には加算ユニット、論理演算ユニット、ハミング重み計算ユニット、前置ゼロ計数ユニット、シフト演算ユニットがある。浮動小数点演算ユニット群はスカラー部とベクター部で共有しており、加算ユニット、乗算ユニット、逆数近似ユニットからなる。
システムは12個の機能ユニットがあるが、並列性には制限がある。1サイクルに1命令がユニットにフェッチされるが、実行は並行して行われ、1サイクル毎に最大で2個の命令が完了する。理論上の性能は160MIPS(80MHz×2命令)だが、制限により実際の浮動小数点演算性能は136 MFLOPSである。しかし、ベクター命令を注意深く使用してchainを作るようにすれば最高で 250MFLOPS の性能を出すことができる。
Cray-1は大きなデータセットを処理するよう設計されているため、I/O回路の設計にも時間がかけられた。クレイがCDCで設計したものにはI/O専用のコンピュータが含まれていたが、それは必要とされなかった。代わりにCray-1は4台の6チャネル・コントローラを持ち、各コントローラが4サイクルに1回メモリにアクセスできるようにした。チャネルは16ビット幅で、制御ビットとして3ビット、エラー訂正用に4ビットを使用する。最大転送速度は100nsに1ワードであり、マシン全体では500Kワード/sとなる。
最初のモデルCray-1Aは、フロン冷却システムを含めて重量5.5トンであった。RAMは100万ワードで、消費電力は115kWであった。冷却システムと外部記憶装置を入れるとその倍の電力消費となる。操作用のフロントエンドとしてデータゼネラル社のSuperNova S/200が使われた。これは後にEclipseに置き換えられた。
次のモデルCray-1S(1979年)は、クロック周波数が若干上がって12.0nsとなり、メインメモリは100万/200万/400万ワードである。主記憶の大容量化は、25nsのアクセス時間で動作する4096ビットのバイポーラRAM集積回路によって実現できた[4]。データゼネラルのマシンは独自の16ビットマシン(80MIPS)に置き換えられた。I/Oシステムはメインのマシンとは分離され、6MB/sの制御チャネルと100MB/sの高速データ転送チャネルで接続された。この分離によって1Sの外観はCray-1Aをふたつに分けて少し離したように見えた。これによりI/Oシステムは必要に応じて拡張できるようになった。システムはいくつかの構成から選ぶことができた。S/500はI/O無しで0.5Mワードメモリであり、S/4400は4Mワードメモリで4台のI/Oプロセッサを持つ。
Cray-1S の次にはCray-1M(1982年)が登場した[5]。"M"は低価格なMOSベースのRAMをI/Oシステムに使用していることを表す。1Mは3つのバージョンがあり、メインメモリの容量だけで分けられている。M/1200は 1Mワード(8バンク)、M/2200 は2Mワード(16バンク)、M/4200は4Mワード(16バンク)である。いずれもI/Oプロセッサは2~4台であり、高速データチャネルがもうひとつ追加された。ユーザはMOSベースのRAMを8~32Mワード分追加してRAMディスクとして使用することができた。
[編集] 博物館
Cray-1は以下のような場所で展示されている。
- コンピュータ歴史博物館(マウンテンビュー)
- DigiBarn Computer Museum
- ドイツ博物館(ミュンヘン)
- アメリカ大気研究センター(ボルダー)
- サイエンス・ミュージアム(ロンドン)
- 国立航空宇宙博物館(ワシントンD.C.)
[編集] ソフトウェア
1978年、Cray-1リリース時の最初のソフトウェアは以下の3製品から構成されていた。
- Cray Operating System (COS)。Cray-1とCray X-MPで使用されたオペレーティングシステム。1984年にUNIX系統のUNICOSに置き換えられた。
- Cray Assembler Language (CAL)
- Cray FORTRAN (CFT)。最初の自動ベクトル化FORTRANコンパイラ
[編集] 脚注・出典
- ^ C.J. Murray, "The ultimate team player," Design News, 6 Mar. 1995.
- ^ “SCD Supercomputer Gallery”. NCAR. 2010年6月3日閲覧。
- ^ R.M. Russell, "The CRAY-1 Computer System," Comm. ACM, Jan. 1978, pp. 63–72.
- ^ J.S. Kolodzey, "CRAY-1 Computer Technology," IEEE Trans. Components, Hybrids, and Manufacturing Technology, vol. 4, no. 3, 1981, pp. 181–186.
- ^ "Cray Cuts Price," The New York Times, 14 Sep. 1982.
[編集] 外部リンク
- CRAY-1 Computer System Hardware Reference Manual, Publication No. 2240004 Rev.C 11/77 (first three chapters)(英語) – From DigiBarn(英語) / Ed Thelen
- Cray Channels Magazine @ The Centre for Computing History
- Cray Manuals & Documentation @ The Centre for Computing History
- Cray Users Group Publications @ The Centre for Computing History
- NCAR Supercomputer Gallery