rtsIDr (1158449), страница 15
Текст из файла (страница 15)
Массив ShdSignArray должен содержать хотя бы один превосходящий единицу элемент (граница распределённого массива не должна совпадать с его локальной частью).
Функция возвращает нулевое значение.
Замечание. Включение в группу границ теневых граней распределённого массива с помощью функции inssh_ эквивалентно выполнению функции insshd_ с равным единице значением параметра *MaxShdCountPtr и с массивом ShdSignArray, каждый элемент которого равен 7. Для включения в группу границ полной границы распределённого массива с помощью функции insshd_ параметр *MaxShdCountPtr должен быть равен размерности распределённого массива, а каждый элемент массива ShdSignArray также должен быть равен 7.
12.3Запуск обмена границами заданной группы
long strtsh_ (ShadowGroupRef *ShadowGroupRefPtr);
*ShadowGroupRefPtr ссылка на группу границ.
Функция strtsh_ инициализирует системный буфер обмена границами (если обмен границами данной группы запускается в первый раз), размещает в нём все зарегистрированные с помощью функции inssh_ (inshsd_) границы и запускает операцию обмена границами.
Все элементы всех процессорных систем, в которые отображены массивы, зарегистрированные в запускаемой группе, должны принадлежать текущей процессорной системе. Обмен границами заданной группы может быть запущен только в том случае, если предыдущие операции обмена границами этой группы, приема импортируемых или передачи экспортируемых элементов завершены с помощью функции waitsh_ (см. п.п. 12.4, 12.5 и 12.6).
Возвращается нулевое значение.
12.4Инициализация приема импортируемых элементов заданной группы границ
long recvsh_(ShadowGroupRefPtr *ShadowGroupRefPtr);
*ShadowGroupRefPtr ссылка на группу границ.
Все элементы всех процессорных систем, в которые отображены массивы, зарегистрированные в заданной группе, должны принадлежать текущей процессорной системе. Приём импортируемых элементов группы может быть запущен только в том случае, если предыдущие операции обмена границами этой группы и приема импортируемых элементов завершены с помощью функции waitsh_ (см. п.п. 12.3, 12.5 и 12.6).
Приём импортируемых элементов может осуществляться параллельно с передачей экспортируемых элементов (см. п. 12.5), но не может быть запущен при незавершённой передаче экспортируемых элементов, инициированной не текущей подзадачей.
Ожидание завершения приёма импортируемых элементов осуществляется с помощью функции waitsh_ (см.п.12.6).
Возвращается нулевое значение.
12.5Инициализация передачи экспортируемых элементов заданной группы границ
long sendsh_(ShadowGroupRefPtr *ShadowGroupRefPtr);
*ShadowGroupRefPtr ссылка на группу границ.
Все элементы всех процессорных систем, в которые отображены массивы, зарегистрированные в заданной группе, должны принадлежать текущей процессорной системе. Передача экспортируемых элементов группы может быть запущена только в том случае, если предыдущие операции обмена границами этой группы и передачи экспортируемых элементов завершены с помощью функции waitsh_ (см. п.п. 12.3, 12.4 и 12.6).
Передача экспортируемых элементов может осуществляться параллельно с приёмом импортируемых элементов (см. п. 12.4), но не может быть запущена при незавершённом приёме импортируемых элементов, инициированном не текущей подзадачей.
Ожидание завершения передачи экспортируемых элементов осуществляется с помощью функции waitsh_ (см.п.12.6).
Возвращается нулевое значение.
Замечание. Последовательность обращений
recvsh_(ShadowGroupRefPtr);
sendsh_(ShadowGroupRefPtr);
эквивалента вызову strtsh_(ShadowGroupRefPtr).
12.6Ожидание завершения обмена границами заданной группы
long waitsh_ (ShadowGroupRef *ShadowGroupRefPtr);
*ShadowGroupRefPtr ссылка на группу границ.
Функция waitsh_ завершает операцию обмена границами заданной группы, инициированную функцией strtsh_, и разрешает новый запуск обмена границами этой группы. Данной функцией осуществляется также ожидание завершения приема импортируемых или передачи экспортируемых элементов, инициированных функциями recvsh_ или sendsh_ (см. п.п. 12.4 и 12.5). После выполнение функции waitsh_ группа становится открытой для включения в неё распределённых массивов.
Ожидание завершения обмена границами, а также приёма импортируемых или передачи экспортируемых элементов может производить только подзадача, запустившая соответствующую операцию.
Возвращается нулевое значение.
12.7Уничтожение группы границ
long delshg_ (ShadowGroupRef *ShadowGroupRefPtr);
*ShadowGroupRefPtr ссылка на группу границ.
Функция delshg_ уничтожает созданную функцией crtshg_ группу границ. После уничтожения группы ссылка на неё может использоваться по усмотрению пользовательской программы.
Группа границ может быть уничтожена функцией delshg_ только в том случае, если она была создана в текущей подзадаче и в текущем программном блоке (или его подблоке) (см. п. 8 и п. 10). Нельзя уничтожить группу границ, если не завершены запущенные ранее обмен границами, передача экспортируемых элементов или приём импортируемых элементов (см. п.п. 12.3, 12.4 и 12.5).
Группа границ может быть уничтожена также с помощью функции delobj_ (см.п.17.5).
Возвращается нулевое значение.
13Доступ к элементам распределенных массивов
13.1Копирование элемента распределенного массива
13.1.1Чтение элемента распределенного массива и присвоение ему значения
| long rwelm_ ( | long | FromArrayHeader[], |
| FromArrayHeader | | заголовок читаемого распределённого массива или указатель на читаемую область памяти. |
| ToArrayHeader | | заголовок распределённого массива, элемент которого будет модифицирован, или указатель на область памяти, в которую будет произведена запись. |
| IndexArray | | массив, i-й элемент которого содержит значение индекса читаемого или изменяемого элемента по (i+1)-му измерению. |
При использовании функции rwelm_ для чтения элемента распределённого массива:
| FromArrayHeader | | заголовок массива, элемент которого необходимо прочитать; |
| ToArrayHeader | | указатель на область памяти, в которую будет прочитан элемент; |
| IndexArray | | массив индексов читаемого элемента. |
При использовании функции rwelm_ для присвоения значения элементу распределённого массива:
| FromArrayHeader | | указатель на область памяти, содержащую присваиваемое значение; |
| ToArrayHeader | | заголовок массива, элементу которого будет присвоено значение; |
| IndexArray | | массив индексов модифицируемого элемента. |
Чтение производится на всех процессорах. При записи модификацию элемента распределённого массива осуществляют лишь те процессоры, в памяти которых размещён заданный элемент.
Число задаваемых в массиве IndexArray индексов должно быть равно размерности читаемого или модифицируемого массива.
Заданный при обращении к функции распределённый массив (читаемый или записываемый) должен быть отображён в процессорную систему, каждый элемент которой обязан принадлежать текущей процессорной системе.
Возвращается число прочитанных или записанных байтов (длина элемента читаемого или модифицируемого массива).
Замечание. Для избежания предупреждений, выдаваемых Фортран-компилятором при обращении к функции rwelm_ с различными типами переменных, в которые будет осуществляться чтение элемента распределённого массива, в системе поддержки предусмотрена функция
| long rwelmf_ ( | long | FromArrayHeader[], |
отличающаяся от функции rwelm_ вторым параметром:
| *ToArrayHeaderPtr | | указатель на область памяти, в которую будет прочитан элемент распределённого массива, приведённый к типу AddrType с помощью одной из функций, рассмотренных в п.17.7. |
Остальные параметры функции rwelmf_ аналогичны соответствующим параметрам функции rwelm_.
13.1.2Копирование элемента одного распределенного массива в элемент другого распределенного массива
| long copelm_ ( | long | FromArrayHeader[], |
| FromArrayHeader | | заголовок читаемого распределённого массива. |
| FromIndexArray | | массив, i-й элемент которого содержит значение индекса читаемого элемента по (i+1)-му измерению. |
| ToArrayHeader | | заголовок распределённого массива, в элемент которого будет произведена запись. |
| ToIndexArray | | массив, j-й элемент которого содержит значение индекса модифицируемого элемента по (j+1)-му измерению. |
Типы читаемого и записываемого элементов должны совпадать.
Как читаемый распределённый массив, так и записываемый должны быть отображены в процессорные системы, каждый элемент которых обязан принадлежать текущей процессорной системе.
Возвращается число скопированных байтов.
13.1.3Обобщенная пересылка элемента распределенного массива
| long elmcpy_ ( | long | FromArrayHeader[], |
| FromArrayHeader | | заголовок читаемого распределённого массива или указатель на читаемую область памяти. |
| FromIndexArray | | массив, i-й элемент которого содержит значение индекса читаемого элемента по (i+1)-му измерению. |
| ToArrayHeader | | заголовок распределённого массива, элемент которого будет модифицирован, или указатель на область памяти, в которую будет произведена запись. |
| ToIndexArray | | массив, j-й элемент которого содержит значение индекса модифицируемого элемента по (j+1)-му измерению. |
| *CopyRegimPtr | | режим копирования. |
Функция elmcpy_ является обобщением рассмотренных выше более специализированных функций rwelm_ и copelm_ .
Если FromArrayHeader и ToArrayHeader являются заголовками распределённых массивов, то типы элементов этих массивов должны совпадать.
Если FromArrayHeader (ToArrayHeader) является указателем на область памяти, то содержимое массива FromIndexArray (ToIndexArray) игнорируется. Копирование в этом случае определяется значением *CopyRegimPtr: ненулевое значение *CopyRegimPtr означает, что область памяти предполагается размещённой только на процессоре ввода/вывода. FromArrayHeader и ToArrayHeader не могут быть оба указателями на области памяти.
Как читаемый распределённый массив, так и записываемый должны быть отображены в процессорные системы, каждый элемент которых обязан принадлежать текущей процессорной системе.















