rtsIDr (1158449), страница 14
Текст из файла (страница 14)
| n | ||||||||
| U ( | { I1 | M1 | : I1,нач | LW1 | ≤ I1 | ≤ I1,кон | HW1 | } |
| k = 1 | …. | .....….. | ........ | .......….. | .......... | ........……. | ..........… | |
| { Ik-1 | Mk-1 | : Ik-,нач | LWk-1 | ≤ Ik-1 | ≤ Ik-1,кон | HWk-1 | } | |
| { Ik | Mk | : Ik,нач | LWk | ≤ Ik | ≤ Ik,нач | 1 ; | ||
| Ik,кон | 1 | ≤ Ik | ≤ Ik,кон | HWk | } | |||
| { Ik+1 | Mk+1 | : Ik+1,нач | LWk+1 | ≤ Ik+1 | ≤ Ik+1,кон | HWk+1 | } | |
| .... | .....…... | ........ | .......…… | .......... | ....……..... | .........…. | ||
| { In | Mn | : In,нач | LWn | ≤ In | ≤ In,кон | HWn | } | |
| ) |
Граничные элементы локальной части распределённого массива называются теневыми (или импортируемыми) и размещаются в памяти вместе с локальной частью. С другой стороны, каждый граничный элемент имеет образ элемент некоторой локальной части распределённого массива, размещённый в памяти того процессора, на который отображена эта локальная часть. Образы граничных элементов называются элементами-оригиналами (или экспортируемыми элементами).
Обмен границами локальных частей распределённых массивов – это асинхронная операция (осуществляемая параллельно с вычислениями), посредством которой каждый элемент-оригинал (возможно, обновленный) переписывается в соответствующий ему теневой граничный элемент (возможно, устаревший). В целях оптимизации границы распределённых массивов объединяются в группы, а обмен границами реализован в виде набора операций, каждая из которых осуществляется над заданной группой границ.
12.1Создание группы границ
ShadowGroupRef crtshg_ (long *StaticSignPtr);
*StaticSignPtr признак создания статической группы границ.
Функция crtshg_ создает пустую группу границ (не содержащую ни одной границы) и возвращает ссылку на неё.
Задаваемый ненулевым значением *StaticSignPtr признак статической группы границ означает создание группы, не уничтожаемой при выходе из программного блока (см.п.8). Такая группа границ может быть уничтожена только явно, с помощью рассмотренной ниже функции delshg_ .
12.2Включение границы распределенного массива в группу границ
| long inssh_ ( | ShadowGroupRef | *ShadowGroupRefPtr, |
| *ShadowGroupRefPtr | | ссылка на группу границ. |
| ArrayHeader | | заголовок распределённого массива. |
| LowShdWidthArray | | массив, i-й элемент которого содержит ширину нижней границы для (i+1)-го измерения массива. |
| HiShdWidthArray | | массив, i-й элемент которого содержит ширину верхней границы для (i+1)-го измерения массива. |
| *FullShdSignPtr | | задаваемый единицей признак обмена полной границей. |
Включение границы распределённого массива в группу означает лишь регистрацию его границы как участника группового обмена границами. Размещения границы массива в системном буфере обмена не производится.
Заданная при обращении к функции группа границ должна быть создана в текущей подзадаче. Распределённый массив перед включением его в группу границ должен быть отображён в процессорную систему (функциями align_, realn_, malign_ или mrealn_), каждый элемент которой обязан входить в состав текущей процессорной системы.
Допускается включение распределённого массива в несколько групп границ, а также повторное включение его в одну и ту же группу. В последнем случае ширины границ, заданные при обращении к функции inssh_, должны совпадать с ширинами границ, заданными при предыдущем включении его в эту группу. Запрещается включение массива в группу, находящуюся в состоянии обмена границами или приёма (передачи) импортируемых (экспортируемых) элементов. Включение новых массивов в такую группу становится возможным только после завершения этих операций (см. описание функций strtsh_, recvsh_, sendsh_ и waitsh_ в п.п. 12.3-12.6).
Ширины границ массивов, задаваемые параметрами LowShdWidthArray и HiShdWidthArray, не должны превосходить ширин границ, заданных при создании рассматриваемого массива с помощью функции crtda_. Ширина границы, равная –1, означает, что будет использована ширина границы, заданная при создании массива.
При нулевом значении *FullShdSignPtr в операции обмена границами будут участвовать только нижние и верхние теневые грани всех измерений распределённого массива, при единичном полная граница распределённого массива.
Функция возвращает нулевое значение.
Обмен границами, являющимися объединением теневых граней, требует взаимодействия текущего процессора с 2*n "соседями" (n – размерность распределённого массива, 2*n число теневых граней), а обмен полными границами с 3n - 1 "соседями". Поэтому для случая, когда граница как объединение теневых граней не покрывает потребностей задачи, а обмен полной границей неприемлем по накладным расходам, система поддержки предусматривает возможность выбора достаточной и оптимальной схемы обмена границами, основанной на представлении границы в виде объединения элементарных теневых n-мерных параллелепипедов.
Пусть Q = (q1, ... ,qk, ... ,qn) n-размещение с повторениями из элементов множества {0,1,2} (размещение (0, ... ,0) не рассматривается). Поставим ему в соответствие n-мерный параллелепипед PQ = M1 ... Mk ... Mn , где:
| Mk = | { | M0,k = { Ik Mk: Ik,нач | ≤ Ik ≤ Ik,кон | } при qk = 0, |
| M1,k = { Ik Mk: Ik,нач – LWk | ≤ Ik ≤ Ik,нач – 1 | } при qk = 1, | ||
| M2,k = { Ik Mk: Ik,кон + 1 | ≤ Ik ≤ Ik,кон + HWk | } при qk = 2. |
Здесь:
| Ik | | индексная переменная k-го измерения распределённого массива (1 ≤ k ≤ n); |
| Ik,нач | | начальное значение индексной переменной по k-му измерению; |
| Ik,кон | | конечное значение индексной переменной по k-му измерению; |
| Mk | | множество значений индексной переменной k-го измерения; |
| LWk | | ширина нижней части границы по измерению k; |
| HWk | | ширина верхней части границы по измерению k. |
Параллелепипед PQ называется элементарным теневым n-мерным параллелепипедом.
Полная граница распределённого массива это объединение всех элементарных теневых параллелепипедов (кроме параллелепипеда, соответствующего размещению (0, ... ,0) и являющегося локальной частью распределённого массива). Число элементарных параллелепипедов, составляющих полную границу, есть A3n - 1 = 3n - 1.
Нижняя (верхняя) теневая грань по измерению k это элементарный теневой параллелепипед, соответствующий n-размещению, в котором qk = 1(2), а остальные qi равны нулю.
Система поддержки позволяет задавать для обмена границами любую совокупность элементарных теневых параллелепипедов с помощью рассмотренной ниже функции insshd_ включения границы распределённого массива в группу границ.
| long insshd_ ( | ShadowGroupRef | *ShadowGroupRefPtr, |
| *ShadowGroupRefPtr | | ссылка на группу границ. |
| ArrayHeader | | заголовок распределённого массива. |
| LowShdWidthArray | | массив, i-й элемент которого содержит ширину нижней границы для (i+1)-го измерения массива. |
| HiShdWidthArray | | массив, i-й элемент которого содержит ширину верхней границы для (i+1)-го измерения массива. |
| *MaxShdCountPtr | | максимально допустимое для любого входящего в границу элементарного параллелепипеда число измерений, код участия которых в формировании границы больше единицы. |
| ShdSignArray | | массив, i-й элемент которого содержит код участия (i+1)-го измерения массива в формировании границы. |
Ширины границ массивов, задаваемые параметрами LowShdWidthArray и HiShdWidthArray, не должны превосходить ширин границ, заданных при создании рассматриваемого массива с помощью функции crtda_. Ширина границы, равная –1, означает, что будет использована ширина границы, заданная при создании массива.
Код участия (i+1)-го измерения массива в формировании границы, задаваемый в i-м элементе массива ShdSignArray, может принимать значения:
| 1 | | граница массива включает те и только те элементарные теневые параллелепипеды, для которых Mi = M0,i; |
| 2 | | граница включает те и только те элементарные параллелепипеды, для которых Mi = M1,i; |
| 3 | | граница включает те и только те элементарные параллелепипды, для которых Mi = M0,i или Mi = M1,i; |
| 4 | | граница включает те и только те элементарные параллелепипеды, для которых Mi = M2,i; |
| 5 | | граница включает те и только те элементарные параллелепипеды, для которых Mi = M0,i или Mi = M2,i; |
| 6 | | граница включает те и только те элементарные параллелепипеды, для которых Mi = M1,i или Mi = M2,i; |
| 7 | | граница должна включать элементарные параллелепипеды с любым множеством Mi (M0,i, M1,i или M2,i). |
Параметр *MaxShdCountPtr (положительное число) ограничивает теневую оболочку локальной части распределённого массива, принимающую участие в обмене границами, допуская в её состав только те элементарные параллелепипеды, для которых
| n |
|
То есть, в принимающую в обмене границу не могут входить элементарные теневые параллелепипеды, число измерений которых, выводящих за пределы локальной части массива, превосходит *MaxShdCountPtr.















