rtsIDr (1158449), страница 7
Текст из файла (страница 7)
Функция возвращает нулевое значение.
6.2 Уничтожение распределенного массива
long delda_(long ArrayHeader[]);
ArrayHeader – заголовок уничтожаемого массива.
Функция уничтожает созданный функцией crtda_ распределённый массив. После уничтожения распределённого массива его заголовок может использоваться по усмотрению пользовательской программы.
Распределённый массив может быть уничтожен функцией delda_ только в том случае, если он был создан в текущей подзадаче и в текущем программном блоке (или его подблоке) (см. п. 8 и п. 10). Вместе с массивом будут уничтожены все группы границ, в которые он включён (см. п. 12).
Распределённый массив может быть уничтожен также с помощью функции delobj_ (см. п.17.5).
Возвращается нулевое значение.
6.3Создание дополнительного заголовка распределенного массива
| long addhdr_ ( | long | NewArrayHeader[], |
| NewArrayHeader | | создаваемый заголовок. |
| ArrayHeader | | один из существующих заголовков. |
Функция создает заголовок распределённого массива, который в дальнейшем может использоваться равноправно с уже существующими заголовками. Его можно использовать, в частности, для создания других дополнительных заголовков.
При задании расположения распределённого массива (выравнивании) с помощью функций align_ и malign_ (см.п.7) инициализируются все его заголовки. Изменение расположения массива функциями realn_, mrealn_, redis_ и mredis_ (см. п.п. 5 и 7) также влечет изменение содержимого всех его заголовков.
Возвращается нулевое значение.
6.4Уничтожение заголовка распределенного массива
long delhdr_(long ArrayHeader[]);
ArrayHeader – уничтожаемый заголовок распределённого массива.
Функция уничтожает заголовок, созданный функцией addhdr_ или заданный при обращении к функции crtda_. Нельзя уничтожить единственный заголовок распределённого массива.
Возвращается нулевое значение.
7Отображение распределенного массива
7.1Задание расположения (выравнивание) распределенного массива
| long align_ ( | long | ArrayHeader[], |
| ArrayHeader | | заголовок выравниваемого распределённого массива. |
| *PatternRefPtr | | ссылка на образец выравнивания. |
| AxisArray | | массив, j-й элемент которого содержит номер индексной переменной (номер измерения) распределённого массива для линейного правила выравнивания (j+1)-го измерения образца. |
| CoeffArray | | массив, j-й элемент которого содержит коэффициент для индексной переменной распределённого массива в линейном правиле выравнивания (j+1)-го измерения образца. |
| ConstArray | | массив, j-й элемент которого содержит константу линейного правила выравнивания для (j+1)-го измерения образца. |
Функция align_ задает расположение указанного распределённого массива в пространстве указанного представления родительской абстрактной машины (выравнивает распределённый массив). При этом элементы массива распределяются между дочерними абстрактными машинами, которые входят в состав этого представления. Представление абстрактной машины определяется образцом, который может быть как самим представлением, так и, при косвенном отображении, распределённым массивом. В последнем случае ссылкой на образец является первое слово заголовка распределённого массива.
Использование в качестве образца распределённого массива допустимо лишь в том случае, если он уже отображён на некоторое представление абстрактной машины, а представления абстрактной машины если оно уже отображено на некоторую процессорную подсистему. Поэтому выполнение функции align_ сводится к распределению элементов выравниваемого массива между процессорами, входящими в состав этой процессорной системы.
Образец выравнивания может быть отображён (в конечном результате) только в текущую процессорную систему или её подсистему.
Нельзя отобразить уже отображённый распределённый массив.
Рассмотрим отображение распределённого массива детальнее. Пусть F многозначная функция, определённая на индексном пространстве выравниваемого массива и принимающая значения в индексном пространстве образца:
| F( (I1, ... ,Ii, ... ,In) ) = | F1(I1, ... ,Ii, ... ,In) |
где:
| | | символ декартова произведения множеств; |
| n | | размерность распределённого массива; |
| m | | размерность образца; |
| Ii | | индексная переменная i-го измерения выравниваемого массива; |
| Fj | | многозначная функция, принимающая значения во множестве значений индексной переменной j-го измерения образца. |
Выравнивание распределённого массива по заданному образцу – это указание системе поддержки (посредством задания функции F) о том, что элемент выравниваемого массива, определённый индексным вектором (i1, ... ,in), должен быть размещён на тех и только тех процессорах, на которых размещён (или на которые отображён) хотя бы один из элементов образца, определённых множеством F((i1, ... ,in)) (т.е. множеством-образом, элементами которого являются векторы индексного пространства образца).
Функции F1, ... ,Fm называются координатными правилами выравнивания. Система поддержки обеспечивает следующие правила выравнивания.
-
Fj(I1, ... ,In) = {Aj*Ik + Bj} , где:
| k=f(j) | | номер измерения выравниваемого массива (1 ≤ k ≤ n, f(j1) ≠ f(j2) при j1 ≠ j2); |
| Aj | | целое число; |
| Bj | | целое неотрицательное число. |
В этом случае образом элемента (i1, ... ,in) индексного пространства выравниваемого массива является множество, содержащее один элемент Aj*Ik + Bj, принадлежащий множеству значений индексной переменной j-го измерения образца.
Aj и Bj должны удовлетворять условиям:
0 ≤ Bj ≤ MAXj и 0 ≤ Aj*MAXk + Bj ≤ MAXj , где:
| MAXj | | максимальное значение индексной переменной j-го измерения образца; |
| MAXk | | максимальное значение индексной переменной k-го измерения выравниваемого массива. |
-
Fj(I1, ... ,In) = {q Mj: 0 ≤ q ≤ MAXj} , где:
| Mj | | множество значений индексной переменной j-го измерения образца; |
| MAXj | | максимальное значение индексной переменной j-го измерения образца. |
В этом случае образом любого элемента (i1, ... ,in) индексного пространства выравниваемого массива является все множество значений индексной переменной j-го измерения образца (в подобных случаях принято использовать символ "*" , т. е. "любой из допустимых").
Примеры.
-
Выравнивание F((I1, I2)) = {I1} {I2} означает, что элемент двухмерного массива должен быть отображён на те же процессоры, что и элемент двухмерного образца, если их индексы совпадают.
-
Выравнивание F((I1, I2)) = {*} {I1+5} {*} означает, что элемент двухмерного массива будет отображён на те же процессоры, что и элемент трёхмерного образца, если индекс по 2-му измерению образца на 5 больше индекса по 1-му измерению выравниваемого массива (вне зависимости от значения индекса выравниваемого массива по 2-му измерению и от значений индексов образца по 1-му и 3-му измерениям).
-
Выравнивание F((I1, I2, I3)) = {*} {*} означает, что каждый элемент трёхмерного массива будет расположен на каждом процессоре, на который отображён хотя бы один элемент двухмерного образца (вне зависимости от значений индексов выравниваемого массива и образца).
-
Выравнивание F((I1, I2)) = {0} {1} {2} означает, что каждый элемент двухмерного массива (вне зависимости от значений его индексов) будет размещён на тех процессорах, на которые отображён элемент трёхмерного образца с индексами (0,1,2).
Определяя расположение массива в пространстве образца (т.е. задавая функции F1, ... ,Fm), необходимо учитывать, что его элементы не должны выходить за пределы пространства образца. Соблюдение корректного отображения в каждом звене цепочки последовательных выравниваний обеспечит, в конечном результате, верное распределение элементов массива по процессорам.
Отметим, что если в качестве образца использован массив, то при его переотображении с помощью функции realn_ (см.п.7.3) массив, отображённый с помощью этого образца, сохранит прежнее расположение.
При обращении к функции align_ правило выравнивания Fj(I1,...,In) = Aj*Ik + Bj для j-го измерения образца задается следующим образом:
| AxisArray[j-1] | содержит значение k; |
Для задания правила Fj(I1, ... ,In), значением которого для любых I1, ... ,In является множество всех значений индексной переменной j-го измерения образца, значение AxisArray[j-1] (значение k) должно быть установлено равным -1. Значения CoeffArray[j-1] и ConstArray[j-1] (значения Aj и Bj) в этом случае несущественны.
Число правил выравнивания, заданных при обращении к функции align_, должно быть равно размерности образца.














