竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU 残り項目

<<   作成日時 : 2009/10/12 04:24   >>

ブログ気持玉 0 / トラックバック 0 / コメント 4

 あとどんな項目が残っているのか整理してみた。

・浮動小数点の実装 SR.fpuで定義
(1)まったく実装しない。浮動小数点レジスタも持たない。組み込み32ビットプロセッサ向け。
(2)単精度の浮動小数点レジスタとステータス関連のレジスタのみ持つ。演算は整数演算命令を使ったエミュレーションで行う。
(3)単精度の浮動小数点演算機能を持つ。浮動小数点クロックはVIA C3のように半分の速度でもよい。(それでもエミュレーションよりは速い)
(4)単精度、倍精度の浮動小数点機能を持つ。現行のプロセッサと同等。
(5)浮動小数点レジスタのビット幅を拡張し、SIMD演算に対応。
(6)浮動小数点レジスタのビット幅、本数を拡張し、超越関数も持つ。
(7)内部十進の浮動小数点演算器を実装する。(IEEE754-2008)

超越関数についてはx86,68000ファミリの浮動小数点コプロセッサ68881/2,ARMが持っている。
パック十進演算についてはARMも定義しているが、IEEE754-2008の浮動小数点十進演算と同じかどうかわからない。
浮動小数点の十進演算の実装についてはPowerISA2.06がいちばん詳しいようだ。(というより、これしか見つからなかった)

・十進演算の実装 SR.bcdで定義
商用計算機(COBOL)向けには十進演算が有効だが、どのように実装するか。レジスタ幅が256bitだと63桁+符号が実現できる。128bit幅でも31桁+符号だ。加減乗除ができればよい。

・MMUの実装 SR.mmuで定義
32ビット用MMUと64ビット以上用MMUを定義する。32ビット用は主にメモリの保護が目的。アドレスを32ビット(4GB)より大きく拡張したりはしない。
本格的なOSには64ビット以上用MMUを使う。アドレス空間は最大16エクサバイト(であってるかな?)だが、すべて使う必要はない。
なお、AlphaやSPARC V8/V9の本にはMMUの定義がない。特にAlphaは特権モードについて隠している。(スタックポインタすら明示的な記述がない)
MMUについてはSH-4やARM,SPARC JPSを参考にしたい。PowerPCはセグメントも参照する。あと資料が入手しやすいのはIA-32/IA-64あたり。

・SIMD(マルチメディア系)命令の調査
これは調査が大変。各種プロセッサのマルチメディア系命令を調べ、よく使われる命令や廃れた命令などを選別しなければならない。
IA-32 MMX/3DNow!/SSE,SPARC VIS,PA-RISC MAX,PowerPC AltiVec,IA-64やAlpha 21164以降もマルチメディア系命令を持っている。
後に使われなくなったりすることを考えると、この部分は演算命令だけだし、リコンフィギャラブルにすればいいのではないかとも思う。

・メモリコンシステンシ
特にバリア命令。

・マルチコア、マルチスレッド
コア間の通信(割り込み)や停止・再開など。コア共有の資源や固有の資源についても考慮しなければならない。あとは、チップ間の通信など。おそらくNUMAが主流になるだろう。

・割り込み
最後の難関。外部割り込みと内部割り込み、これまで実装を考えてきたユニットで起こりうる例外をまとめなければならない。
また、SPARC V9のようにTSTATEといった段数に限りあるハードウェアスタックを持つのか、通常のスタックを用意して使うのか。

以下は、あとまわしにする。ユーザーモードには直接関係ないため。ほとんどはASI空間アクセスに押し込められるだろう。
・パフォーマンス測定
・特権モード命令拡張(電源管理など)
・ハイパーバイザ支援機能
・RASサポート
・デバック/診断機能

 どこから手を付けたらよいか迷っていたのだ。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(4件)

内 容 ニックネーム/日時
>32ビット用MMUと64ビット以上用MMUを定義する。

仮想空間の話と物理空間の話と(あとハイパーやるならもう1空間)、どれも統一して 32bit とか 64bit とかのつもりなんでしょうか?

# x64拡張しない IA-32 も物理アドレス空間は拡張している

あと、仮想空間が 32bit と 64bit とあるとき、64bit MMU マシンで 32bit バイナリを動かすことなどは想定していますか?
m.ukai
2009/10/14 11:34
>SPARC V9のようにTSTATEといった段数に限りあるハードウェアスタックを持つのか、通常のスタックを用意して使うのか。

MMU アーキのデザインにも依存しますが、メモリスタックを利用する場合は、例外を起こしたときに使うつもりのスタック領域がページフォルトする場合の考慮も必要です (RAS まで含めるとメモリ壊れも考えることになりますが、このケースはハードスタックであっても壊れの考慮が必要)。
IA-32 は #DF 例外になるはずですけれど(なのでOSはフォルトハンドラのスタックエリアはフォルトしないようにメモリ管理をしなければならない制約がある)。
m.ukai
2009/10/14 11:40
毎回有益なコメントありがとうございます。
>仮想空間の話と物理空間の話と(あとハイパーやるならもう1空間)、どれも統一して 32bit とか 64bit とかのつもりなんでしょうか?
ここで挙げた二種類のMMUのビット数は扱えるアドレス空間の事です。今のところ128bit/256bitアーキにしても扱うアドレス空間は64bitで充分だと考えています。(不足したら新しく定義する)


>あと、仮想空間が 32bit と 64bit とあるとき、64bit MMU マシンで 32bit バイナリを動かすことなどは想定していますか?
マシンが256bitなどの時、32/64/128bitのバイナリをユーザーモードで動かすことは考えています。
32bitを別にしているのは、組み込み向けの最小構成であること、物理アドレス拡張(36bitなど)は64bit以上のマシンに任せようと思っているからです。
houmei
2009/10/14 12:39
割り込みは基本的にはSPARC V9のようなハードウェアスタックと作業用のレジスタ(SPARCだとAG,PA-RISCやARMみたいに)を用意して処理させようと思っています。リソースは必要ですがメモリに掃き出すよりも高速で、ご指摘のようなメモリ/MMU周りの考慮すべき点を無視できます。(MMUの理解がまだ不足していますので…)
houmei
2009/10/14 12:50

コメントする help

ニックネーム
URL(任意)
本 文




ぼくのかんがえたさいきょうCPU 残り項目 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる