Я пытаюсь изучить концепции OpenMP и наткнулся на случай, который мне трудно понять, как решить эту библиотеку.
Допустим, у нас есть следующая рекурсивная функция
// ...
void recurse(int tmp[], int p, const int size)
{
if (p == size)
{
// Computationally heavy, should be executed in its own "thread"
performTask(tmp); // Note: Only requires read access
}
else
{
for(int i = 0; i < size; i++)
{
// Alter tmp and continue recursion
tmp[p] = i;
recurse(tmp, p+1, size);
}
}
}
// ...
int main(int argc, char * argv[])
{
int tmp[10];
recurse(tmp, 0, 10);
return 0;
}
Как я могу выполнить performTask
параллельно при создании новых структур в главном потоке с использованием OpenMP?
Я знаю, что есть нечто, называемое «задачами», и я думаю, что это то, что я должен использовать здесь, но все, что я придумаю, просто не дает никакого увеличения производительности вообще. Пожалуйста, направьте меня в правильном направлении.
Редактировать: Я сделал пример программы более конкретным для лучшего объяснения.