В параллельных ЯВУ для векторно-конвейерных вычислительных систем и векторно-параллельных вычислительных систем имеется множество арифметических, реляционных и логических бинарных операций над массивами, которые выполняются параллельно над всеми элементами этих массивов. Имеются также унарные операции, относящиеся ко всем элементам массивов.
При выполнении бинарных операций над массивами оба массива должны иметь одинаковые ранги и размерности. Равенство рангов и размерностей массивов будем называть соответствием массивов. Такое ограничение требует введения в язык программирования конструкций, предоставляющих возможность сжатия, расширения или переформирования массивов с целью достижения их соответствия. Средства, рассмотренные в параграфе 1, могут быть использованы для этой цели. Другие средства рассмотрены в данном параграфе. Заметим, что альтернативой является дополнение компилятором неопределенных элементов массивом, например, нулями.
Функции понижения ранга.
Функции понижения ранга массива основаны на использовании некоторого бинарного оператора ко всем элементам массива в одной размерности.
Положим, что – числовой массив, а – логический массив. Пусть массивы , имеют ранг и все размерности этих массивов одинаковы и равны . Приведем примеры наиболее распространенных функций понижения ранга.
Пример 1
Функция вызывает суммирование элементов числового массива по -ой размерности:
.
Результирующий массив имеет ранг . Например, если , и , то .
Заметим, что все суммирования при выполнении операции производятся параллельно.
Пример 2
Функция вызывает перемножение элементов числового массива по -ой размерности:
.
Результирующий массив имеет ранг , все произведения при выполнении операции производятся параллельно.
Пример 3
Функция вызывает логическое перемножение элементов логического массива по -ой размерности:
.
Результирующий массив имеет ранг . Например, если , и , то .
Все логические умножения при выполнении операции производятся параллельно.
Пример 4
Функция вызывает логическое сложение элементов логического массива по -ой размерности:
.
Результирующий массив имеет ранг , все логические суммирования при выполнении операции (,) производятся параллельно.
Пример 5
Функция вызывает замену элементов числового массива по -ой размерности максимальным элементом:
.
Результирующий массив имеет ранг . Например, если если , и , то .
Все операции отыскания максимума при выполнении операции производятся параллельно.
Пример 6
Функция вызывает замену элементов числового массива по -ой размерности минимальным элементом:
.
Результирующий массив имеет ранг . Все операции отыскания минимума при выполнении операции производятся параллельно.
Функции повышения ранга.
Примером функции повышения ранга массива является функция . Результатом выполнения этой функции является матрица, полученная повторением раз матрицы по -ой размерности. Пусть, например, , тогда =.
Любое повышение ранга может быть выполнено с помощью повторного использовании этой функции.
Операции переформирования.
Операции переформирования массивов могут быть необходимы при выполнении операций, над массивами, имеющими различные ранги и/или размерности, но одинаковое количество элементов.
Положим, что матрица имеет ранг и размерности . Каждый элемент матрицы , положим, занимает в памяти один байт. Напомним, что тогда описание вводит байтов памяти и функцию отображения, которая определяет положение элемента в памяти .
В качестве примера операции переформирования рассмотрим операцию , где .
Операция вводит новый массив с таким же количеством элементов, что и в массиве , и новой функций отображения .