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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU スケーラビリティ

<<   作成日時 : 2009/07/14 02:56   >>

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

 そろそろCPUアーキのスケーラビリティについて考えないと。命令を使う立場のコンパイラ屋さんにも、命令を実装するハード屋さんにも優しい作りにしたい。OS屋さんやファーム屋さんには苦労してもらおう。

 128ビット×64本のレジスタという、現在の64ビットプロセッサの規模を越えた、しかし将来的には不可能ではないような点を狙って検討してきたが、さらに大規模にするか、組み込み系を狙ったシュリンクをするか考える必要がある。この場合、規模は変わっても命令セットは同じものが動くことを保証しなければならない。特にユーザーモードでの動作。

 まずは一般プログラマにとっては普段意識しないところから検討してみよう。
・ALUユニットの数
・LD/STユニットの数
・SIMDユニットの数
・乗除算命令など一部命令の有無と実装方法(浮動小数点演算器でやるとか)
・浮動小数点演算ユニットの数
・割り込みの多重度
・パイプラインの段数
・ロード・ストアの最大発行数
・インオーダー実行か、アウトオブオーダー実行か
・レジスタリネーミング
・投機実行
・分岐予測
・TLBのエントリ数・構成、MMUの有無
・キャッシュのサイズとWay数・構成(トレースキャッシュなど)
・RAS機能
・パフォーマンスモニタ
・ハイパーバイザ
・電源制御
・マルチスレッドによる論理CPU数
・チップあたりの物理CPUコア数 ー このあたりは計算機システム構成も関連してくる。チップ数など

これらはユーザーモードでは意識しない、実装依存の部分である。命令が存在しない場合は未実装命令トラップで処理する。この構成は特権モードでは知る必要がある。(初期化やトラップハンドラの用意など)
また、ユーザーモードでも構成を知ることができれば、最適化のヒントになる。

 次はユーザーモードでも意識する必要のある構成。これらはプログラムの互換性に影響する。

・浮動小数点演算ユニットの有無、構成
・SIMDユニットの有無
・レジスタの幅
・レジスタの本数
・メモリアクセス時のアライメント

 これらのうち、浮動小数点演算ユニットの有無、SIMDユニットの有無は代替が難しい。整数演算でエミュレーションも可能だが、速度的な面からメリットがない。
 レジスタの構成についてはまず実行しているプロセッサでどうなっているのか知る必要がある。
整数レジスタ長は128ビットを中心に下は64ビット、32ビットを実現可能にする。上は256ビットを実現可能にする。おそらくそれ以上の長さは複雑さの面から非現実的。(といってながら実現しちゃうのが半導体業界の恐ろしさ)
ビット幅はCPUで定義してある幅から下の方に制限できるようにする。設定により、32ビット、64ビット、128ビット幅を実現する。これは上位のプロセッサが下位のプロセッサのプログラムをそのまま実行できるようにするため。
上位のプロセッサでの下位のレジスタ幅のモードの実現方法について検討しなければならない。MMUで定義した空間ごとに設定できるようにするか、または混在しても大丈夫かどうか調査する。今はちょっと決めかねてる。
混在しても大丈夫なように、整数レジスタは符号拡張し、すべて符号付き演算とする。分岐命令も符号付きで大小を判断する。ビット幅縮小によってアクセスできなくなるフィールドの扱いも考えなければならない。裏技的なデータ置き場にされたくないためだ。

浮動小数点レジスタも32ビットが単精度なのでこれを最低ラインとし、64ビット倍精度、128ビット四倍精度、256ビット四倍精度×2または倍精度×4を実現する。
浮動小数点については色んなバリエーションがあってもよいと考える。これはSPARC64 VIIIfxのベクトル演算拡張を調べてありえると思った。また、同一チップ内に浮動小数点演算専用のユニットを実装した場合は、本CPUの浮動小数点演算はオマケ程度でもよいだろう。極端な話、レジスタさえあればよい。
浮動小数点レジスタと整数レジスタ間の転送については、転送先の幅が小さければトラップを発生させなければならない。例えば64ビット倍精度の浮動小数点を128ビット整数レジスタに転送するときは上位64ビットを0で埋めればよいが、32ビット整数レジスタには転送できない。32ビット整数レジスタの下位CPUの場合は浮動小数点は32ビット単精度に制限するか、浮動小数点演算器はなしにして辻褄を合わせる。
ただしロードストアでメモリを介して転送することは可能だ。

レジスタの本数は、プリフィックス命令で拡張可能にしておく。ただし何本まで拡張可能かどうかはわかるようにしておかなければならない。最低限ゼロレジスタを含む64本とする。

メモリアクセスのアライメントは、32ビット(4バイト)を最小限と決めたので、必然的に4バイト境界までをサポートすることになる。8ビットや16ビットをサポートしない追加の理由として、Unicodeが1レジスタで1文字分扱えればいいじゃないかという考えもある。
それ以下のサイズのアクセス(1バイト、2バイト)については、物理的に1バイト、2バイトのアクセスが出ればよいので、ロード/ストア命令にバイトアクセスの拡張を追加する。
例えばSPARCのVIS命令ではASI空間によるパーシャルストアの機能がある。浮動小数点レジスタのうち、任意の指定したバイトのみ実際のストアを行うことができる。これをStrongOrderingのI/Oアクセスに限定するかは要検討。

 ではグレード別CPU構成を考えてみよう。

・ローエンド 組み込み系 IPコア向け
 32ビット幅レジスタ MMUなし 単精度浮動小数点はオプション インオーダー実行

・ローエンド 組み込み系チップ
 64ビット幅レジスタ SIMDあり MMUあり インオーダー実行

・標準プロセッサ クライアント/サーバ向け
 128ビット幅レジスタ 定義した命令はすべてハード実装 マルチコア

・ハイエンドプロセッサ サーバ向け(この構成について勉強しつつ検討していく)
 128ビット幅レジスタ 定義した命令はすべてハード実装 高速化のための工夫は全部入り RAS機能 マルチコア

・ハイエンドプロセッサ スパコン向け
 128ビット幅レジスタ サーバ向け構成を基本にレジスタ本数拡張 浮動小数点演算強化ーベクトル演算

・超ハイエンドプロセッサ 実現不能領域への挑戦
 256ビット幅レジスタ レジスタ本数拡張 3世代先くらいの半導体テクノロジを前提 加減算ですら1クロックで演算できない 設計者悶絶

このように目標となる規模を決めて、まずは実現可能なところから作れるようにしたい。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

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




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