Функция принимает переменный список зависимостей для делегирования директиве препроцессора OpenMP. Список переменных известен во время компиляции. Он расширяется во время выполнения, что не помогает на этапе предварительной обработки. Любые предложения / решения, как это можно сделать? Вот пример того, чего я хочу достичь:
void dependencies(int count, ...) {
va_list args;
va_start(args, count);
int* arr[count]; // an array of pointers to the dependencies
int start[count]; // starting element of the array
int end[count]; // ending element of the array
int direction[count]; // direction of dependency
for (int i = 0; i < count; ++i) {
arr[i] = va_arg(args, int*);
start[i] = va_arg(args, int);
end[i] = va_arg(args, int);
direction[i] = va_arg(args, int);
}
va_end(args);
// repeat count number of times while respecting the input params
#pragma omp task depend(direction_:arr_[start_:end_])
}
// for example
int a[3];
int b[5];
dependencies(2, a, 0, 3, inout, b, 0, 5, out);
// should yield
#pragma omp task depend(inout:a[0:3]) depend(out:b[0:5])
p.s. Я добавляю Boost в список тегов, потому что считаю, что что-то можно сделать с помощью функции Boost Preprocessor. Я не смог найти для этого полезную ссылку.