rtsIDr (1158449), страница 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 означает, что веса всех координат всех процессоров будут установлены либо единичными, либо равными весам, заданным в параметрах запуска системы поддержки.
Функция возвращает нулевое значение.
4.7Виртуальные многопроцессорные системы (многопроцессорные системы программы пользователя)
Программа пользователя может быть "жёстко" настроена на определённую, оптимальную для неё начальную процессорную систему. Чтобы обеспечить запуск такой программы на другой процессорной конфигурации, система поддержки предоставляет механизм виртуальных процессорных систем.
Механизм виртуальных процессорных систем позволяет использовать в качестве фиксированной для программы начальной процессорной системы эквивалентную ей виртуальную начальную процессорную систему (процессорные системы эквивалентны, если имеют одну и ту же размерность и равные размеры измерений c одинаковыми номерами). Размерности реальной и виртуальной начальных процессорных систем должны быть равны, но размеры их измерений с одинаковыми номерами могут не совпадать. Количества процессоров в этих процессорных системах также могут быть разными.
Виртуальная начальная процессорная система описывается в файлах параметров запуска системы поддержки директивой
UserPS = <список размеров измерений, разделённых запятыми>;
Размерность процессорной системы, заданной этой директивой, равна числу размеров и змерений, содержащихся в списке.
Для запуска программы на виртуальной начальной процессорной системе параметру запуска системы поддержки IsUserPS должно быть присвоено ненулевое значение (1).
В этом случае:
-
все процессорные подсистемы, создаваемые функциями crtps_ и psview_ (см. п.п. 4.2 и 4.3), являются виртуальными, исходной для которых (на верхнем уровне иерархии) является виртуальная начальная процессорная система;
-
при создании виртуальной процессорной подсистемы создаётся соответствующая ей реальная процессорная подсистема (при инициализации системы поддержки виртуальной начальной процессорной системе соответствует реальная начальная процессорная система);
-
вычислительные веса координат процессоров любой процессорной системы полагаются равными единице (вне зависимости от их значений, заданных в параметрах запуска системы поддержки или при обращении к функциям setpsw_, genbli_, genbld_ и genblk_, см. п. 4.5);
-
веса загрузки процессоров, задаваемые при обращении к функции setelw_ (см. п. 4.6), игнорируются и считаются равными единице;
-
функции getsiz_ и locsiz_ (см. п. 17.2) возвращают размеры виртуальных процессорных систем.
Из изложенного выше следует, что при выполнении программы на виртуальных процессорных системах отображение на них представлений абстрактных машин и, следовательно, распределённых массивов и параллельных циклов возможно только равномерными блоками (см. п. 5.7).
Замечание. Если программа имеет "жёсткую" настройку лишь на число процессоров в начальной процессорной системе (а не на размеры её измерений), то виртуальную начальную процессорную систему рекомендуется описывать одномерной.
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-го измерения многопроцессорной системы.














