ДОПАЙП


Параллелизм DOPIPE — это метод выполнения параллелизма на уровне цикла путем конвейерной обработки операторов в цикле. Конвейерный параллелизм может существовать на разных уровнях абстракции, таких как циклы, функции и алгоритмические этапы. Степень параллелизма зависит от способности программистов наилучшим образом использовать эту концепцию. Это также зависит от таких факторов, как выявление и разделение независимых задач и их параллельное выполнение. [1]

Основной целью использования параллелизма на уровне цикла является поиск и разделение последовательных задач программы и преобразование их в параллельные задачи без какой-либо предварительной информации об алгоритме . Части данных, которые повторяются и требуют значительного времени выполнения, являются хорошими кандидатами на параллелизм на уровне цикла . Некоторые распространенные приложения параллелизма на уровне циклов можно найти в математическом анализе, в котором используются многомерные матрицы, которые повторяются во вложенных циклах. [2]

Существуют различные методы распараллеливания, которые используются на основе накладных расходов на хранение данных, степени распараллеливания и зависимостей данных . Некоторые из известных методов: DOALL , DOACROSS и DOPIPE .

DOALL: Этот метод используется там, где мы можем распараллелить каждую итерацию цикла без какого-либо взаимодействия между итерациями. Следовательно, общее время выполнения сокращается с N * T (для последовательного процессора, где T — время выполнения каждой итерации) до всего лишь T (поскольку все N итераций выполняются параллельно).

DOACROSS: этот метод используется везде, где существует вероятность зависимости данных. Следовательно, мы распараллеливаем задачи таким образом, чтобы все независимые от данных задачи выполнялись параллельно, а зависимые — последовательно. Существует определенная степень синхронизации, используемая для синхронизации зависимых задач между параллельными процессорами.

DOPIPE — это метод конвейерного распараллеливания, который используется в программах, где каждый элемент, созданный во время каждой итерации, используется в последующей итерации. В следующем примере показано, как реализовать метод DOPIPE, чтобы сократить общее время выполнения, разбивая задачи внутри цикла и выполняя их конвейерным способом. Разбиение на задачи происходит таким образом, что все зависимости внутри цикла однонаправлены, т.е. следующая итерация не зависит от предыдущей.


Пример DOPIPE