Как мне использовать меньше частных предложений для задач OpenMP?C++

Программы на C++. Форум разработчиков
Anonymous
 Как мне использовать меньше частных предложений для задач OpenMP?

Сообщение Anonymous »

Я сейчас изучаю API задач OpenMP, но не понимаю, как использовать предложение Private при создании задач, чтобы потоки имели независимые копии переменной, объявленной вне #pragma omp Разделы
Рассмотрим приведенный ниже код:

Код: Выделить всё

#include
#include

int main(){

#pragma omp parallel num_threads(4)
{
int tid;
#pragma omp single private(tid)
{

tid = omp_get_thread_num();
printf("[A from thread %d] ", tid);

#pragma omp task private(tid)
{
tid = omp_get_thread_num();
printf("[race from thread %d] ", tid);
}

#pragma omp task private(tid)
{
tid = omp_get_thread_num();
printf("[car from thread %d] ",tid);
}
}
}
return 0;
}
Предполагается, что весь этот код создает параллельный раздел с пулом из 4 потоков, и каждому потоку из пула назначается одна или несколько задач, объявленных в #pragma omp Task.< /p>
Последовательная версия этой программы должна просто печатать гоночную машину, но поскольку я хочу знать, какой поток из пула печатает какое слово, я заключаю квадратные скобки каждое слово с номером темы.
Изображение

Мой вопрос: я объявляю переменную int tid в начале программы. Я хочу быть уверенным, что каждый поток, выполняющий задачу, имеет свою собственную копию tid, чтобы эти копии не подвергались условиям гонки.
Итак, чтобы сделать это , я разместил повторяющееся предложение Private(tid) в нескольких местах. Есть ли способ уменьшить повторение кода?

Подробнее здесь: https://stackoverflow.com/questions/790 ... enmp-tasks

Вернуться в «C++»