Здавалка
Главная | Обратная связь

MPI_BUFFER_DETACH ( buffer_addr, size)



buffer_addr начальный адрес буфера (альтернатива)
size размер буфера в байтах (целое)

Вызов возвращает адрес и размер отключенного буфера. Операция будет блокирована, пока находящееся в буфере сообщение не будет передано. После выполнения этой функции пользователь может повторно использовать или перераспределять объем, занятый буфером.

Пример.Обращение к функциям использования буферов.

#define BUFFSIZE 10000

int size

char *buff;

MPI_Buffer_attach( malloc(buf, BUFFSIZE);

/* буфер может теперь быть использован MPI_Bsend */

MPI_Buffer_detach( &buff,&size); /* размер буфера уменьшен до нуля */
MPI_Buffer_attach( buff, size); /* буфер на 10000 байтов доступен снова */

Если никакого буфера не подключено, то MPI ведет себя, как если бы с процессом был связан буфер нулевого размера.

Неблокирующий обмен

На многих системах можно улучшить характеристики путем совмещения во времени процессов обмена и вычислений. Механизмом, который часто приводит к лучшим характеристикам, является неблокирующий обмен.

Неблокирующий вызов инициирует операцию посылки, но не завершает ее. Вызов начала посылки будет возвращать управление перед тем, как сообщение будет послано из буфера отправителя. От­дельный вызов для завершения посылки необходим, чтобы завершить обмен, то есть убедиться, что данные уже извлечены из буфера отпра­вителя.

Посылка данных из памяти отправителя может выполняться па­раллельно с вычислениями, выполняемыми на процессе-отправителе после того, как передача была инициирована до ее завершения. Ана­логично, неблокирующий вызов инициирует операцию приема, но не завершает ее. Вызов будет закончен до записи сообщения в приемный буфер. Необходим отдельный вызов завершения приема, чтобы за­вершить операцию приема и проверить, что данные получены в при­емный буфер. Посылка данных в память получателя может выпол­няться параллельно с вычислениями, производимыми после того, как прием был инициирован, и до его завершения. Использование неблокируемого приема позволит также избежать системной буферизации и копирования память-память, когда информация появилась прежде­временно на приемном буфере.

Неблокируемые вызовы начала посылки могут использовать четы­ре режима: стандартный, буферизуемый, синхронный и по готовности с сохранением их семантики. Передачи во всех режимах, исключая режим по готовности, могут стартовать вне зависимости от того, был ли инициирован соответствующий прием; неблокируемая посылка по готовности может быть начата, только если инициирован соответст­вующий прием. Во всех случаях вызов начала посылки является ло­кальным: он заканчивается немедленно, безотносительно к состоянию других процессов. Если при вызове обнаруживается нехватка некото­рых системных ресурсов, тогда он не может быть выполнен и возвра­щает код ошибки.

Вызов завершения посылки заканчивается, когда данные извлече­ны из буфера отправителя. Если режим передачи синхронный, тогда передача может завершиться, только если соответствующий прием стартовал, то есть прием инициирован и соответствует передаче. В этом случае вызов sendявляется нелокальным. Синхронная неблоки­рующая передача может быть завершена, если перед вызовом receiveимеет место соответствующий неблокирующий прием. Если исполь­зуется режим буферизуемой передачи, то сообщение должно быть бу­феризовано, если не имеется ждущего приема. В этом случае вызов sendявляется локальным и обязан быть успешным независимо от со­стояния соответствующего приема. Если используется стандартный режим передачи, тогда вызов sendможет заканчиваться перед тем, как имеет место соответствующий прием, если сообщение буферизован­ное. С другой стороны, sendможет не завершаться до тех пор, пока имеет место соответствующий прием и сообщение было скопировано в приемный буфер. Неблокирующие передачи могут соответствовать блокирующим приемам и наоборот.

Коммуникационные объекты

Неблокирующие обмены используют скрытые запросы,чтобы идентифицировать операции обмена и сопоставить операцию, которая инициирует обмен с операцией, которая заканчивает его. Они являют­ся системными объектами, которые становятся доступными в процес­се обработки. Объект запроса указывает различные свойства операции обмена, такие как режим передачи, связанный с ней буфер обмена, ее контекст, тэг и номер процесса-приемника, которые используются для посылки сообщения, или тэг и номер процесса-отправителя, которые используются для приема. В дополнение этот объект хранит инфор­мацию о состоянии ждущих операций обмена.

Инициация обмена

Далее используются те же обозначения, что и для блокирующего обмена: преффикс B, S или R используются для буферизованного, синхронного режима или для режима готовности, преффикс I - для неблокирующего обмена.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.