почему openmp выдает предупреждение, когда отдельный блок заключен в блоке section - PullRequest
1 голос
/ 13 февраля 2012

У меня есть один блок, заключенный в блок секций, подобный этому

#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 Ответ

3 голосов
/ 14 февраля 2012

Это предупреждает вас, потому что у вас есть отдельная область openmp, вложенная в область разделов openmp без параллельной области openmp, вложенной между ними.

Это известно как тесно вложенная область.

В C конструкции с разделением рабочих мест предназначены для разделов и отдельных элементов.

Для получения дополнительной информации см. Спецификацию OpenMP или см. Документация Intel о неправильном вложении конструкций OpenMP * .

Чтобы код был правильно скомпилирован, попробуйте заменить #pragma omp sections на #pragma omp parallel sections или #pragma omp sections с #pragma omp parallel.

См. Руководство по OpenMP: простое многопоточное программирование для C ++ для получения дополнительной информации и примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...