アカウント名:
パスワード:
僕もいっそうしてほしい気持ちでいっぱいだが、それをしない、というの
ノスタルジーや独特
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson
そろそろ (スコア:1)
Re:そろそろ (スコア:1, すばらしい洞察)
僕もいっそうしてほしい気持ちでいっぱいだが、それをしない、というの
Re:そろそろ (スコア:1)
その
Re:そろそろ (スコア:1, 興味深い)
ノスタルジーや独特
Re:そろそろ (スコア:1)
X86はまだまだ挑戦者に打ち負かされるほど、引きずっている古いものの重さが過大にはなってないでしょう。
x86 は大丈夫だけど SPARC は... (スコア:1, 参考になる)
> 過大にはなってないでしょう。
そうなんですよね。
x86 は命令セットは古いんだけど、x86 命令を μOP やRISC86 と呼ばれる RISC 風命令に置き換えて実行するから、CPU の内部はバリバリのスーパースカラー RISC プロセッサなんですよ。
Pentium4 では変換後の μOP命令をそのまま溜め込むトレースキャッシュを実装しているので更にペナルティは小さいです。
一方、SUN の UNIX 機に
コンタミは発見の母
Re:x86 は大丈夫だけど SPARC は... (スコア:3, 参考になる)
> (Scalable Processor ARChitecuture) という命令セットを採用しています。
> かつて RISC の星とされたその命令セットですが、 register
> window という「出た当時は大変便利だと思われた機構」が
> 今では性能向上を阻害する要因になり果てています。
SPARCにはもう少し言いたいことがあって、
・今ではあるだけ無駄な annul bit 付き delay slot
・命令デコードが終わるまでレジスタが決定できない浮動小数点系命令
(V9の話ね。64本レジスタがあるのに5bitしかないんだもん。)
とか、何とかならんかと思います。
最近では一部の命令は内部でμOPに分解してるそうなので、こちらももうRISCとはいえないかもしれない。
(過去の資産に頼っているようにも見えるし。)
# 「スコアの +1 ボーナスを使わない 」なんてできたんだ。内容で勝負ってわけね…
あぁ、「ン」が消えてるんですよ。「ビーフン・カレー」ね。
PA-RISC はさらに変態的 (スコア:1)
いい加減なことを書くのはまずいと思って、PA-RISC について調べものをしていたら遅くなってしまいました。
> SPARCにはもう少し言いたいことがあって、
> ・今ではあるだけ無駄な annul bit 付き delay slot
私は delay slot に関しては、SPARC 一人の罪ではないと許しています。
MIPS には分岐しない(not-taken) の場合には delay slot を無視する条件分岐命令群が用意されていますから annnul bit 付き branch があるのと実質同じです。
PA-RISC の条件分岐命令には delay slot が必ず掛かります。
しかし分岐命令に nullification を指定することで、delay slot に埋めた命令を nullify することが可能です(nullification = 分岐・演算命令に指定できる機能で、演算結果によって後続の命令をスキップする)。
この機能を使うと delay slot に入った命令を 前方条件分岐の時には分岐する(taken)の時にスキップ、後方条件分岐の時には分岐しない(not-taken)の時にスキップします。annul bit よりも面倒くさいです。
> ・命令デコードが終わるまでレジスタが決定できない浮動小数点系命令
> (V9の話ね。64本レジスタがあるのに5bitしかないんだもん。)
知らない人のために解説しておくと SPARC の前の命令セット(V8)までは FPU には 32本の単精度FP(float, 32bit幅) のレジスタがあるのが基本で、これを 偶数と奇数と 2本づつペアにして使って 16 本の倍精度FPレジスタ(double, 64bit) として使ったり、4本ペアにして倍々精度FPレジスタ(128bit)レジスタとして使ったりしていたのです。
ただし16本の double レジスタはアセンブラレベルでは f0 ~ f15 なのですが、命令のエンコーディングのレベルでは f0、f2、~ f14 というように偶数番目だけを指定するという方式を取りました。
つまり下のような感じです。
ビット表現 00000 00001 00010 00011 000100
float 演算 f0 f1 f2 f3 f4
double 演算 f0&f1 未使用 f2&f3 未使用 f4&f5
これだけならすっきりしていたのですが、V9 になった時に double は16本では少ないので 32本に拡張しました。
この時、x86 が ax(16bit) → eax(32bit) と拡張したように 各 float レジスタの後ろ側を拡張すればよかったのですが、V8 との互換性を重視したため、float レジスタが 64本に増やした(ような)イメージで拡張してしまったのです。
実際には、レジスタを指定するフィールドが 5 ビットなので float 演算では拡張された 32 本にはアクセスできず、double 以上でのみアクセス可能なのです。
ただし、命令のエンコーディングと対応するレジスタの関係が奇々怪々で
ビット表現 00000 00001 00010 00011 000100
float演算 f0 f1 f2 f3 f4
double演算 f0&f1 f32&f33 f2&f3 f34&f35 f4&f5
なんとも不可思議ですね。
PA-RISC にも 32本の 64-bit FP レジスタを 2本束ねて 16本の128-bit FP を作る機能がありますが、逆に 64-bit FP レジスタを上下で分割して 64 本の 32-bit FP レジスタを作っています。
こちらもインデックスに使えるフィールドは 5 ビットなのですが、float 演算に上半分を使う・下半分を使うという指定を付けることで 64本全部使うことが可能です。レジスタ間の直交性には欠けるのですが、、、
<余談>
MIPS は 1 CPU に 4 つまで FPU を載せられる命令セットになっています。1 FPU で 32本のレジスタが持てるので、最大 32 ×4 で 128 レジスタですね。
# でも FPU を 2 つ以上載せた実装を見たことがない。
</余談>
> とか、何とかならんかと思います。
> (過去の資産に頼っているようにも見えるし。)
なんとも ならんですよ。
ソフトはハードよりも「固い」のですから。
コンタミは発見の母