Spec-Zone.ru › GNU Fortran 5

8.2.5 _gfortran_caf_register — Регистрация комассивов

Описание:
Выделяет память для комассива и создает маркер для идентификации комассива. Функция вызывается как для комассивов с атрибутом SAVE, так и при использовании явного оператора ALLOCATE. Если произошла ошибка, и STAT является NULL указателем, функция прервётся с выводом сообщения об ошибке и запуском завершения обработки ошибки. Если ошибки не произошло, и STAT присутствует, он будет установлен в ноль. В противном случае он будет установлен в положительное значение, и, если не NULL, ERRMSG будет установлен на строку, описывающую ошибку. Функция вернёт указатель на запрошенную память для локального изображения, как это делала бы функция malloc.

Для CAF_REGTYPE_COARRAY_STATIC и CAF_REGTYPE_COARRAY_ALLOC, переданный размер — это размер в байтах, запрошенный. Для CAF_REGTYPE_LOCK_STATIC, CAF_REGTYPE_LOCK_ALLOC и CAF_REGTYPE_CRITICAL — это размер массива или 1 для скаляра.

Синтаксис:
void *caf_register (size_t size, caf_register_t type, caf_token_t *token, int *stat, char *errmsg, int errmsg_len)
Аргументы:
size Для обычных комассивов — размер комассива в байтах; для типов блокировок и событий — количество элементов.
type один из типов caf_register_t.
token intent(out) Непрозрачный указатель, идентифицирующий комассив.
stat intent(out) Для изменяемых комассивов хранит значение STAT; может быть NULL
errmsg intent(out) При возникновении ошибки устанавливает сообщение об ошибке; может быть NULL
errmsg_len размер буфера errmsg.
ПРИМЕЧАНИЯ
Неизменяемые комассивы необходимо зарегистрировать перед использованием на удалённых изображениях. Для гарантии этого их нужно зарегистрировать до начала основной программы. Это можно сделать, создав функции-конструкторы. Именно так поступает GCC, чтобы память для комассивов, даже неизменяемых, также выделялась и не использовалась статическая память. Маркер позволяет идентифицировать комассив; для процессора маркер является непересекающимся указателем. Библиотека может, например, хранить базовый адрес комассива в маркере, какой-либо дескриптор или более сложную структуру.

Для обычных комассивов возвращаемый указатель используется для доступа на локальном изображении. Для типов блокировок значение используется только для проверки статуса выделения. Обратите внимание, что для критических блоков блокировка требуется только на одном изображении; в операторе блокировки процессор всегда должен передавать индекс изображения, равный одному, для переменных блокировки критических блоков (CAF_REGTYPE_CRITICAL). Для типов блокировок и переменных критических блоков начальное значение должно быть разблокировано (соответственно, не в критической секции), например, ложь; для типов событий начальное состояние должно быть без события, например, ноль.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gfortran/_005fgfortran_005fcaf_005fregister.html

Spec-Zone.ru

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