9

2 つの変数を交換したいと思います。私は、Read After Write ハザードを有利に使用してパイプラインを介して実行したいと考えています。

パイプライン:

OPERXXXXXX FetchXXXXX DecodeXXXX ExecuteXXX WriteBkXXX
STORE X, Y ---------- ---------- ---------- ----------
STORE Y, X STORE X, Y ---------- ---------- ----------
---------- STORE Y, X STORE X, Y ---------- ----------
---------- ---------- STORE Y, X STORE X, Y ----------
---------- ---------- ---------- STORE Y, X STORE X, Y
---------- ---------- ---------- ---------- STORE Y, X

自動ロックと警告フラグなしでコンパイラにそれを行うように (そして正確に) 指示するにはどうすればよいですか? 文献やキーワードを教えてください。

仕様:

  • -> ターゲット: マルチステーション (4 つ以上) パイプラインをサポートする最新のアーキテクチャ

  • -> これは特定の「問題」とは関係ありません。科学のためだけに。

現在のハードル:

  • データハザードを無視する方法を知っている場合は、共有してください。
4

2 に答える 2

3

Intel の最適化マニュアルの最初の部分を読むことをお勧めします。そうすれば、最新の、順不同の投機的な CPU がアセンブリ言語を尊重していないことに気付くでしょう。パイプラインを有利に操作しますか? このドキュメントに基づいて、私は言います - 忘れてください。

于 2011-12-09T14:45:23.020 に答える
0

これは、対象とする CPU とコンパイラによって異なります。どちらも指定しません。

一般に、CPU は、実際には舞台裏でスーパースカラーであっても、すべてが順番どおりに実行されているように見せるために多大な努力を払います。ハザードを利用しようとするコードは中断しませんが、続行する前にハザードがクリアされるまで CPU が待機するため、実行速度が遅くなります。そうしないと、スーパースカラーの動作が増加するにつれて、ほとんどすべてのコードが将来の世代の CPU で失敗することになります。

一般に、非常に特殊なアーキテクチャを使用していて、実行をアセンブリ レベルで完全に制御できない限り、この考えを実行することはできません。

于 2011-12-09T19:10:09.507 に答える