並列プログラミング フレームワークである OpenMP 用の C および C++ の文法規則と構文拡張について説明します。
C.1 表記
文法規則は、非ターミナルの名前に続いてコロン、別の行の置換代替で構成されます。
構文式用語 opt は、置換内で用語が省略可能であることを示します。
構文式 termoptseq は term-seqopt と同等で、次の追加規則があります。
term-seq:
用語
term-seqterm
term-seq,
用語
C.2 ルール
表記は、C 標準のセクション 6.1 で説明されています。 この文法付録では、OpenMP C および C++ ディレクティブの基本言語文法の拡張機能を示します。
/* C++ (ISO/IEC 14882:1998) */
statement-seq:
陳述
openmp-directive
statement-seq ステートメント
statement-seq openmp-directive
/* C90 標準(ISO/IEC 9899:1990)内 */
ステートメントリスト:
陳述
openmp-directive
statement-list ステートメント
statement-list openmp-directive
/* C99 (ISO/IEC 9899:1999) */
block-item:
宣言
陳述
openmp-directive
/* 標準ステートメント */
ステートメント:
openmp-construct
openmp-construct:
parallel-construct
for-construct
sections-construct
single-construct
parallel-for-construct
並列セクション構造
master-construct
critical-construct
atomic-construct
順序付き構造
openmp-directive:
barrier-directive
flush-directive
structured-block:
陳述
parallel-construct:
並列指令構造化ブロック
parallel-directive:
# pragma omp parallel
parallel-clauseoptseqnew-line
並列節:
unique-parallel-clause
data-clause
ユニーク・パラレル・クローズ
if (
表現)
num_threads (
表現)
for-construct:
forディレクティブ反復文
for-directive:
# pragma omp for
for-clauseoptseqnew-line
for-clause:
特有の条件
data-clause
nowait
unique-for-clause:
ordered
schedule (
スケジュールの種類)
schedule (
スケジュールの種類,
表現)
スケジュールの種類:
static
dynamic
guided
runtime
sections-construct:
セクション指示 セクション範囲
sections-ディレクティブ:
# pragma omp sections
セクション条項オプションシーケンス新しい行
sections-clause:
data-clause
nowait
section-scope:
{ section-sequence }
セクションシーケンス:
セクション指示オプション構造化ブロック
セクションシーケンス セクション指令 構造化ブロック
section-directive:
# pragma omp section
new-line
single-construct:
単一指令構造化ブロック
single-directive:
# pragma omp single
単一節オプションシーケンス改行
single-clause:
data-clause
nowait
parallel-for-construct:
parallel-for-directive 反復文
parallel-for-directive:
# pragma omp parallel for
parallel-for-clauseoptseqnew-line
parallel-for-clause:
unique-parallel-clause
特有の条件
data-clause
並列セクション構造:
並列セクション指示 section-scope
parallel-sections-directive:
# pragma omp parallel sections
パラレルセクションズクローズオプトシークニューライン
並列セクション条項:
unique-parallel-clause
data-clause
master-construct:
マスター指令構造化ブロック
マスター-ディレクティブ:
# pragma omp master
new-line
critical-construct:
重要指示構造化ブロック
critical-directive:
# pragma omp critical
地域フレーズオプション改行
地域フレーズ:
(識別子)
バリアー命令:
# pragma omp barrier
new-line
atomic-construct:
アトミック指令式ステートメント
atomic-directive:
# pragma omp atomic
new-line
flush-directive:
# pragma omp flush
flush-varsoptnew-line
フラッシュ変数
(variable-list)
順序構造:
順序付きディレクティブ構造ブロック
ordered-directive:
# pragma omp ordered
new-line
/* 標準宣言 */
宣言:
スレッドプライベート指令
スレッドプライベートディレクティブ:
# pragma omp threadprivate (
variable-list)
new-line
data-clause:
private (
variable-list)
copyprivate (
variable-list)
firstprivate (
variable-list)
lastprivate (
variable-list)
shared (
variable-list)
default ( shared )
default ( none )
reduction (
reduction-operator:
variable-list)
copyin (
variable-list)
reduction-operator:
例: + \* - & ^ | && ||
/* C */
variable-list:
識別子
variable-list,
識別子
/* C++ */
variable-list:
id-expression
variable-list,
id-expression