2016-07-22 18 views
2

私は人々がこれまでに似たような質問をしてきたことは知っていますが、本当に紛争している情報がたくさんあります。命令セットアーキテクチャ(ISA)と実際のハードウェア実装をはっきりと区別することによって、そうしようとします。まず私の未遂の明確化:intelとamdのISAの相違点は何ですか?

1)は現在intel64およびAMD64 CPUのうちは、とりわけ(そこにあるが、これらは焦点である)

2)ISAは、1つの以上のCPUのバイナリ表現であることを考えます命令は、ISAが実際のハードウェア実装とは完全に別個であることを意味します。

私の質問(複数可):

は、Intel 64およびAMD64のCPU間の差異を異なるまたは拡張x86-64でのISAと関係があるのでしょうか?または、x86-64 ISAのハードウェアの実装方法は異なりますか?または両方?

答えて

4

はい、ISAはドキュメント/仕様であり、ハードウェアではありません。すべてのものを正しく実装することは、x86と似ているものではなく、何かをx86 CPUにするものです。

公式ドキュメント(Intelのマニュアル)へのリンクについては、タグwikiを参照してください。

IntelとAMDのimplementations of the x86 ISA differは主にパフォーマンスが高く、命令セットの拡張がサポートしています。ソフトウェアは、CPUID命令を使用してサポートされているものを照会することができます。

このリンクされた質問には、この質問が尋ねているのと同じものに触れるいくつかの回答があります。ここでの主要な相違の


一つは、インテル、AMD、VIAとさえ互換性を持つようにしようとしないでくださいeach have their own hardware-virtualization extensions。したがって、XenのようなVMでは、これらの拡張機能ごとに別々の "ドライバ"または "バックエンド"コードが必要です。しかし、それらは引き続き拡張であり、ベースラインx86の一部ではありません。

ユーザー空間プログラムで使用するためのSIMD拡張機能は、両方で使用可能になり、しばしば遅れてIntel's efforts to screw over AMD with anti-competitive practicesになります。これは誰にとっても時間を要し、多くの場合、x86エコシステム全体に悪影響を及ぼします(SSSE3はこれまでのソフトウェアのベースラインと見なすことができました)が、インテルの収益に貢献します。ここでの良い例:AMD BulldozerはFMA4をサポートしていますが、Intelは最後に心を変え、HaswellのFMA3を実装しました。 AMDは次のマイクロカード(Piledriver)までこれをサポートしていませんでした。


ISAは、1つの以上のCPU命令のバイナリ表現であることを考えます。

いいえ、ISAはこれ以上です。 Intelのドキュメントがすべてのx86 CPUで保証されているものはすべてISAの一部です。これは、すべての命令の詳細な振る舞いだけでなく、どの制御レジスタが何をしているのか、メモリの順序付けルールなども同様です。基本的には、インテルとAMDが発行したマニュアルの中で、「そのような特定のCPUモデル」に先行していないものはすべてです。

IntelとAMDのシステムプログラミングガイドが、x86の動作方法が異なる場合がいくつかあります。 (また、VIAがx86 CPU用に独自のものを公開している場合)。私はチェックしませんでしたが、私はかなりのユーザー空間がこの問題を抱えていないことを確信しています。違いがある場合、カーネルがそれらを実行する場合にのみ動作する特権命令に制限されています。とにかく、その場合、x86 ISAがIntelとAMDのドキュメントの共通サブセットであると言えるでしょう。


実際のハードウェアが実際に何を見つけるために実験することは、それらを読み取るための代替ドキュメントを理解するのに有用である、ではないことに注意してください。テストしたCPU上で命令がどのように動作するかをコードに依存させたくありません。

しかし、インテルは、既存のWindowsを実行することができないため、実際のソフトウェアで新しいデザインをテストしています。例えばWindows9x doesn't invalidate a TLB entry that could only have been filled speculatively(この例の残りの部分は、その非常に詳細なブログ記事の要約と外挿です)。これは、それが安全であった(そしてその時点でハードウェア上で安全であった)という仮定に基づくパフォーマンスハックか、気付かれていなかったバグでした。その時点でハードウェアをテストすることで検出できなかった可能性があります。

現代のIntelのCPUは投機的なページウォークを行いますが、Haswellの最近の発見とシュートダウンの誤推測でさえ、これが起こらないと想定したコードは引き続き機能します。

プロセッサが実際に起こることはない投機的実行の結果であるプリフェッチのためにとのアクセスに必要な翻訳をキャッシュすることがあります。

は、これは実際のハードウェアが言うISA、より強い順序保証を与える意味します実行されたコードパスに格納されます。

この強力な動作によっては、既知のマイクロアーキテクチャでのみ行うのではなく、間違いがあります。 AMD K8/K10はインテルに似ていますが、Bulldozerファミリは一貫性を保証するための検出+ロールバック機構を持たないと推測しているため、Win9xカーネルコードはそのハードウェアでは安全ではありません。また、Intelの将来のハードウェアは、検出+ロールバックのメカニズムも廃止する可能性があります。

TL:DR:すべてのuarchesは、x86 ISAが言うものを実装していますが、いくつかはより強い保証を提供します。あなたがMicrosoftほどの大きさであれば、IntelとAMDは、コードが依存する非ISA仕様の動作を再現するCPUを設計します。少なくともソフトウェアが古くなるまで。将来のIntelのuarchesがロールバックメカニズムを維持するという保証はありません。


異なる例:ゼロの入力にbsf instructionは未定義その出力を残します。しかし、特定のCPUの場合、出力をゼロに設定するなどの動作パターンがあります(Intel Merom(Core2Duo)でテストしたときの実際の動作)。間違いなくランダムなビットパターンを意味するわけではありません。入力依存関係として出力レジスタの古い値を追跡しないと、アウトオブオーダー実行では実際には実際には予測できないかもしれません。 (多分そうであるかもしれませんが、それはthe popcnt/lzcnt/tzcnt false dependency in later uarches came from!です)

これはおそらく、この動作に依存するコードを壊すのを避けるためです。

+0

あなたの投稿と他のリンクに加えて、次のリンクがあります:http://stackoverflow.com/questions/29833938/what-is-the-compatible-subset-of-intels-and-amds-x86-64 -implementations?rq = 1本当にintel64とamd64 ISAsが95%同じで、わずかな違いと拡張がそれぞれに追加されていると結論付けるのは正しいですか? – Jason

+0

@Jason:はい、絶対に。 99%以上は同じだと思います。 Intel64とAMD64の同じプログラムの異なるビルドを出荷する人はいません。例えばLinuxディストリビューションでも同じカーネルを使用しています。 「汎用」カーネルと「低レイテンシ」カーネルですが、インテルとAMDの違いはありません。 –

+1

@ Jason:ISAが紙に書いていることと、HWデザイナーが実際のCPUに実装することを保証するものとの違いを示す例で更新されています。 –

関連する問題