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