yohhoyの日記

技術的メモをしていきたい日記

OpenMP

OpenMP 5.2仕様リリース

2021年11月 OpenMP 5.2仕様リリース記事 OpenMP ARB Releases OpenMP 5.2 with Improvements and Refinements より抄訳。OpenMP仕様バージョン5.2はOpenMP ARB、主要なコンピュータハードウェア/ソフトウェアベンダのグループ、そしてOpenMPコミュニティの…

OpenMP 最長コンストラクト

OpenMPの最長コンストラクト*1 Target Teams Distribute Parallel Worksharing-Loop SIMD Construct。 // OpenMP 4.0 for C/C++ #pragma omp target teams distribute parallel for simd /*for-loops*/ 関連URL OpenMP 4.0仕様リリース - yohhoyの日記 https…

OpenMP 5.1仕様リリース

2020年11月 OpenMP 5.1仕様リリース記事 OpenMP ARB releases OpenMP 5.1 with Vital Usability Enhancements より抄訳。OpenMP仕様バージョン5.1はOpenMP ARB、主要なコンピュータハードウェア/ソフトウェアベンダのグループ、そしてOpenMPコミュニティの…

OpenMP 5.0仕様リリース

2018年11月 OpenMP 5.0仕様リリース記事 OpenMP 5.0 Is A Major Leap Forward より抄訳。OpenMP仕様バージョン5.0はOpenMP ARB、主要なコンピュータハードウェア/ソフトウェアベンダのグループ、そしてOpenMPコミュニティのユーザによって共同開発されまし…

OpenMP 4.5仕様リリース

2015年11月 OpenMP 4.5仕様リリース記事 OpenMP 4.5 Specs Released より抄訳。たくさんの新機能 デバイスサポートの大幅な改善。OpenMPは非構造化データマッピングと非同期実行のメカニズム、またデバイスメモリ管理のための実行ルーチンを提供するようにな…

criticalコンストラクトへの名前指定

OpenMPのcriticalコンストラクトには、オプションで名前を指定できる。 int acc = 0; #pragma omp parallel for for (int i = 0; i < 10; i++) { #pragma omp critical (acc) acc += func(i); } OpenMPランタイムによる排他制御では、同じ名前を付与したコー…

OpenMP並列forループの中断処理

OpenMPによる並列forループにおいて、該当ループの処理途中で中断する方法について。OpenMPでは並列forループ内からの break は禁止されるため、フラグ変数を用いたループ内処理スキップで代用する。並列リージョンでのフラグ変数アクセスは、全てクリティカ…

OpenMPタスクとロック操作関数

OpenMP 3.0以降が提供するロック操作関数では、ロック所有権はスレッドではなく “タスクにより所有” される。一方で、ベース言語が提供するロック操作*1ではロック所有権が “スレッドにより所有” されるため、OpenMPロック操作関数の代替とできないユースケ…

volatile変数とOpenMP flush操作の短い関係

C/C++言語 volatile修飾とOpenMP flush操作の関係についてメモ。要約: OpenMP 2.5以前:volatile変数への読込/書込アクセスは、それぞれ暗黙のOpenMP flush操作を伴う。 OpenMP 3.0以降:volatile変数アクセスはOpenMPメモリモデル(≒Memory Consistency)に…

OpenMP flush操作はデータ競合を解決しない

タイトル通り。OpenMP flush指示文のみ利用では、データ競合(data race)を回避できない。また、OpenMP仕様ではデータ競合発生時の動作を規定せず(unspecified)、ベース言語*1および動作システムの仕様に準じる。OpenMP API Version 4.0仕様*2 1.4 Memory Mod…

atomicコンストラクトの制限

OpenMP API仕様バージョンと、C/C++言語向けatomicコンストラクトの制限事項についてメモ。 OpenMP 3.0以前 #pragma omp atomic new-line expression-stmt atomic指示文に続く式 expression-stmt では、スカラ型の左辺値(lvalue)式 x に対する更新操作のみが…

OpenMP 2.0とメモリモデルの闇

OpenMPが提供するロック獲得/解放omp_set_lock/omp_unset_lock関数と、OpenMPメモリモデルおよびflush指示文に関するメモ。一見問題がなさそうな下記コードは、OpenMP 2.0以前の仕様に従って厳密に解釈するとプログラマの期待通り動作する保証がない。この…

OpenMPとC++例外の危険な関係

OpenMP並列化領域内からC++例外を送出する場合、例外を送出したスレッドと同一スレッド上で例外catchを行う必要がある。すなわちOpenMPスレッドをまたぐC++例外伝搬は行われず、またOpenMP並列化領域の中から外へC++例外が送出されてはならない。このルール…

OpenMP 4.0仕様リリース

2013年7月 OpenMP 4.0仕様リリース記事 OpenMP 4.0 Specifications Released より抄訳。OpenMP 4.0 APIの新機能は下記を含みます:アクセラレータのサポート。さまざまな種類の計算デバイスをサポートするため、OpenMP 4.0 API仕様の取り組みにおいては全て…

OpenMPのC++言語統合提案

C++1y(C++14)に向けた並列プログラミングモデルについてメモ。(PDF)N3530 Leveraging OpenMP infrastructure for language level parallelisationにて、OpenMP実装インフラをC++言語機能として統合する提案がなされている。初期提案のため骨子のみ。OpenMPは…

STLアルゴリズムのParallel Mode拡張

id:ignisanさんのC++ Advent Calendar 2011 記事で知った gcc Parallel Mode 拡張についてメモ。http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html Runtime Library (libstdc++) An experimental parallel mode has been added. This is a…