2

openmp プラグマを理解しようとしていますが、openmp フラッシュ (#pragma omp flush) はキャッシュ ライン フラッシュにつながりますか?

暗黙的なフラッシュの場合、それはどのように変化しますか?

4

1 に答える 1

4

コヒーレントなキャッシュを持つマシン (ほとんどのメインストリーム マシン) を使用している場合、通常、キャッシュ ライン フラッシュは必要なく、フラッシュ ディレクティブがキャッシュに関して明示的な処理を行うことはほとんどありません。コヒーレント システムでは、1 つのコアのキャッシュに書き込まれたものはすべて、他のすべてのコアにすぐに表示されます。

ただし、FLUSH ディレクティブはメモリ バリアまたはフェンスとして機能する可能性があり、レジスタに格納されていた可能性のある値のストア命令を生成するようにコンパイラに強制します。

このメモを含む、ここにディレクティブの適切な説明があります。

Q17: !$omp フラッシュ ディレクティブはキャッシュ コヒーレント システムに必要ですか?

A17: はい、フラッシュ ディレクティブが必要です。その使用例については、OpenMP 仕様を参照してください。このディレクティブは、変数をメモリ システムに書き込み/メモリ システムから読み取る必要があることをコンパイラに指示するために必要です。つまり、変数をコード内のフラッシュ "ステートメント" でローカル CPU レジスタに保持することはできません。

キャッシュ コヒーレンシにより、1 つの CPU がメモリとの間で読み取りまたは書き込み命令を実行すると、システム内の他のすべての CPU がアクセスしたときに、そのメモリ アドレスから同じ値が取得されます。すべてのキャッシュは一貫した値を示します。ただし、OpenMP 標準では、読み取り/書き込み機械語命令を実際に挿入し、それを延期しないようにコンパイラーに指示する方法が必要です。ループ用の効率的な機械語コードを生成する場合、ループ内のレジスターに変数を保持することは非常に一般的です。

非コヒーレント キャッシュを備えたマシンを使用している場合は、おそらくスーパーコンピューティング施設で作業しているため、アーキテクチャとツールセットに精通している地元の専門家に相談する必要があります。

于 2013-10-20T20:49:34.293 に答える