为什么openmp会在块块中包含单个块时发出警告

时间:2012-02-13 16:34:43

标签: c openmp

我有一个像这样的

部分块中的单个块
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

int main (int argc, char *argv[]) 
{

int nthreads, tid;

/* Fork a team of threads giving them their own copies of variables */
#pragma omp parallel private(tid) 
{

#pragma omp sections
{


#pragma omp section
{
printf("First section %d \n" , tid);
}

#pragma omp section
{


#pragma omp single
{
printf("Second Section block %d \n" , tid);
}

}

}

}  /* All threads join master thread and disband */

printf("Outside parallel block \n");


}

编译此代码时,编译器会发出以下警告

工作共享区域可能不会紧密嵌套在工作共享,关键,有序或主区域内

为什么?

1 个答案:

答案 0 :(得分:3)

它会给你这个警告,因为你有一个嵌套在openmp区域区域内的openmp单区域,而没有嵌套在它们之间的openmp平行区域。

这被称为紧密嵌套的区域。

在C中,工作共享结构用于,部分和单个。

有关详细信息,请参阅OpenMP Specification或查看Intel's Documentation on Improper nesting of OpenMP* constructs

为了让代码干净利落,请尝试将#pragma omp sections替换为#pragma omp parallel sections#pragma omp sections#pragma omp parallel括起来。

有关更多信息和示例,请参阅Guide into OpenMP: Easy multithreading programming for C++