OpenMP* 構造の不適切な入れ子

2 つの OpenMP* 構造が不適切 (動的) に入れ子されています。

OpenMP* 仕様では、OpenMP* 構造を動的に入れ子する方法、 つまり、どの OpenMP* 構造が別の領域の実行中に正規に到達できるかについて、いくつかの制限が課せられます。OpenMP* 並列領域は、互いに入れ子にできますが、いくつか制限があります。一般に、2 つの並列領域は SINGLE、CRITICAL、または MASTER 宣言子により作成された中間単一スレッド領域がある場合のみ、入れ子できます。

正確には、次の制限が適用されます。以下の "ワークシェアリング領域" は、 loop (FOR/DO)、SECTIONS、SINGLE、または WORKSHARE のいずれかを省略した用語です。"隣接に入れ子された領域" とは、新たな並列領域を伴わずに互いに動的に入れ子された領域を意味します。

ID

問題箇所

説明

1

OpenMP* 宣言

外部構造の場所

2

OpenMP* の使用方法に関するエラー

不正に入れ子された構造の場所


int glob;

void work(int i, int j) {
    /* incorrect nesting of regions */
    #pragma omp single
    {
        glob += j;
    }
}

void wrong(int n)
{
    int i;
    #pragma omp parallel for
    for (i = 0; i < n; i++) {
        work(i, 0);
    }
}
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。