rtsIDr (1158390), страница 4
Текст из файла (страница 4)
Вычислительные веса координат процессоров определяются таким образом, чтобы обеспечить максимально равномерную загрузку процессоров: для каждого измерения заданной процессорной системы максимальная координатная загрузка процессоров должна быть минимальной.
Формально: для каждого (i+1)-го измерения заданной процессорной системы функция setelw_ решает (относительно Ik,init и Ik,last) задачу
| MAX ( | Ik,last |
где:
| n | | размер (i+1)-го измерения заданной процессорной системы; | |
| Ik,init ≤ Ik,last; | |||
| Ik+1,init = Ik,last + 1; | |||
| I0,init = 0, | In-1,last = m 1; | ||
| m | | число координатных весов загрузки, заданных для (i+1)-го измерения процессорной системы (WeightNumber[i]); m n; | |
| LWJ | | J-й координатный вес загрузки, заданный для (i+1)-го измерения процессорной системы (J-й элемент массива, указатель на который задан в LoadWeightAddr[i]). | |
После нахождения решения задачи (1) (обозначим его Ik,init,even , Ik,last,even; k = 0, ... , n - 1) вычислительный вес координаты k (i+1)-го измерения заданной процессорной системы полагается равным
Ik,last,even Ik,init,even + 1 (k = 0, ... , n - 1).
Координатные веса загрузки должны быть заданы в виде вещественных неотрицательных чисел (double).
Нулевое значение i-го элемента массива LoadWeightAddr означает, что для (i+1)-го измерения заданной процессорной системы будут установлены веса координат процессоров, равные весам, заданым параметрами запуска системы поддержки (для начальной процессорной системы), или равные единице (для процессорной системы, не являющейся начальной).
Значение параметра *AddrNumberPtr не может превосходить размерности заданной процессорной системы. Недостающие до размерности процессорной системы элементы массива LoadWeightAddr будут считаться нулевыми. В частности, равное нулю значение параметра *AddrNumberPtr означает, что веса всех координат всех процессоров будут установлены либо единичными, либо равными весам, заданным в параметрах запуска системы поддержки.
Функция возвращает нулевое значение.
5Отображение представления абстрактной машины
5.1Задание отображения представления абстрактной машины на многопроцессорную систему (распределение ресурсов)
| long distr_ ( | AMViewRef | *AMViewRefPtr, |
| *AMViewRefPtr | | ссылка на представление абстрактной машины, ресурсы которой будут распределяться. |
| *PSRefPtr | | ссылка на многопроцессорную систему, определяющую состав распределяемых ресурсов. |
| *ParamCountPtr | | число параметров, заданных в массивах AxisArray и DistrParamArray (см. ниже). |
| AxisArray | | массив, j-й элемент которого содержит номер измерения представления абстрактной машины, используемый в правиле отображения для (j+1)-го измерения многопроцессорной системы. |
| DistrParamArray | | массив, j-й элемент которого содержит параметр правила отображения для (j+1)-го измерения многопроцессорной системы (целое неотрицательное число). |
Под процессорным ресурсом (или просто ресурсом) абстрактной машины будем понимать совокупность процессоров, образующих элементный состав той многопроцессорной системы, на которую она отображена.
Функция distr_ распределяет ресурсы абстрактной машины между дочерними абстрактными машинами, которые входят в состав представления, заданного при обращении к функции ссылкой *AMViewRefPtr. Такое распределение называется отображением представления абстрактной машины в процессорную систему. Представление абстрактной машины может быть отображено лишь в том случае, если оно создано в текущей подзадаче (см. п. 10).
Абстрактная машина (родительская), представление которой задано при обращении к функции, на момент обращения к функции distr_ должна быть отображена. Все процессоры системы, заданной ссылкой *PSRefPtr, должны входить в состав элементного пересечения текущей процессорной системы с процессорной системой, в которую отображена родительская абстрактная машина. При нулевом значении ссылки *PSRefPtr или при равном NULL значении указателя PSRefPtr для распределения ресурсов будет использована текущая процессорная система.
Нельзя отобразить уже отображённое функцией distr_ (redis_, mdistr_, mredis_) представление абстрактной машины или представление, хотя бы один элемент которого отображён в какую-либо процессорную систему с помощью функции mapam_ (см. п. 10).
Число параметров, задаваемое в массивах AxisArray и DistrParamArray, должно быть равно *ParamCountPtr, которое не может превосходить размерности многопроцессорной системы, но может быть меньше её. В последнем случае недостающие до размерности многопроцессорной системы правила отображения будут считаться размножениями (2-е из рассмотренных ниже правил отображения).
Распределение ресурсов абстрактной машины достигается реализацией функционального соответствия
{представление абстрактной машины} {многопроцессорная система} ,
которое осуществляется следующим образом. Пусть F – многозначная функция, определённая на индексном пространстве представления абстрактной машины и принимающая значения в индексном пространстве многопроцессорной системы:
| F((I1, ... ,Ii, ... ,In)) = | F1(I1, ... ,Ii, ... ,In) |
Здесь:
| | | символ декартова произведения множеств; |
| n | | размерность представления абстрактной машины; |
| m | | размерность многопроцессорной системы; |
| Ii | | индексная переменная i-го измерения представления абстрактной машины; |
| Fj | | многозначная функция, принимающая значения во множестве значений индексной переменной j-го измерения многопроцессорной системы. |
Ресурс, выделенный дочерней абстрактной машине, определённой индексным вектором (i1, ... ,in), это совокупность процессоров, определённая множеством F((i1, ... ,in)) (т.е. множеством-образом, элементами которого являются векторы индексного пространства многопроцессорной системы). Отображение представления абстрактной машины на (точнее, в) многопроцессорную систему это выделение ресурсов (посредством задания функции F) каждому из элементов этого представления.
Функции F1, ... ,Fm называются координатными правилами отображения. Система поддержки обеспечивает следующие правила отображения, в совокупности обеспечивающие блочное распределение представления абстрактной машины по многопроцессорной системе.
-
Fj(I1, ... ,In) = { [Ik/BLSIZEk] } , где:
| k = f(j) = AxisArray[j-1] | | номер измерения представления абстрактной машины (1 ≤ k ≤ n, f(j1) ≠ f(j2) при j1 ≠ j2); |
| BLSIZEk | | целое неотрицательное число (размер блока для k-го измерения представления абстрактной машины). |
В этом случае образом элемента (i1, ... ,in) индексного пространства представления абстрактной машины является множество, содержащее один элемент [Ik/BLSIZEk], принадлежащий множеству значений индексной переменной j-го измерения многопроцессорной системы.
Значение BLSIZEk определяется следующим образом. Пусть:
| AMSIZEk | | размер k-го измерения представления абстрактной машины; |
| PSSIZE j | | размер j-го измерения многопроцессорной системы. |
Тогда:
| BLSIZEk = { | min(DistrParamArray[j-1], AMSIZEk) при DistrParamArray[j-1] ≠ 0; (AMSIZEk-1) / PSSIZEj] + 1 при DistrParamArray[j-1] = 0. |
Отметим, что максимально допустимое значение Ik есть
min( (PSSIZEj * BLSIZEk 1) , AMSIZEk 1 ).
Поэтому для полного охвата правилом отображения k-го измерения представления абстрактной машины требуется выполнение неравенства
AMSIZEk ≤ PSSIZEj * BLSIZEk ,
| что достигается при | DistrParamArray[j-1] ≥ AMSIZEk / PSSIZEj |
-
Fj(I1, ... ,In) = {q Mj: 0 ≤ q ≤ PSSIZEj-1} , где:
| Mj | | множество значений индексной переменной j-го измерения многопроцессорной системы. |
В этом случае образом любого элемента (i1, ... ,in) индексного пространства представления абстрактной машины является все множество значений индексной переменной j-го измерения многопроцессорной системы (в подобных случаях принято использовать символ «*» , т. е. «любой из допустимых»).
-
Fj(I1, ... ,In) = { Const } , где 0 ≤ Const ≤ PSSIZEj-1 .
В этом случае образом любого элемента (i1, ... ,in) индексного пространства представления абстрактной машины является множество, содержащее один элемент Const, принадлежащий множеству значений индексной переменной j-го измерения многопроцессорной системы.
В результате осуществленного функцией 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]} установит соответствие:















