Условные операторы.
Обычно в параллельных ЯВУ для векторно-конвейерных вычислительных систем и векторно-параллельных вычислительных систем определены традиционные для последовательных ЯВУ условные конструкции вида
if <E> then <S1>;
if <E> then <S1> else <S2>;
Здесь - условное выражение, - простые или составные операторы.
Если в условных выражениях сравниваются элементы двух соответствующих параллельных массивов, то эти приведенные условные конструкции вызывают параллельное исполнение операторов ,.
Пример 1
Условная конструкция (здесь и далее полагается, что все переменные определены) на языке Actus
if a[10:90] < a[10:90 shift-1] then a[#]:=a[#]+1 else a[#]:=a[#]-1;
вызывает увеличение значений элемента , массива на единицу, если он меньше своего левого соседа; иначе значение элемента уменьшается на единицу. Обработка все элементов , производится параллельно
В параллельных ЯВУ обычно определены также операторы выбора вида
case <CS> of
<L1>: <S1>;
<L2>: <S2>;
...
<LN>: <SN>
end;
Здесь простые или составные операторы.
Пример 2
Рассмотрим фрагмент Actus-программы с оператором выбора
type
colour = (black, white, red, brown, green);
var
flower: array[1:50] of colour;
begin
case flower [1:50] of
white: statement1;
red, green: statement2;
black, brown: statement3
end;
Программа вызывает параллельную обработку всех элементов массива . В зависимости от значений этих элементов параллельно выполняются 1, 2 или 3. Например, если в массиве имеется по 10 элементов со значениями , , , , , то при исполнении программы будет параллельно выполняться десять раз 1, двадцать раз - 2 и двадцать раз - 3 (всего 50!)
Циклические операторы.
В параллельных ЯВУ для векторно-конвейерных вычислительных систем и векторно-параллельных вычислительных систем определены также традиционные операторы цикла вида:
while <E> do <S>;
repeat <S> until <E>;
for <INDEX> := <LOWER> by <INC> to <UPPER> do <S>;
Здесь - условное выражение, - простой или составной оператор, INDEX – массив параметров цикла, LOWER, UPPER, INC – массивы, содержащие нижние, верхние границы и инкременты соответствующих параметров цикла.
Пример 3
Оператор цикла языка Actus
while a[1:50]<b[1:50] do a[#]:=a[#]+1;
производит параллельное увеличение всех 50 первых элементов массива на единицу до тех пор, пока элемент не станет больше или равен элементу
Пример 4
Рассмотрим фрагмент Actus-программы
const
sq=1:50;
var
i: array [1:50] of integer;
aa: array [1:50,1..100] of real;
begin
………………..
for i[1:50]:= seq by 2 to 100 do aa[#,i[#]]:=aa[#,i[#]]+1.0;
Эта программа на каждом «витке» цикла вызывает увеличение значений параметров цикла на 2 до тех пор, пока они не достигнут 100. После 25 «витков» цикла уровень параллелизма начнет уменьшаться:
первый «виток» - ;
второй «виток» - ;
………..
25-й «виток» - ;
26-й «виток» - , но 101-го элемента нет в массиве
………..