0

指示が与えられた:

ADD EAX, 4

x86アセンブリP2+では、目標が実行速度であり、コードサイズが無関係である場合、これをADD EAX, imm32(opコード05)または(opコード83/0)としてエンコードする方がよいでしょうか。ADD r/m32, imm8

この場合、EAXはポインタであるため、ADD AL, imm8実行可能ではないことに注意してください。

オプション2(オペコード83/0)を使用すると、コードサイズが小さくなりますが、私の理解が限られているため、オプション1と同様に、短くてもパイプラインが実行されない場合があります。

4

2 に答える 2

1

1 つの特定の CPU (「P2+」だけでなく「Intel Pentium II、モデル 2」など) 用に最適化していない場合は、推測してください。どのように推測しても、一部の CPU は高速で、一部の CPU は低速で​​ある可能性があります (ただし、ほとんどの CPU ではまったく違いはないと思います)。

特定の 1 つの CPU 向けに最適化する場合は、推測してください。別の方法は、使用する予定の正確な条件下でプロファイルを作成し、2 日後にコードを変更する必要があり、プロファイリングで 8 時間を浪費したことに気付くことです。

ついに; コード オプティマイザを作成している場合 (たとえば、コンパイラ バックエンドまたは最適化アセンブラの一部として)、推測してみてください - これよりもはるかに重要なことを心配する必要があります。別の方法は、約 50 台の異なるコンピューターを取得し、それらすべてでさまざまな命令シーケンスをプロファイリングすることです。その結果を使用して、さまざまなケースのルールを作成します。

于 2012-11-15T02:24:13.290 に答える
1

短い形式の 83 /0 を選択します。コード密度が向上します。つまり、多くのプロセッサでパフォーマンスと消費電力が改善される可能性がわずかにあります。ファットな即値をエンコードするメリットはありません。

最新の x86 プロセッサの命令キャッシュサイズは少なくとも 32KBです。Steenkisteによる論文「The Impact of Code Density on Instruction Cache Performance」を参照してください。申し訳ありませんが、その無料リンクが見つからないようです。

本当の潜在的な勝利は、タイトなループで実行される高密度のコードです。ループが十分に狭い場合、最新のプロセッサは、命令を一度だけフェッチしてデコードし、パイプライン自体の内部バッファリングから小さなループを実行するショートカットを取ることができます。データハザードなどによってループのパフォーマンスが制限されている場合でも、これらのトリックによって消費電力が削減されます。

于 2012-11-15T05:59:50.520 に答える