2014-02-01から1ヶ月間の記事一覧
Java 7で追加された java.util.concurrent.Phaser*1 同期プリミティブについてメモ。Phaser(フェイザー)クラスは、Java 1.5からあるCountDownLatchやCyclicBarrierを機能的に包含し、さらに汎用化したスレッド同期プリミティブである。CountDownLatch, Cyc…
OpenMP 3.0以降が提供するロック操作関数では、ロック所有権はスレッドではなく “タスクにより所有” される。一方で、ベース言語が提供するロック操作*1ではロック所有権が “スレッドにより所有” されるため、OpenMPロック操作関数の代替とできないユースケ…
C/C++言語 volatile修飾とOpenMP flush操作の関係についてメモ。要約: OpenMP 2.5以前:volatile変数への読込/書込アクセスは、それぞれ暗黙のOpenMP flush操作を伴う。 OpenMP 3.0以降:volatile変数アクセスはOpenMPメモリモデル(≒Memory Consistency)に…
タイトル通り。OpenMP flush指示文のみ利用では、データ競合(data race)を回避できない。また、OpenMP仕様ではデータ競合発生時の動作を規定せず(unspecified)、ベース言語*1および動作システムの仕様に準じる。OpenMP API Version 4.0仕様*2 1.4 Memory Mod…
OpenMP API仕様バージョンと、C/C++言語向けatomicコンストラクトの制限事項についてメモ。 OpenMP 3.0以前 #pragma omp atomic new-line expression-stmt atomic指示文に続く式 expression-stmt では、スカラ型の左辺値(lvalue)式 x に対する更新操作のみが…