Spec-Zone.ru › GNU Fortran 14

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 необходимо зарегистрировать с помощью предыдущего вызова с типом 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 Для обычных coarrays — размер coarray в байтах, который нужно выделить; для типов блокировки и событий — количество элементов.
type Один из типов caf_register_t.
token intent(out) Непрозрачный указатель, идентифицирующий coarray.
desc intent(inout) (Псевдо)описание массива.
stat intent(out) Для coarrays, объявленных как allocatable, хранит значение STAT=; может быть NULL
errmsg intent(out) При возникновении ошибки, устанавливается в сообщение об ошибке; может быть NULL
errmsg_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

Spec-Zone.ru

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