Spec-Zone.ru › GNU Fortran 9

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

Когда используется CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY, создаётся только маркер для компонент allocatable или pointer. Параметр 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) Для allocatable комассивов хранит 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-9.3.0/gfortran/_005fgfortran_005fcaf_005fregister.html

Spec-Zone.ru

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