3.4.2 Распараллеливание оператора цикла Если в параллельной области встретился оператор цикла без
дополнительных указаний, то он будет выполнен всеми нитями текущей
группы, то есть каждая нить выполнит все итерации данного цикла. Для
распределения итераций цикла между различными нитями можно
использовать директиву for. Эта директива относится к следующему за
ней блоку, содержащему оператор for. На языке Сидиректива выглядит следующим образом:
#pragma omp for [опция [[, ] опция …] Рассмотрим опции данной директивы.
private(список)– задает список переменных, для которых
порождается локальная копия в каждой нити; начальное значение
локальных копий переменных из списка не определено.
firstprivate(список) – задаёт список переменных, для которых
порождается локальная копия в каждой нити; локальные копии
переменных инициализируются значениями этих переменных в нити-
мастере.
lastprivate(список) – переменным, перечисленным в списке,
присваивается результат с последнего витка цикла.
reduction(оператор:список) – определяется оператор - операции ( +,
-, *, / и т. п.) или функции, для которых будут вычисляться
соответствующие
частичные
значения
в
параллельных
потоках
последующего
параллельного
структурного
блока;
кроме
того,
определяется список локальных переменных, в котором будут сохраняться
61
соответствующие
частичные
значения;
после
завершения
всех
параллельных процессов частичные значения складываются (вычитаются,
перемножаются и т. п.), и результат сохраняется в одноименной общей
переменной.