У меня есть такой сценарий:
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
for (k = 0; k < x; k++)
{
val = 2*i + j + 4*k
if (val != 0)
{
for(t = 0; t < l; t++)
{
someFunction((i + t) + someFunction(j + t) + k*t)
}
}
}
}
}
Учитывая, что это блок A, теперь у меня есть еще два похожих блока в моем коде. Я хочу разместить их параллельно, поэтому я использовал прагмы OpenMP. Однако я не могу распараллелить это, потому что я немного запутался в том, какие переменные будут общими и частными в этом случае. Если бы вызов функции во внутреннем цикле был операцией типа sum + = x, то я мог бы добавить предложение сокращения. В общем, как можно подойти к распараллеливанию кода с помощью OpenMP, когда у нас есть вложенный цикл for, а затем другой внутренний цикл for, выполняющий основную операцию. Я попытался объявить параллельную область, а затем просто поставить прагму for перед блоками, но определенно мне не хватает точки!
Спасибо, Саян