user602774
user602774

Reputation: 1103

why does openmp give warning when single block is enclosed in section block

I have a single block enclosed in a sections block like this

#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");


}

When i compile this code the compiler gives the following warning

work-sharing region may not be closely nested inside of work-sharing, critical, ordered or master region

Why is that ?

Upvotes: 1

Views: 440

Answers (1)

Appleman1234
Appleman1234

Reputation: 16076

It gives you this warning because you have an openmp single region nested inside an openmp sections region without an openmp parallel region nested between them.

This is known as a closely nested region.

In C, the worksharing constructs are for, sections, and single.

For further information see the OpenMP Specification or see Intel's Documentation on Improper nesting of OpenMP* constructs.

In order to have the code compile cleanly, try replacing your #pragma omp sections with #pragma omp parallel sections or enclosing #pragma omp sections with #pragma omp parallel.

See Guide into OpenMP: Easy multithreading programming for C++ for more information and examples.

Upvotes: 3

Related Questions