— в конце ветвей может быть выполнена глобальная операция
редукции;
— в каждой ветви могут дополнительно выделяться параллель-
ные циклы.
Никакие другие вырианты иерархии параллелизма не допуска-
ются.
5. При входе в параллельную конструкцию поток управления
разбивается на ряд параллельных потоков, каждый из которых
управляет процессом вычислений на своем процессоре.
6. Все переменные репродуцируются по всем процессорам: в
каждом процессоре появляется локальная переменная того же типа
и с тем же именем; исключением являются специально указанные
"распределенные массивы", способ расположения которых опреде-
ляется соответствующей директивой.
7. Любой оператор присваивания выполняется по правилу
"собственных вычислений": он выполняется тем процессором, на
котором распределена переменная, стоящая в левой части операто-
ра присваивания.
Замечание. Множество задач характеризуется вектором задач
T , компоненты которого T (i) однозначно определяют i-ю задачу.
§ 2. Распределения массивов
Для распределения массивов используется директива
DISTRIBUTE; эта директива может быть размещена в описа-
тельной части программы.
В частности, для распределения одномерного массива по про-
цессорам пишут
CDVM$ DISTRIBUTE <имя массива>,<формат> [ONTO(n)],
где квадратные скобки, как и прежде, означают, что находящееся
в них выражение не является обязательным.
Поле <формат> может принимать одно из следующих значе-
ний:
1. BLOCK — отображения равными блоками,
2. WGT_BLOCK(WB,NWB) — отображение, вообще говоря, нерав-
ными (взвешенными) блоками (см. ниже),
3. * — отображение целым измерением.
Рассмотрим каждый из случаев подробнее.
1. При отображении равными блоками соответствующее изме-
рение массива разбивается на NP равных блоков (где NP — число
163