Некоторые методы повышения гранулярности параллельных вычислений:
- Декомпозиция. 3 Задача разбивается на порции, которые можно выполнить параллельно. 3 Есть два способа декомпозиции: на порции разбиваются все функции, которые нужно выполнить, или все данные, которые нужно обработать или получить. 3
- Балансировка. 3 Подразумевает равномерную загрузку процессоров при выполнении задач. 3 Для этого нужно знать время выполнения каждой итерации и распределить их так, чтобы каждый процессор был загружен примерно равномерно. 3 Если время выполнения итерации изменяется по предсказуемому закону, это можно сделать статически, то есть указать распределение нагрузки на этапе компиляции программы. 3 Если время изменяется по случайному закону, например, зависит от данных, которые рассчитываются, распределение нагрузки нужно выполнять динамически, то есть во время выполнения программы. 3
- Определение минимального блока, который имеет смысл выполнять параллельно. 3 Для этого после определения предполагаемых параллельных участков нужно провести вычислительный эксперимент по определению времени выполнения этого участка в последовательном и параллельном режиме. 3 Минимальный размер блока определяется значением, при котором достигается ожидаемое ускорение. 3
Оптимальная производительность достигается между двумя крайностями: мелкозернистым и крупнозернистым параллелизмом. 4 Поиск наилучшего размера зерна зависит от ряда факторов и сильно варьируется от задачи к задаче. 4