Spec-Zone.ru › GNU Fortran 10

8.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 это размер массива или 1 для скаляра.

Когда используется CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY, создаётся только маркер для компонента с выделением памяти или указателя. Параметр SIZE при этом не используется. Напротив, когда задано CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY, маркер token необходимо зарегистрировать предыдущим вызовом с типом regtype 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-10.2.0/gfortran/_005fgfortran_005fcaf_005fregister.html

Spec-Zone.ru

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