Построение директивы препроцессора OpenMP на основе ввода переменной функции - PullRequest
0 голосов
/ 29 апреля 2018

Функция принимает переменный список зависимостей для делегирования директиве препроцессора 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. Я не смог найти для этого полезную ссылку.

...