SSブログ

Apple Siliconで動作するエミュレータの常設化? [日常のあれやこれや]

先日M1のFirestormコアはマイコロコードを使っていないと考えた。そしておそらく32ビット命令は実行できない。しかしARM版のWindows10は動く(ただしQEMU上)そうなので、M1ではarm64命令をいちおう全部実行できるようになっているんだろう(QEMUをXcode12ですべてコンパイルしなおしたらわからんか。そうしたんだろうか)。

しかしそのとき考えたように、AppleはコンパイラからCPUからOSから全部取り仕切っているので、ARMの互換性にこだわる必要はない。ARMのライセンスはレベルがいくつかあってその詳細を理解してないんだけど、CPUとしてARMライセンスに依存しないといけない部分が残ってなければ、Appleは自分たちに都合の良いようにするだろう。これまでも後方互換性をあっさり捨ててきた。おかげで何度も泣かされたわけだけど。

昔のPowerPC上の68LC040(浮動小数点ユニットなしの68040)エミュレータから、Rosetta(x86_64上のPowerPC)と、今回のRosetta2(ARM64上のx86_64)でCPU命令のエミュレーションはAppleの十八番(オハコ)になってる。マイクロコードを実装するのに比べたらソフトウェアエミュレータのほうが自由度が高くて複雑さや規模の問題も少ない。マイクロコードで互換性を取るのではなく、エミュレータで吸収する方があとあといいはずである。

エミュレータの実行コードの一番厳しい部分がL1キャッシュに収まってしまえば、もとはバスを隔てたソフトウェアだけど、マイクロコードにせまる効率が出るだろうし、一番内側のループがディスパッチャのバッファに収まれば、実質的に書き換え可能なマイクロコードと言ってもいいくらい(VAX11/780を思い出すな。ブートはまずマイクロコードをロードするところから始まった)。ずっとまえ68020の256バイトしかないキャッシュにFFTのループを僕が詰め込むことができたくらいだから、630エントリ(実行コードで2520バイト分)もあればけっこういろんなことができるはず。

エミュレータのオーバーヘッドを上回る高速化がCPUで可能なら命令セットを変更しても、すなわちARM64のさらなるRISC化か、あるいは逆にAppleが有用と考える命令の追加や置き換えになるけど、Appleなら迷惑のかかる範囲は少ないし、ユーザはむしろ歓迎するだろう。

まあ、もともとARM64はARM32とビットパターンレベルでは互換性がないしARM32にあった条件実行なんかも捨てていて(捨てないと32ビット固定長におさまらなかったらしい)、ARM64だけだと十分筋肉質だと言えるので、x86と違ってサポートする命令を減らしたからと言って面積が減るようなものでもなさそうである。でもエミュレータを単にアーキテクチャの橋渡しとして使い捨てるのではなくて、ハードウェアをサポートするもっとも低レベルのソフトウェア要素にする、というのは十分ありそうな気がする。iMacに32コアなんて話もあるぐらいなので、Firestormコアのパフォーマンスを落とさずにその面積を減らす、というのはばきばきに検討してるはずだと思う(32コアを使い倒せるプログラミングも並大抵じゃない気がするけど)。

なんかこないだから僕はM1のことばかり気にしてるな。酸っぱいはずじゃなかったっけ。
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。