汎用レジスターを増量する「APX」
Intel APX(Advanced Performance Extensions)は、X86-Sと異なり提案ではなく、将来実装することが明らかにされている。こちらの基本的なアイディアは「64bit環境で利用できる汎用レジスターの数を増やすことで、より効率的にプログラムを実行できるようにしよう」というものだ。
もともとx64(というよりx86-64)になった時、それまで8個だった汎用レジスターが16個に増えている。もっとも8086由来の8個の汎用レジスターのうち、プログラムからある程度自由に使えるレジスターは実質的には4つ(AX/CX/DX/BX)しかなかったので、汎用レジスターが16個に増えたことでプログラムから自由に使えるレジスターは12個になった計算で、3倍に増えたことでこれまでスタックしてカバーしていたレジスター不足の状況が大幅に緩和されることになった。
これに加え、新しくNDD(New Data Destination)を利用した3オペランド命令も定義されることになった。NDDとはなにか? というと、これまでx86の命令セットは基本2オペランドだった。例えば加算(ADD)命令の場合、従来は以下のフォーマットになっていた。
ADD reg1, reg2
この場合の処理は以下の計算式になる。
reg1 = reg1 + reg2
つまりレジスターreg1の内容とレジスターreg2の内容を加算して、その結果をreg1に上書きする格好だ。この時点で、元のreg1の内容は失われる格好になる。これに対してNDDを利用した3オペランド命令では以下のようになる。
ADD reg1, reg2, reg3
処理は以下の計算式になる。
reg1 = reg2 + reg3
今度はレジスターreg2とreg3の内容を加算し、その結果をreg1に保存する。つまりADDを行なってもreg2の内容が上書きされることはなくなった。
もともとx86でこの3オペランド命令がサポートされなかった理由は、8086でレジスターの数を節約するためである。当時の回路規模では、レジスターを多数実装するとそれだけでトランジスタ数が大きく増えてしまい不経済だったからだ。
したがって、仮に命令を実行した後でも元のレジスターの内容を保存しておきたい場合は、あらかじめスタックなどにその値を格納しておいてから命令を実行し、その後スタックから復帰させるという方法が用いられていた。
このあたりはx64の実装で利用できるレジスターの数が増えたことでだいぶ緩和された(スタックに格納しなくても、別の汎用レジスターに格納できる場合が増えた)が、どうせレジスターにコピーするくらいなら最初から3オペランド命令にした方が無駄にレジスター間コピーをする手間が省けて楽である。そこで汎用レジスター数の増加と併せて、この3オペランド命令のサポートが追加された格好だ。
ただこれ、既存のx86/x64とはまるで互換性がない。そこでこの3オペランド命令に関しては、REX2という新しい命令Prefixが付くことになった。もともとx86では、命令Prefixと呼ばれる拡張フォーマットがサポートされている。
例えば80386の場合、0x41では16bitのINC(インクリメント:1加算する)命令だが、0x66 0x41では32bit命令のINCになる。0x41はINCのオペコード(命令を示す値)だが、0x66がOperand Size Prefixで、この場合は32bitのINC命令を実行するようになるというわけだ。
ほかにもAddress Size PrefixやSegment Size Prefix、Repeat Prefix、REX Prefix、VEX Prefixなどがある。このうちREX Prefixはx64に合わせて導入されたもので、これが冒頭に付くと続く命令は64bitとして扱うというものだが、今回はREX2という新しいプレフィックスが用意された格好だ。
余談だが、REX Prefixは0x40~0x47を利用する。この値、オペコードとしては16bitのINC命令であった。つまり64bit拡張を行なう際に16bitのINC命令を潰した格好だ。同様にREX2 Prefixは0xD5を利用するが、これは16bitのAAD(0xD5 0x0A)ないしAAX(0xD5)で使われていたオペコードで、これを潰してREX2に割り当てた格好になる。
この連載の記事
-
第797回
PC
わずか2年で完成させた韓国FuriosaAIのAIアクセラレーターRNGD Hot Chips 2024で注目を浴びたオモシロCPU -
第796回
PC
Metaが自社開発したAI推論用アクセラレーターMTIA v2 Hot Chips 2024で注目を浴びたオモシロCPU -
第795回
デジタル
AI性能を引き上げるInstinct MI325XとPensando Salina 400/Pollara 400がサーバーにインパクトをもたらす AMD CPUロードマップ -
第794回
デジタル
第5世代EPYCはMRDIMMをサポートしている? AMD CPUロードマップ -
第793回
PC
5nmの限界に早くもたどり着いてしまったWSE-3 Hot Chips 2024で注目を浴びたオモシロCPU -
第792回
PC
大型言語モデルに全振りしたSambaNovaのAIプロセッサーSC40L Hot Chips 2024で注目を浴びたオモシロCPU -
第791回
PC
妙に性能のバランスが悪いマイクロソフトのAI特化型チップMaia 100 Hot Chips 2024で注目を浴びたオモシロCPU -
第790回
PC
AI推論用アクセラレーターを搭載するIBMのTelum II Hot Chips 2024で注目を浴びたオモシロCPU -
第789回
PC
切り捨てられた部門が再始動して作り上げたAmpereOne Hot Chips 2024で注目を浴びたオモシロCPU -
第788回
PC
Meteor Lakeを凌駕する性能のQualcomm「Oryon」 Hot Chips 2024で注目を浴びたオモシロCPU -
第787回
PC
いまだに解決しないRaptor Lake故障問題の現状 インテル CPUロードマップ - この連載の一覧へ