Моя программа должна выполнить некоторые тяжелые вычисления во всех виджетах в Box . Расчеты повторяются заметное количество раз обработки множественными вариациями < /em> каждого виджета. Вариация: < /li>
< /ol>
Код: Выделить всё
#pragma omp parallel for schedule(dynamic)
for (int i = 0; i < box.size(); i++) {
process(base[i]);
}
< /code>
Обработка всех последующих вариантов каждого виджета: < /li>
< /ol>
/* Older OpenMP didn's support nested loops */
#pragma omp parallel for schedule(dynamic)
for (long l = 0; l < box.size() * nVariations; l++) {
int i = l % box.size();
int variation = l / box.size();
process(widgets[i][variation]);
}
Это работает, но является неоптимальным, потому что второй цикл не начинается до тех пор, пока первый не будет завершен, что означает, что ядра обработки недостаточно используются, в то время как последние виджеты все еще проходят через первый цикл. Один, так что каждый виджет может (в зависимости от процессора) продолжать обрабатывать, как только его базовый вариация будет рассчитываться, но не раньше?>
Подробнее здесь:
https://stackoverflow.com/questions/797 ... rallelized