У меня есть функция, которая содержит открытую параллелизованную для цикла, которая вызывает обратный вызов на каждой итерации, аналогично этим: < /p>
template
void iterate(const Callback& callback, bool parallel) {
#pragma omp parallel for if(parallel)
for(int i = 0; i < 1000; ++i) {
callback(i);
}
}
< /code>
вызывающий абонент может контролировать, параллелен ли цикл с использованием параллельного аргумента < /code>.
Есть ли способ позволить вызывающему абоненту указать переменные, на которые следует выполнить, например, < /p>
int counter = 0;
#pragma omp ??? reduction(+ : counter)
iterate([&counter](int i) {
counter++;
}, true);
< /code>
, по -видимому, заключается в том, чтобы поместить #pragma omp parallel < /code> вне функции на сайте вызова и #pragma omp для < /code> внутри функции. Но это ограничивает то, как функция может использоваться, и кажется нестандартным.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... a-function