HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

バイナリ翻訳とその結果について

On Binary Translation and Its Consequences (chipsandcheese.com)

12 pointsby matt_d1 コメント

要約

この記事では、PC市場におけるx86-64バイナリをaarch64(ARM64)に翻訳する技術、特にWindows 11の新しいバイナリ翻訳エンジン「Prism」に焦点を当てています。バイナリ翻訳はパフォーマンスの低下を伴いますが、Qualcommの最新CPUではその影響が軽減される傾向にあることが、Geekbench 7のベンチマーク結果から示されています。

全文翻訳

バイナリ翻訳とその結果 Chester Lam著 2026年9月10日 1924 共有 PC市場は、CPUデザイナーにとって最も厳しい競争分野の一つです。PCセグメントの消費者は、幅広いアプリケーションで高いパフォーマンスを期待しており、デバイスが制約された、キュレーションされた一連の使用例を超えて機能することを当然のことと考えています。Microsoft自身のSurface RTは、PCユーザーがWindowsで動作することを期待するプログラムを実行できなかったため、10年以上前に顕著な失敗をしました。Qualcommなどからの最近の64ビットArmコアは、PCのパフォーマンス要件を満たすのに十分高速ですが、ソフトウェアの互換性はより困難な障害となります。PCソフトウェアは伝統的にx86-64向けに構築されています。開発者が64ビットArm(aarch64)バージョンのプログラムを提供するようになるのは、遅く、段階的なプロセスです。一部のプログラムは、もはやアクティブに開発されておらず、バイナリ形式でのみ配布されていたため、aarch64ポートが得られない可能性があります。したがって、ArmのPC市場でのチャンスは、x86-64バイナリがaarch64ホストでシームレスに実行されることを保証するためのMicrosoftの取り組みにかかっています。 Windows 11の最新のバイナリ翻訳エンジンであるPrismは、x86-64命令をaarch64命令に翻訳することでこれを実現します。バイナリ翻訳は、x86-64命令がaarch64命令に単純にマッピングされない場合があるため、困難です。また、プログラムの起動遅延を最小限に抑え、翻訳に過剰なCPU時間を消費しないように、翻訳は高速である必要があります。これらすべてが、バイナリ翻訳は同等のネイティブコードを実行するのと比較してパフォーマンスのペナルティを伴うことを意味します。 ここでは、Geekbench 7を使用してそのペナルティがどのようなものになるかを確認します。Geekbench 7にはaarch64版とx86-64版の両方があり、バイナリ翻訳を介して実行した場合のパフォーマンスとネイティブaarch64パフォーマンスを比較する機会を提供します。John Poole(Primate Labsの創設者、Geekbenchのクリエイター)がプロキーを提供してくれたので、個々のワークロードをプロファイルできます。もちろん、1つのベンチマークスイートでは、幅広いアプリケーションの動作を反映することはできませんが、これは良い出発点だと考えています。ハードウェアについては、AsusからサンプリングされたAsus Zenbook A16ラップトップのSnapdragon X2 Elite Extreme X2E-96-100と、Microsoft Azureで利用可能なArmインスタンスでテストしています。 Geekbench 7命令の特性 Geekbench 6と同様に、Geekbench 7には、利用可能な場合にベクトル拡張機能を利用するいくつかのワークロードがあります。このスイートは、高いIPC、計算バウンドなワークロードを重視しています。IntelのSoftware Development Emulator(SDE)を使用してHaswellの機能セットを公開するように設定してワークロードを実行すると、ワークロードの半分以上がAVXと256ビットベクトル幅を使用していることがわかります。ワークロードではなく、Geekbenchのテストハーネスからカウントされる命令の大部分が来るように、各ワークロードを200回反復して実行しています。 200回の反復で、各ワークロードは約数兆命令を実行します。さまざまなaarch64コアからのパフォーマンスカウンターデータは、Geekbench 7のネイティブaarch64バイナリを実行した場合、例外はありますが、命令数はほぼ同等であることを示しています。Qualcommのコアは、多くのテストでNeoverse N1およびN2よりも高いリタイア命令数を報告しており、これはハードウェアパフォーマンス監視に何らかの不正確さがある可能性を示唆しています。 バイナリ翻訳でGeekbench 7のx86-64バージョンを実行すると、PDFビューアーを除いて、全体的に命令数が劇的に増加します。一般的に、Geekbench 7のワークロードは、バイナリ翻訳を介して実行する場合、x86-64命令よりも約2倍のaarch64命令を実行します。 Microsoftは、バイナリ翻訳がすべてのaarch64 CPUで同じように機能するわけではないと示唆しています。異なるCPUは異なる命令セット拡張機能をサポートしており、その一部はPrismがx86-64命令をaarch64命令にさらに密接にマッピングできるようにする可能性があります。aarch64 CPUはまた、ISAが要求するもの以上の保証を提供できる可能性があり、例えばaarch64では1つのコアがプログラム順序外の別のコアからのストアを観測できる場合でも、ストア順序を維持するなどです。 Prismは、Qualcomm Snapdragonプロセッサ向けに特別に最適化およびチューニングされています。Prism内の一部のパフォーマンス機能は、Snapdragon Xシリーズのみで利用可能なハードウェア機能を必要としますが、PrismはWindows 11 24H2を搭載したすべてのサポートされているWindows 11 on Armデバイスで利用可能です。 https://learn.microsoft.com/en-us/windows/arm/apps-on-arm-x86-emulation PrismがQualcommのコア向けに特別に最適化されている場合でも、命令数という点では違いはありません。テストした中で最も古いコアであるAmpere AltraのNeoverse N1では、パフォーマンスカウンターは実行命令数で非常に類似した結果を示しています。 X軸は実行命令数(兆単位) 同様の命令数でも、もちろん大きな違いを隠すことができます。最終的に重要なのはパフォーマンスであり、それはコアアーキテクチャと生成される命令の性質の両方に影響されます。 スコアへの影響 Geekbench 7のスコアは、バイナリ翻訳による厳しいペナルティを示しています。Qualcommのコアを含むすべてのコアで、数世代分のパフォーマンス低下が見られます。しかし、Snapdragon X2 Eliteのコアは、Neoverse N1およびN2よりもはるかに高いベースラインパフォーマンスを持っています。Snapdragon X2 Eliteは、「パフォーマンス」コアの6コアクラスターと、「プライム」コアの2つの6コアクラスターを備えています。「パフォーマンス」コアは6ワイドで、3.6 GHzで動作します。これらは他のチップの効率コアと同じ役割を果たすため、簡単のためEコアと呼びます。「プライム」コアは9ワイドで、5 GHzで動作します。これらは最高のパフォーマンスを目指しているため、Pコアと呼びます。 QualcommのEコアは、バイナリ翻訳のペナルティを考慮しても、Neoverse N1を上回っています。PコアもNeoverse N2に対して同様です。非常に高いクロックスピードで動作する、はるかに広いコアに対して、バイナリ翻訳のペナルティがあっても異論を唱える余地はほとんどありません。 Qualcommのコアは、バイナリ翻訳によるペナルティもわずかに低くなっています。これがQualcomm固有のPrismの最適化によるものなのか、それともQualcommのコアがはるかに高いスループットを持っているためなのかは判断が難しいです。バイナリ翻訳による命令数の増加は、ClaudeのCコンパイラ(CCC)をいじっていた頃を思い出させます。CCCの場合、クリティカルパスから外れた多くの追加命令が生成され、アウトオブオーダーCPUはしばしばそれを吸収できます。最近の高性能コアは通常、コア幅のほとんどを使用していないため、追加のコア幅は命令数の増加をある程度緩和できます。しかし、Qualcommの4ワイドEコアが5ワイドのNeoverse N2よりも軽いペナルティで済んでいることを考えると、ここではそうではないかもしれません。 個々のワークロードは、バイナリ翻訳で実行した場合、さまざまな程度で影響を受けます。ナビゲーションは、分岐予測とバックエンドメモリレイテンシに大きく依存する低IPCワークロードであり、バイナリ翻訳で実行した場合、比較的低いペナルティを受けます。反対に、ビデオプレーヤーはAVX命令を活用する、十分にベクトル化されたワークロードです。このテストでのスコア差は絶対的に大きいです。フォトエディターとフォトライブラリも同様の状況です。 バイナリ翻訳下でのワークロード特性は、ArmのNeoverse N1およびN2ではほとんど同じです。 コアスループット(IPC) パフォーマンスカウンターは、Qualcommのコアが未使用のコア幅を活用することで、バイナリ翻訳のオーバーヘッドに影響を与えていることを示しています。しかし、IPCの増加は命令数オーバーヘッドと比較するとわずかであり、これが大きなバイナリ翻訳ペナルティを説明しています。Snapdragon X2 Elite ExtremeのPコアは、ビデオプレーヤーワークロードで大幅なIPC増加を達成していますが、他の場所での増加は控えめです。 QualcommのEコアも同様の状況ですが、より狭いコアであるため、コア幅をより有効に活用できます。テキスト処理、HDR、ビデオプレーヤーでは、バイナリ翻訳で実行する場合、コアは基本的に4ワイドの幅制限に達しています。しかし、テキスト処理とHDRでQualcommのPコアに見られる控えめなIPC増加は、Eコアを広くしても、ワークロードがすぐに他の制限に達する可能性があるため、あまり効果がないことを示唆しています。 Neoverse N2は、o