Spec-Zone.ru › GNU Fortran 12

7.2.8 _gfortran_caf_register — Регистрация комассивов

Описание:

Регистрирует память для комассива и создаёт маркер для идентификации комассива. Подпрограмма вызывается как для комассивов с атрибутом SAVE , так и при использовании явного ALLOCATE высказывания. Если произошла ошибка, и STAT является NULL указателем, функция прервётся с выводом сообщения об ошибке и запуском завершения работы с ошибкой. Если ошибок не произошло и STAT присутствует, то он будет установлен в ноль. В противном случае он будет установлен в положительное значение, и, если не NULL, ERRMSG будет установлен в строку, описывающую ошибку. Подпрограмма будет регистрировать память, предоставленную в DATA -компоненте описателя массива DESC, если эта компонента не NULL, в противном случае будет выделена достаточная память и указатель на неё будет предоставлен в DATA -компоненте DESC. Описатель массива имеет ранг ноль, когда регистрируется скалярный объект, и описатель массива может быть недействительным после вызова _gfortran_caf_register. Когда массив должен быть выделен, описатель сохраняется.

Для CAF_REGTYPE_COARRAY_STATIC и CAF_REGTYPE_COARRAY_ALLOC, переданный размер — это запрашиваемый размер в байтах. Для CAF_REGTYPE_LOCK_STATIC, CAF_REGTYPE_LOCK_ALLOC и CAF_REGTYPE_CRITICAL — это размер массива или единица для скаляра.

Когда используется CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY, тогда создаётся только маркер для компонент с динамическим выделением или указателями. Параметр SIZE тогда не используется. Напротив, при указании CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY, маркер должен быть зарегистрирован предыдущим вызовом с типом регистр CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY, и либо память, указанная в поле data-ptr описателя DESC, регистрируется, либо память выделяется, если data-ptr является NULL.

Синтаксис:

void caf_register (size_t size, caf_register_t type, caf_token_t *token, gfc_descriptor_t *desc, int *stat, char *errmsg, size_t errmsg_len)

Аргументы:
size Для обычных комассивов — размер комассива, подлежащего выделению, в байтах; для типов блокировок и типов событий — число элементов.
type один из типов caf_register_t.
token intent(out) Непрозрачный указатель, идентифицирующий комассив.
desc intent(inout) (Псевдо)описатель массива.
stat intent(out) Для комассивов с динамическим выделением, сохраняет значение STAT =; может быть NULL
errmsg intent(out) В случае ошибки устанавливается сообщение об ошибке; может быть NULL
errmsg_len размер буфера errmsg.
ПРИМЕЧАНИЯ

Нединамически выделяемые комассивы должны быть зарегистрированы до использования удалёнными изображениями. Для гарантии этого, они должны быть зарегистрированы до начала основной программы. Этого можно достичь, создав конструкторские функции. Именно это делает GCC, таким образом, что и для нединамически выделяемых комассивов память выделяется и не используется статическая память. Маркер позволяет идентифицировать комассив; для процессора маркер — это указатель без алиасов. Библиотека может, например, хранить базовый адрес комассива в маркере, некоторый дескриптор или более сложную структуру. Библиотека также может хранить описатель массива DESC, если его ранг не равен нулю.

Для типов блокировок значение должно использоваться только для проверки состояния выделения. Обратите внимание, что для критических блоков блокировка требуется только на одном изображении; в операторе блокировки процессор всегда должен передавать индекс изображения равный единице для переменных блокировки критического блока (CAF_REGTYPE_CRITICAL). Для типов блокировок и переменных критических блоков начальное значение должно быть разблокировано (соответственно, не в критической секции), например, значение false; для типов событий начальное состояние должно быть без события, например, ноль.

Далее: _gfortran_caf_deregister, Предыдущее: _gfortran_caf_stopped_images, Вверх: Документация ABI функций [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gfortran/_005fgfortran_005fcaf_005fregister.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API