rtsIDr (1158390), страница 13
Текст из файла (страница 13)
Возвращается нулевое значение.
11.7Уничтожение редукционной группы
long delrg_ (RedGroupRef *RedGroupRefPtr);
*RedGroupRefPtr ссылка на редукционную группу.
Функция delrg_ уничтожает созданную функцией crtrg_ редукционную группу. После уничтожения группы ссылка на неё может использоваться по усмотрению пользовательской программы.
Редукционная группа может быть уничтожена функцией delrg_ только в том случае, если она была создана в текущей подзадаче и в текущем программном блоке (или его подблоке) (см. п. 8 и п. 10). Уничтожение группы, редукционные операции которой не завершены с помощью функции waitrd_, не допускается.
Если редукционная группа была создана функцией crtrg_ с ненулевым значением параметра *DelRedSignPtr, то при её уничтожении будут уничтожены и все включённые в неё редукционные переменные.
Редукционная группа может быть уничтожена также с помощью функции delobj_ (см.п.17.5).
Возвращается нулевое значение.
11.8Уничтожение редукционной переменной
long delred_ (RedRef *RedRefPtr);
*RedRefPtr ссылка на редукционную переменную.
Функция delred_ уничтожает созданную функцией crtred_ редукционную переменную (точнее, описывающий её объект). После уничтожения переменной ссылка на неё может использоваться по усмотрению пользовательской программы.
Редукционная переменная может быть уничтожена функцией delred_ только в том случае, если она была создана в текущей подзадаче и в текущем программном блоке (или его подблоке) (см. п. 8 и п. 10). Не допускается уничтожение переменной, принадлежащей редукционной группе, операции которой не завершены с помощью функции waitrd_.
Если уничтожаемая редукционная переменная включена в какую-либо редукционную группу, то она из состава этой группы исключается.
Редукционная переменная может быть уничтожена также с помощью функции delobj_ (см.п.17.5).
Возвращается нулевое значение.
12Обмен границами распределенных массивов
Пусть локальная часть распределённого массива представлена совокупностью его элементов, определённой множеством индексных кортежей
{I1 M1: I1,нач ≤ I1 ≤ I1,кон } . . . {Im Mm: Im,нач ≤ Im ≤ Im,кон} . . .
{In Mn: In,нач ≤ In ≤ In,кон} ,
где:
| | | символ операции прямого произведения множеств; |
| n | | размерность массива; |
| Im | | индексная переменная по m-му измерению (1 ≤ m ≤ n); |
| Im,нач | | начальное значение индексной переменной по m-му измерению; |
| Im,кон | | конечное значение индексной переменной по m-му измерению; |
| Mm | | множество значений индексной переменной по измерению m. |
Будем предполагать, что локальная часть расположена полностью внутри массива (простоты ради). Тогда нижней границей локальной части распределённого массива по измерению k называется совокупность его элементов, определённая множеством индексных кортежей
LSBk =
| { I1 | M1 | : I1,нач | FS*LW1 | ≤ I1 | ≤ I1,кон | + FS*HW1 | } |
| Здесь: | LWi | | ширина нижней части границы по измерению i; |
| HWi | | ширина верхней части границы по измерению i (параметры LowShdWidthArray и HiShdWidthArray функций crtda_ , п.6, и inssh_ , п.12.2); | |
| FS | | признак полной границы (параметр *FullShdSignPtr функции inssh_, п.12.2). |
Аналогично, верхняя граница локальной части распределённого массива по измерению k определяется множеством индексных кортежей
HSBk =
| { I1 | M1 | : I1,нач | FS*LW1 | ≤ I1 | ≤ I1,кон | + FS*HW1 | } |
Нижняя (верхняя) граница по измерению k называется полной, если FS=1, или нижней (верхней) теневой гранью по измерению k, если FS=0. Объединение полных границ всех измерений называется полной границей локальной части распределённого массива:
|
| n | |
| 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_ создает пустую группу границ (не содержащую ни одной границы) и возвращает ссылку на неё.















