rtsIDr (1158449), страница 5
Текст из файла (страница 5)
В результате осуществленного функцией distr_ отображения заданного представления родительской абстрактной машины в заданную процессорную систему каждому элементу представления (т. е. дочерней абстрактной машине) будет поставлена в соответствие процессорная система (совокупность процессоров, являющаяся образом элемента представления при рассмотренном выше отображении F). Абстрактная машина вместе с её процессорным образом образуют параллельную подзадачу. Активизация (запуск) подзадачи производится при входе в соответствующий ей виток параллельного цикла. Выполнение подзадачи – это выполнение витка параллельного цикла (см. п. 9). Другой способ создания и запуска параллельных подзадач рассмотрен в п. 10.
Примеры.
-
Пусть абстрактная машина и многопроцессорная система представлены матрицами:
| AM[9][8] | (0 ≤ I1 ≤ 8 , 0 ≤ I2 ≤ 7); |
| PS[3][4] | (0 ≤ J1 ≤ 2 , 0 ≤ J2 ≤ 3). |
Тогда функция F((I1,I2)) = { [I1 / 3]} {[I2 / 2] } установит соответствие:
элемент PS[J1][J2] подматрица AM[3*J1 ≤ I1 ≤ 3*J1 + 2][2*J2 ≤ I2 ≤ 2*J2 + 1] (блок [3][2]).
-
Пусть абстрактная машина и многопроцессорная система представлены массивами:
| AM[12] | (0 ≤ I ≤ 11); |
| PS[4][3] | (0 ≤ J1 ≤ 3 , 0 ≤ J2 ≤ 2). |
Тогда функция F((I)) = {2} {[I/4]} установит соответствие:
элемент PS[2][J2] отрезок AM[4*J2 ≤ I ≤ 4*J2 + 3] (блок [4]).
Строки 0,1 и 3 многопроцессорной системы в образ отображения F не войдут.
-
Пусть абстрактная машина и многопроцессорная система представлены массивами:
| AM[8][12] | (0 ≤ I1 ≤ 7 , 0 ≤ I2 ≤ 11); |
| PS[3] | (0 ≤ J ≤ 2). |
Тогда функция F((I1,I2)) = {[I2/4]} установит соответствие:
элемент PS[J] подматрица AM[0 ≤ I1 ≤ 7][4*J ≤ I2 ≤ 4*J + 3] (блок [8][4]).
-
Пусть абстрактная машина и многопроцессорная система представлены массивами:
| AM[12] | (0 ≤ I ≤ 11); |
| PS[4][3] | (0 ≤ J1 ≤ 3 , 0 ≤ J2 ≤ 2). |
Тогда функция F((I)) = {*} {[I/4]} установит соответствие:
элемент PS[J1][J2] отрезок AM[4*J2 ≤ I ≤ 4*J2 + 3] (блок [4]).
То есть, в данном случае образ отображения F из примера b) размножен по строкам многопроцессорной систем.
-
Пусть абстрактная машина и многопроцессорная система представлены матрицами:
| AM[9][8] | (0 ≤ I1 ≤ 8 , 0 ≤ I2 ≤ 7); |
| PS[3][4] | (0 ≤ J1 ≤ 2 , 0 ≤ J2 ≤ 3). |
Тогда функция F((I1,I2)) = {*} {*} установит соответствие:
элемент PS[J1][J2] подматрица AM[0 ≤ I1 ≤ 8][0 ≤ I2 ≤ 7] (блок[9][8]), т.е. все представление абстрактной машины.
Замечание. Применение в функции align_ (realn_) представления абстрактной машины из примера e) в качестве образца дает возможность получить полностью размноженный распределённый массив, т.е. такой, каждый элемент которого размещён на каждом процессоре (см.п.7.1).
При обращении к функции distr_ координатное правило отображения Fj(I1, ... , In) = {[Ik/BLSIZEk]} для j-го измерения многопроцессорной системы задается следующим образом:
| AxisArray[j-1] | содержит значение k; |
| DistrParamArray[j-1] | содержит значение BLSIZEk. |
Если DistrParamArray[j-1] задан нулевым, то система поддержки вычислит BLSIZEk так, как было показано выше.
Для задания правила Fj(I1, ... ,In), значением которого для любых I1, ... ,In является множество всех значений индексной переменной j-го измерения многопроцессорной системы, значение AxisArray[j-1] (значение k) должно быть установлено нулевым. Значение DistrParamArray[j-1] в этом случае несущественно.
Правило отображения Fj(I1, ... ,In) = { Const } задается так:
| AxisArray[j-1] | = 1; |
| DistrParamArray[j-1] | содержит значение Const. |
Функция возвращает ненулевое значение, если отображённое представление имеет локальную часть на текущем процессоре, и нулевое – в противном случае.
5.2Изменение отображения представления абстрактной машины на многопроцессорную систему (перераспределение ресурсов)
| long redis_ ( | AMViewRef | *AMViewRefPtr, |
| *AMViewRefPtr | | ссылка на представление абстрактной машины, отображение которого должно быть изменено. |
| *PSRefPtr | | ссылка на многопроцессорную систему, определяющую состав ресурсов для нового распределения. |
| *ParamCountPtr | | число параметров, заданных в массивах AxisArray и DistrParamArray. |
| AxisArray | | массив, j-й элемент которого содержит номер измерения представления абстрактной машины, используемый в правиле отображения для (j+1)-го измерения многопроцессорной системы. |
| DistrParamArray | | массив, j-й элемент которого содержит параметр правила отображения для (j+1)-го измерения многопроцессорной системы (целое неотрицательное число). |
| *NewSignPtr | | задаваемый единицей признак обновления содержимого всех перераспределяемых массивов. |
Функция redis_ отменяет распределение ресурсов родительской абстрактной машины, установленное ранее с помощью функции distr_ (или mdistr_ , см.п.5.4) для дочерних абстрактных машин, которые входят в состав представления, заданного ссылкой *AMViewRefPtr, и осуществляет новое отображение указанного представления в соответствии с заданными параметрами. Все распределённые массивы, ранее выравненные по рассматриваемому представлению с помощью функций align_ и malign_ (как непосредственно, так и косвенно), будут отображены заново по прежним правилам выравнивания (см.п.7). Содержимое этих массивов будет обновлено (расписано нулевым кодом), если значение *NewSignPtr не равно нулю, или, в противном случае, сохранено. При переотображении массивов содержимое их границ (см. п. 12) не сохраняется.
Все элементы заданного представления должны быть листьями иерархии абстрактных машин (не должны иметь потомков).
Все процессоры системы, заданной ссылкой *PSRefPtr, должны входить в состав элементного пересечения текущей процессорной системы с процессорной системой, в которую отображена родительская абстрактная машина. При нулевом значении ссылки *PSRefPtr или при равном NULL значении указателя PSRefPtr для распределения ресурсов будет использована текущая процессорная система.
Переотображаемое представление может быть задано косвенно, если в качестве параметра *AMViewRefPtr использовать заголовок распределённого массива, созданного функцией crtda_ с равным 1 или 3 значением параметра *ReDistrParPtr (см.п.6).
Представление абстрактной машины, заданное при обращении к функции, может быть ранее не отображено. В этом случае функция redis_ выполняется как функция distr_ , а значение параметра *NewSignPtr несущественно.
Возвращается ненулевое значение, если переотображённое представление имеет локальную часть на текущем процессоре, и нулевое в противном случае.
5.3Опрос карты отображения
| AMViewMapRef amvmap_ ( | AMViewRef | AMViewRefPtr, |
| *AMViewRefPtr | | ссылка на представление абстрактной машины. |
| *StaticSignPtr | | признак создания статической карты отображения. |
Функция amvmap_ создает объект (карту отображения), описывающий текущее отображение представления абстрактной машины на процессорную подсистему, и возвращает ссылку на созданный объект.
Карта отображения представления абстрактной машины содержит, в частности, следующую информацию:
-
ссылку на процессорную подсистему, на которую отображено представление абстрактной машины;
-
правила отображения для всех измерений этой процессорной подсистемы;
-
размерности представления абстрактной машины и процессорной подсистемы (для контроля).
Задаваемый ненулевым значением *StaticSignPtr признак статической карты отображения означает создание карты, не уничтожаемой при выходе из программного блока (см.п.8). Такая карта может быть уничтожена только явно, с помощью рассмотренной в п.5.6 функции delmvm_.
5.4Задание отображения представления абстрактной машины по карте отображения
| long mdistr_ ( | AMViewRef | *AMViewRefPtr, |
| *AMViewRefPtr | | ссылка на отображаемое представление абстрактной машины. |
| *PSRefPtr | | ссылка на многопроцессорную систему, определяющую состав распределяемых ресурсов. |
| *AMViewMapRefPtr | | ссылка на карту отображения представления абстрактной машины. |
Функция mdistr_ задает отображение указанного представления абстрактной машины в заданную процессорную систему по заданной карте отображения.
Абстрактная машина (родительская), представление которой задано ссылкой *AMViewRefPtr, на момент обращения к функции mdistr_ должна быть отображена.
При равном NULL значении PSRefPtr или при нулевом значении *PSRefPtr в качестве процессорной системы будет использована система, ссылка на которую содержится в карте отображения.
Все процессоры системы, заданной ссылкой *PSRefPtr или ссылкой, содержащейся в карте отображения, должны входить в состав элементного пересечения текущей процессорной системы с процессорной системой, в которую отображена родительская абстрактная машина.
Размерность представления абстрактной машины и размерность процессорной системы должны быть равны соответствующим размерностям, содержащимся в карте отображения.















