アートのJava並行プログラミング(5)並べ替え

並行プログラミング - 並べ替え

プログラムを実行すると、パフォーマンスを向上させるためには、多くの場合、コンパイラやプロセッサの命令が並べ替えない持っています。
(1)並べ替えコンパイラの最適化
コンパイラは、シングルスレッドのプログラムの前提の意味を変えない文の実行順序並べ替えることができます
(2)ILPの並べ替えを
現代のプロセッサの命令レベル並列性の手法は、実行される命令の複数の重複します。データ依存性が存在しない場合、プロセッサは、ステートメントに対応する機械語命令の順序変更することができる
(3)メモリシステムを並べ替えを
ロードおよびストア動作が順序外で実行される可能性が高いように見えることができるキャッシュおよび読み取り/書き込みバッファ、使用プロセッサので
ここに画像を挿入説明
並べ替えマルチスレッド・プログラムメモリ可視性の問題をもたらす可能性があります。一貫性のあるメモリ・プログラマを確保するために可視性を提供並べ替えコンパイラやプロセッサの禁止特定のタイプ。
JMMの注目仕分けルールをコンパイルするコンパイラのコンパイラの特定のタイプは、ソート(すべてのコンパイラは禁止並べ替えを落胆していない)の非常に考えて禁止しています。
プロセッサを並べ替えるために、ルールを並べ替えるプロセッサJMMはJavaコンパイラは、並べ替えによって、プロセッサ・メモリ・バリア命令の特定のタイプを禁止する、再度挿入されたメモリバリア命令の特定のタイプの命令シーケンスを生成主張します。

メモリバリア

バリアタイプ 命令の種類 説明
LoadLoad障壁 LOAD1; LoadLoad、LOAD2 データを確実にLOAD1 LOAD2は、ロードされたすべての後続のロード命令のロード前に
StoreStore障壁 Store1; StoreStore; Store2 前Store2及びすべての後続のストア命令に他のプロセッサに対して可視Store1(リフレッシュメモリ)を確保するために、データストレージ
LoadStore障壁 LOAD1; LoadStore; Store2 LOAD1はStore2データのローディングを確実にし、すべての後続の命令を格納するメモリにフラッシュされる塩漬け
StoreLoad障壁 Store1、大きな負荷、LOAD2 Store1は、データを確実に最初LOAD2にロードされ、他のプロセッサへのすべての後続のロード命令である(リフレッシュメモリを参照)見えるようになります。バリア後のメモリアクセス命令の実行前に、すべてのメモリアクセス命令(ロードおよびストア命令)StoreLoad障壁ます完了する前にバリアた後、

StoreLoad障壁「万能」の障壁である、それはまた、他の三つの障壁の効果があります。障壁のための最も近代的なマルチプロセッサのサポート。現在のプロセッサは、一般的にリフレッシュメモリ(バッファフルフラッシュ)に、バッファ内のすべてのデータを書きたいので、バリアオーバーヘッドの実装は、非常に高価になるだろう

公開された24元の記事 ウォンの賞賛1 ビュー540

おすすめ

転載: blog.csdn.net/qq_45366515/article/details/105126181