(1) 可能であるだけでなく、ほとんどすべての世代の x86 プロセッサで文書化されています。8088 に戻って、すべての世代で前進してください。最新のプロセッサは、現在の主流のアプリケーションとオペレーティング システム (Linux を含む)で低速でした。32 ビットから 64 ビットへの移行は役に立ちません。コアが増えてクロック速度が低下すると、さらに悪化します。同じ理由で、これは逆方向にも当てはまります。
(2) バイナリの失敗またはクラッシュを当てにしてください。幸運に恵まれることもありますが、ほとんどの場合、そうではありません。はい、新しい命令があります。それらをサポートすることは、おそらく未定義の命令をトラップし、その命令のソフトウェアエミュレーションを行うことを意味します。最適化は新しい命令を使用できますが、それ以上に、あなたが話していると推測している最適化の大部分は、さまざまなパイプラインが停止しないように命令を並べ替えることに関係しています。x86 ファミリではコアが大きく変わりすぎるため、ある世代のプロセッサでは高速になるように調整しますが、別の世代では遅くなります。AMDは、ソフトウェアが追いついたときに最終的に高速になる新しいプロセッサを発明しようとするのではなく、同じコードをより高速に実行できるようにするため、しばらくの間はうまくいきました。amd と intel の両方が、クラッシュすることなくチップを実行し続けるために苦労しています。
(3) 一般的に、はい。たとえば、gcc はひどいコンパイラです。1 つのサイズですべてに適合するわけではありません。たとえば、gcc 4.x コードは、同じプロセッサの gcc 3.x コードよりも遅くなります (はい、これはすべて主観的なものであり、コンパイルされる特定のアプリケーションに依存します)。私が使用した社内コンパイラは、安価または無料のものよりもはるかに優れていました (ここでは x86 に限定していません)。しかし、彼らは価格の価値がありますか?それが問題です。
一般に、恐るべき新しいプログラミング言語と大量のメモリ、ストレージ、キャッシング層のために、ソフトウェア エンジニアリングのスキルは常に低い状態にあります。つまり、優れた最適化コンパイラーどころか、優れたコンパイラーを作成できるエンジニアのプールが時間とともに減少していることを意味します。これは少なくとも 10 年間続いています。そのため、社内コンパイラでさえ時間の経過とともに劣化しているか、社内ツールの代わりに従業員がオープンソース ツールに取り組んで貢献しているだけです。また、ハードウェア エンジニアが使用するツールも同じ理由で性能が低下しているため、最適化をあまり試みずに、クラッシュせずに実行したいプロセッサを使用できるようになりました。非常に多くのバグとチップのバリエーションがあるため、ほとんどのコンパイラ作業はバグを回避しています。要するに、gcc は単独でコンパイラの世界を破壊しました。
(4) 上記(2)参照。それに賭けないでください。これを実行したいオペレーティング システムは古いプロセッサにはインストールされない可能性が高いため、手間が省けます。Pentium III 用に最適化されたバイナリが Pentium 4 で遅くなったのと同じ理由で、その逆も同様です。マルチコア プロセッサで適切に動作するように記述されたコードは、同じアプリケーションをシングル コア プロセッサ用に最適化した場合よりも、シングル コア プロセッサでの実行が遅くなります。
問題の根本は、x86 命令セットがひどいことです。非常に多くのはるかに優れた命令セットが登場しており、世代ごとに高速化するためにハードウェアのトリックを必要としません。しかし、wintel マシンは 2 つの独占を生み出し、残りは市場に浸透できませんでした。私の友人は、これらの x86 マシンはマイクロコード化されているため、内部の命令セットが実際には見えないことを思い出させてくれます。恐ろしいISAが単なる解釈レイヤーであることにさらに腹を立てます. Javaを使っているようなものです。あなたが質問で概説した問題は、インテルがトップである限り続きます。代替品が独占にならない場合、私たちは、あなたが共通分母の一方または他方である Java モデルに永遠に行き詰まることになります。特定のハードウェアで共通プラットフォームをエミュレートし、