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(ベクトル)レジスタの読み出し方
- xpsimのコマンドラインで、
s (レジスタ読み書き)を入力
- Display register or memory: (A, S, B, T, V, M) で、
v (ベクトル・レジスタ指定)
- Display V register, enter V register number (0-7): で、
3 (ベクトル・レジスタ3を指定)
- Displaying V3
Enter two octal digits of the element number (00-77): で、
00 から 77 まで入力(8進数表現。10進表現の8は10(8進)。10進の10は12(8進))
- V3(00) = 2.47000000000000E+002 New value:
と、現在の値が表示される。「New value:」に対しては、ただ「enter」を入力
xmpsimでのS(スカラ)レジスタの読み出し方
- xpsimのコマンドラインで、
s (レジスタ読み書き)を入力
- Display register or memory: (A, S, B, T, V, M) で、
s (スカラ・レジスタ指定)
- Display S register, enter a register number (0-7): で
5 (スカラ・レジスタ5を指定)
-
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チャンネルが無い代わりに、シリアルポートを付けたよ、的なことが書いてあります。
「ソフトウェアが欲しいよ、国立研究所で働いてた人、連絡くれ」とか書いてますね。
気持ちはよくわかる。
たけおか(竹岡尚三)のホームページ