Spec-Zone.ru › GNU Fortran 11

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.
ПРИМЕЧАНИЯ

Не-allocatable комассивы должны быть зарегистрированы перед использованием с удалённых изображений. Для гарантии этого они должны быть зарегистрированы до начала основной программы. Это можно достичь, создав конструкторские функции. Так поступает GCC, чтобы память для не-allocatable комассивов также выделялась, а не использовалась статическая память. Маркер позволяет идентифицировать комассив; для процессора маркер — это непересекающийся указатель. Библиотека может, например, хранить базовый адрес комассива в марке, некоторый дескриптор или более сложную структуру. Библиотека также может хранить описатель массива 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-11.1.0/gfortran/_005fgfortran_005fcaf_005fregister.html

Spec-Zone.ru

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