既製のアプリケーションがIntelプロセッサとAMDプロセッサの両方で動作するのはなぜですか?

StackOverflow https://stackoverflow.com/questions/832007

  •  06-07-2019
  •  | 
  •  

質問

私が理解していないことの1つは、Intel CPU用にコンパイルされたコードがAMD CPU上でどのように機能するかです。

私の基本的な理解は、たとえばCコードをコンパイルすると、コンパイラはソースコードを特定のプロセッサ用の命令を持つ機械語に変換するということです。そのため、アプリケーションで使用するプラットフォームに応じて、コンパイラーでコンパイルする必要があります。 AMDとIntelのコンパイラを必要とせず、特定のプロセッサのソフトウェアを購入する必要がないのはなぜですか?

AMDプロセッサとIntelプロセッサは、古いx86命令と互換性があることを知っています。私が知りたいのは、彼らがそれをどのように行うのですか?つまり、AMDやIntelがお互いに電話をかけて企業秘密を互いに話しているわけではないので、互換性のある命令セットを作成するにはどうすればよいですか?

すべての互換性は386命令セットに基づいており、「IF AMD CPU、このELSE IF INTELはそれを行う」などのステートメントの束がありますか?

役に立ちましたか?

解決

AMDとIntel x86およびx86-64 CPUは、ほぼ完全に互換性があります。両方ともx86とx86-64のすべてを実装しています。それぞれに独自の拡張機能(MMXや3DNowなど)がありますが、コンパイラーは、特に指示がない限り、通常それらを使用しません。現在、AMDとIntelは、お互いの拡張機能のほぼすべてをサポートしています。違いを心配する必要があるのは、本当に低レベルのカーネル処理をしているときだけです。

ところで、命令セットは実際には「企業秘密」ではありません。実装は。両社は命令セットに関するドキュメントを作成しているため、それぞれがコピーできます。これはおそらく、互換性のあるチップを製造する企業が増えると、この命令セット用に作成されるソフトウェアが増えるため、より多くの人々がこれらのチップを購入するからです。 x86 / x86-64は基本的にデスクトップの標準アーキテクチャであり、IntelおよびAMDチップを引き続き購入することを保証します。 IntelとAMDの実装は大きく異なり、同じコードを実行するだけです。

他のヒント

実際には、クロスライセンス契約を結んでいます。 AMDが386および486プロセッサの2番目のソースであった90年代に情報と技術革新がIntelからAMDに流れ、Intelがx86-64拡張を採用したときにAMDからIntelに流れました。

これらのプロセッサの命令セットは公開されていることも忘れないでください。通常、1つのベンダーが新しい命令セットを発明し、1世代または2世代後に他のベンダーが互換性のある拡張機能を実装します。そのため、IF 386ではなく.... IF SSE4 IS SUPPORTEDに沿って、特定のベンダーに関係なく何かがあります。

どちらのベンダーも同じ命令セットを実装しているため、コンパイルされたコードがマシン命令に変換されると、両方のチップで動作します。ただし、SSEなど、ベンダーに固有の特別な命令セットがいくつかあります。アプリケーションのパフォーマンスを改善したい場合は、実行時にこれらの機能を使用できるようにチェックすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top