7.2.8 _gfortran_caf_register — Регистрация coarrays
- Описание:
-
Регистрирует память для coarray и создаёт токен для идентификации coarray. Эта процедура вызывается как для coarrays с атрибутом
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, создаётся только токен для компоненты, объявленной как allocatable или указатель. ПараметрSIZEпри этом не используется. Напротив, когда указанCAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY, токен token необходимо зарегистрировать с помощью предыдущего вызова с типом regtypeCAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY, и либо регистрируется память, указанная в data-ptr описания DESC, либо происходит выделение, если data-ptrNULL. - Синтаксис:
-
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 Для обычных coarrays — размер coarray в байтах, который нужно выделить; для типов блокировки и событий — количество элементов. type Один из типов caf_register_t. token intent(out) Непрозрачный указатель, идентифицирующий coarray. desc intent(inout) (Псевдо)описание массива. stat intent(out) Для coarrays, объявленных как allocatable, хранит значение STAT=; может быть NULLerrmsg intent(out) При возникновении ошибки, устанавливается в сообщение об ошибке; может быть NULLerrmsg_len Размер буфера errmsg. - ПРИМЕЧАНИЯ
-
Не-allocatable coarrays должны быть зарегистрированы до использования из удалённых изображений. Для обеспечения этого они должны быть зарегистрированы до начала основной программы. Это можно достичь, создав функции-конструкторы. Именно это делает GCC, чтобы память также выделялась для не-allocatable coarrays и не использовалась статическая память. Токен позволяет идентифицировать coarray; для процессора токен — это неперекрывающийся указатель. Библиотека может, например, хранить базовый адрес coarray в токене, некотором обработчике или более сложном структуре. Библиотека также может хранить описание массива DESC, когда его ранг не нулевой.
Для типов блокировок значение используется только для проверки статуса выделения. Обратите внимание, что для критических блоков блокировка требуется только на одном изображении; в операторе блокировки процессор всегда должен передать индекс изображения единицу для переменных блокировки критических блоков (
CAF_REGTYPE_CRITICAL). Для типов блокировок и переменных критических блоков начальное значение должно быть разблокировано (соответственно, не в критической секции), например, значение false; для типов событий — начальное состояние — отсутствие события, например, ноль.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gfortran/_005fgfortran_005fcaf_005fregister.html