問題タブ [micro-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
218 参照

x86 - マイクロオペレーションは命令デコード キュー (IDQ) でどのように配置されますか?

しばらく疑問に思っていたことですが、まず最初に、マクロ操作によって生成されたすべての μops がマクロ操作と同じになる可能性があるという仮定がありますrip(IQ にはripfor eachがあると確信しています)。 IFETCH ブロックとデコーダーは、長さ情報に基づいてrip+ マクロ操作のオフセットを簡単に変換できます)。ripIDQ は、SnB の論理コアごとに 32 バイトの 8 行 (最近のマイクロアーキテクチャでは 64 バイトかもしれませんが、私にはわかりません) であり、IDQ の μops の形式について疑問が生じます -- アドレスがあるかどうかμop キャッシュと同様に、 IDQ ラインごとに、jmp命令によって新しいラインが開始されます。どこで、 47ページから私が解釈したものから最適化マニュアルの説明によると、32 バイトにアラインされた領域は 3 つのウェイにまたがることができますが、パイプラインをそのアドレスにステアリングすることによって次の命令ウィンドウのフェッチを再開できるように、最後のウェイはjmpおそらく で終わる必要があります (これはまた、 μop キャッシュを起動するか、従来のデコード パイプラインを起動する必要がある場合があります)。IDQが同じ構造である場合、μopキャッシュウェイをIDQに簡単に移動できます(したがって、IDQは命令ごとではなく、各行の開始時に単一のアドレスを持つことができると思います。行の指示が連続している場合に必要rips および分岐、リターンなどの後の命令は改行になります)。jmpまた、LSD がロックダウンしてループをより効率的に検出できるようになります。たとえば、行の先頭にある 8 つのアドレスをスキャンして、アドレスと同じかどうかを確認するだけでよいからです。しかし、繰り返しになりますが、LSD が正確にどのように実装されているかはわかりません。ソースは、検出可能な最大ループとして 28 μops の値を固定しているようです。

スタック エンジンの複雑さと、同期操作の配置方法もあります。スタック エンジンの microarchitecture.pdf の Agner fog のセクションを読むと、同期 μop が or の前に挿入され、同期必要movaddなることがわかります。そのrspため、元のor (soripの前にどのポートが処理するかに関係なく、RSB 予測を確認するために比較できます。retmovaddrspret、BEU?(*))。また、スタック エンジンはデコーダーと同時に動作し、デコーダーと同時に挿入することをお勧めします。これにより、後で挿入するために命令に沿ってシフトする必要がなくなります。ripROB に発行するときに行の先頭にあるアドレスに関連する sを計算するときに、そのバイトを割り引くようにアロケータに通知するために、同期 op にビット表示も必要です。同期操作の後に命令の新しい行を開始することもできますが、おそらくコストがかかるようです。

このロジックをそのトラックで停止させる何かripは、マクロ操作の長さが長さではないため、行の先頭のアドレスからの行の μop のバイトオフセットから命令を計算できないということです。 μopsの長さと同じです。これは、各 IDQ 行をそれぞれ 1 つのマクロ操作に対応させることで解決できます (行末に同期操作を追加します。つまり、mov+synchop を 1 行に追加し、ret前述の を地形的に下の行にripat を付けます)。各行の先頭)、これは無駄だと思います。私が考えることができる唯一の代替手段は、乱雑に思われるマクロ操作ごとにアドレスをインラインでタグ付けすることです。

これがどのように実装されるかについて、誰かに追加または修正するものはありますか?

(*) これは、分岐の予測ミスがどのように処理されるかという問題に関連していますrip。予測ミスでパイプラインを操縦します。aretが割り当てられる場合、パラメーターの 1 つは、その後の uop の ROB エントリである必要があり、別のパラメーターはrspそれと比較できるようにする必要があります。