CRAY X-MPについて

たけおか @ AXE


update: 2010/SEP/17
初出: 2008/MAR/30

目次
CRAY X-MP概要
CAL (CRAYのアセンブリ言語)について
XMPSIM (CRAY XMPシミュレータ)
CRAY-1 を FPGAで作る


  • 概要

    世界最初のスーパーコンピュータである、CRAY-1のアーキテクチャをもとに、 マルチ・プロセッサ化した機械です。
    CRAY-1はいわゆるベクトル計算機です。
    ベクトル計算機は、少ないハードウェア資源で、高速に行列計算ができるよ うに工夫されています。
    CRAY X-MPを、勉強するのは、いつの時代でも、計算機アーキテクチャ設計の 勉強に役に立つであろうと思います。





  • CRAYのアセンブリ言語(CAL)について

    CRAYのアセンブリ言語(CAL)は基本的に、
    左に操作(演算)結果が入る先を記述する。
    一般のマイクロ・プロセッサのアセンブリ言語では、左に命令(オペレーション)を 記述するので、違和感があるだろう。
    結果格納先には、レジスタだけではなく、,A0,1 のように、 メモリへのストアも、記述される。

    演算(オペレーション)は、右の2つのオペランドの間に、
    + (加算)
    - (加算)
    > (シフト)
    などを記述する。
    また、第2オペランドの頭に、「f」を付加して、浮動小数点演算を示す。
    例えば、 「 v3 v1+fv2 」 は、v1とv2を浮動小数点ベクトル加算して、
    結果をv3に格納するこ とを示す。

    なお、ジャンプ命令や、特殊な制御命令は、操作(オペレーション)などが 左に書かれる。


  • Cray X-MP/24の素晴らしい参考書
    The Cray X-Mp/Model 24: A Case Study in Pipelined Architecture and Vector Processing
    出版社: Springer (1989/09)
    ISBN-10: 0387970894



  • XMPSIM


    CRAY X-MPのパイプラインをシミュレートする、XMPSIMというソフトウェアがあり。
    バイナリ供給で、PC/ATのDOS用。
    日本語Windowsの DOS窓でも、支障なく使用可能。
    (枠の線などに文字化けが発生するが、使用には、まったく問題なし)
    XMPSIM (Cray X-MPシミュレータ) サイト
    (http://www.utdallas.edu/~cantrell/ee2310/xmpsim.html)



    XMPSIM付属のドキュメントを和訳した。

    XMPSIMの使い方入門

    上記サイトより、 Zipされたアーカイブをダウンロードして、展開する。

    DOS窓のプロンプトから、xmpsim と入力して起動。
    そのとき、
    コマンドの第1引数に、ソースファイルを指定し、
    第2引数は出力ログのファイルを指定して、起動できる。
     C:> xmpsim sim1.in aho
     
    どんどん[space]キーを押下。

    命令を実行するたびに、なにかが変化しておもしろい。

    最後に、
    Do you want a Gantt Chart?  (Y,A,N)   :
      (Ganttチャートを出しますか?)
     
    と尋ねてくるので、「a」を押下して、すべてのログを出力させる。
    または、「y」を押下し、直前に表示される命令実行履歴をみて、
    どこから、どこまで
    かを判断して、出力させるべし。
    「n」を押下すれば、Ganttチャートは出ない。
    実行ログ(Ganttチャート含む)は、aho.out としてファイルに保存される。

    命令はニーモニックで入力。(命令一覧表を参考にする)




    ベクトル2つを加算するだけのコード(vvfadd)の解説(たけおかによる)
    xmpsimの左肩に表示されているRTCが、62になった頃に、V3レジスタを読み出すと、 加算結果がV3に入っていることが判る。

    sim1.inの解説(たけおかによる)

    sim2.inの解説(たけおかによる)

    sim3.inの解説(たけおかによる)

    --
    xmpsimでのV(ベクトル)レジスタの読み出し方

    1. xpsimのコマンドラインで、
      s (レジスタ読み書き)を入力
    2. Display register or memory: (A, S, B, T, V, M) で、
      v (ベクトル・レジスタ指定)
    3. Display V register, enter V register number (0-7): で、
      3 (ベクトル・レジスタ3を指定)
    4. Displaying V3
      Enter two octal digits of the element number (00-77): で、
      00 から 77 まで入力(8進数表現。10進表現の8は10(8進)。10進の10は12(8進))
    5. V3(00) = 2.47000000000000E+002 New value:
      と、現在の値が表示される。「New value:」に対しては、ただ「enter」を入力
    xmpsimでのS(スカラ)レジスタの読み出し方

    1. xpsimのコマンドラインで、
      s (レジスタ読み書き)を入力
    2. Display register or memory: (A, S, B, T, V, M) で、
      s (スカラ・レジスタ指定)
    3. Display S register, enter a register number (0-7): で
      5 (スカラ・レジスタ5を指定)
    4. S5 = 2.51000000000000E+002 Reserved New value:
      などと、現在の値が表示される。「New value:」に対しては、ただ「enter」を入力
    A(アドレス)レジスタの読み書きは、Sレジスタと同様。


    --
    XMPSIMのバグ


    命令の実行に誤りがある。

    S6 #<12 というシフト命令の計算が誤っている



    --- EOF


  • FPGAによる、CRAY-1実現

    世の中には、面白い人が居るもので…
    CRAY-1 を FPGA で実現した人が居る。
    筐体は木工で手作り。

    Home brew CRAY-1 のページ
    日本語の紹介ページ

    Home brewというのは、ビールなんかを自家製することで、CPUやOSを自家製することも 「ホームブリューする」と言います。
    「cpu home brew」 というワードで、ググると、1チップCPU LSIを使わない、楽しいCPUが 一杯出ます。


    CRAY-1は、キャッシュが無く、スカラ・レジスタと、ベクトル・レジスタだけなので、 FPGAで実現しやすいですね。
    FPGA版制作者のページにも、そういう風なことが書いてあります。
    ただ、メインメモリと、ベクトル・レジスタのやりとりがどれだけカッコいいか… (スパコンは足回りが命)
    ベクトル・レジスタのあるバンクを演算器がアクセス中に、別バンクはメモリI/Oして欲しい。

    FPGAの汎用ボード (Xilinx Spartan-3E 1600 これで合ってるか? ) なので、メモリは、DDR 256Mbit SDRAMですか。たぶん、64bit幅の接続か???
    メモリは32MBytesあるはず。
    制作者のページには,本当の CRAY-1Aは、256bit=1ワード × 4Kワードで、32MBytesのメモリ と書いてあり。
    FPGA版も約4KワードRAMで動いてる、と書いてあるなぁ…
    DDRがちゃんと動いてると、まぁまぁ速そうですね。

    クロック周波数は、FPGA版が 約33MHzと書いてあり。 本物のCRAY-1Aは80MHzで動作とも書いてある。 これを見ると、昔の CRAYでも、やっぱり速いんだなぁ。 (^^;
    でも、DMAは無しか… (IOチャンネルは無い、ということらしいので)

    Spartan-3E に載ってる、最大級のFPGAの資源(ゲート?)の75% を使用し、 ブロックRAMの全部を使ったと書いてますね。
    やっぱり、そこそこ複雑になってるんだなぁ。浮動小数点演算もやるから、当然か???
    ブロックRAMは、レジスタ・ファイルですね。スカラ・レジスタもそこそこ数があるが、 ベクトル・レジスタはバンクごとに、大量にレジスタがあるので。

    未サポート機能が
    ・割込み
    ・Exchange Packages (コンテキスト切り替え、割込み、スーパバイザ・モード切り替えなどで使用する機構)
    ・IOチャンネル
    らしいです。
    IOチャンネルは、DMAでメインメモリと周辺機器(ディスクなど)がやりとりする機構です。
    IOチャンネルが無い代わりに、シリアルポートを付けたよ、的なことが書いてあります。

    「ソフトウェアが欲しいよ、国立研究所で働いてた人、連絡くれ」とか書いてますね。
    気持ちはよくわかる。





    たけおか(竹岡尚三)のホームページ