6

具体的には、「ロード前に操作を注文することはできません」または「書き込み後に操作を注文することはできません」などのフレーズの平易な英語の説明を探しています。 「再注文」するには?

4

2 に答える 2

3

異なる命令は、プロセッサの異なる部分を使用します。最新のスーパースカラー プロセッサは、異なるリソースを使用する限り、複数の命令を同時に実行できます (単一のスレッドから、マルチコアについて言及しているわけではありません)。そのため、CPU は実際には命令ストリーム内で、現在の命令と同時に処理を開始できる命令を探します (パイプライン処理と分岐予測により、命令は実行前にかなりの時間デコードされます。これにより、このように見えます)。 -先に可能)。

CPU はデータの依存関係を慎重に尊重します。つまり、ある命令が別の命令の結果を使用する場合、それらは正しい順序で実行されます。しかし、たとえば、2 つの命令が 2 つの異なるメモリ位置に書き込み、整数除算ユニットが使用可能になるのを待っているために最初の命令が開始できない場合、「後の」命令からのメモリ書き込みが実際には最初に発生する可能性があります。

これは、他のスレッドがそれらのメモリ位置を見ているときに重要になります。そのため、命令セットにはメモリ バリアと呼ばれるフラグが用意されており、データの依存関係がなくても、パイプラインの後の命令が前の命令を待つ必要があることを CPU に伝えます。C++11 メモリ モデルは、コンパイラにこれらのフラグを挿入させるために、ソース コードがどのように見える必要があるかを定義します。

于 2013-07-14T04:58:06.647 に答える
1

これは、C++ 標準の第 1 節で説明されています。1.9以降だと思います。

于 2013-07-14T04:50:51.410 に答える