MPI_BUFFER_DETACH ( buffer_addr, size)
Вызов возвращает адрес и размер отключенного буфера. Операция будет блокирована, пока находящееся в буфере сообщение не будет передано. После выполнения этой функции пользователь может повторно использовать или перераспределять объем, занятый буфером. Пример.Обращение к функциям использования буферов. #define BUFFSIZE 10000 int size char *buff; MPI_Buffer_attach( malloc(buf, BUFFSIZE); /* буфер может теперь быть использован MPI_Bsend */ MPI_Buffer_detach( &buff,&size); /* размер буфера уменьшен до нуля */ Если никакого буфера не подключено, то MPI ведет себя, как если бы с процессом был связан буфер нулевого размера. Неблокирующий обмен На многих системах можно улучшить характеристики путем совмещения во времени процессов обмена и вычислений. Механизмом, который часто приводит к лучшим характеристикам, является неблокирующий обмен. Неблокирующий вызов инициирует операцию посылки, но не завершает ее. Вызов начала посылки будет возвращать управление перед тем, как сообщение будет послано из буфера отправителя. Отдельный вызов для завершения посылки необходим, чтобы завершить обмен, то есть убедиться, что данные уже извлечены из буфера отправителя. Посылка данных из памяти отправителя может выполняться параллельно с вычислениями, выполняемыми на процессе-отправителе после того, как передача была инициирована до ее завершения. Аналогично, неблокирующий вызов инициирует операцию приема, но не завершает ее. Вызов будет закончен до записи сообщения в приемный буфер. Необходим отдельный вызов завершения приема, чтобы завершить операцию приема и проверить, что данные получены в приемный буфер. Посылка данных в память получателя может выполняться параллельно с вычислениями, производимыми после того, как прием был инициирован, и до его завершения. Использование неблокируемого приема позволит также избежать системной буферизации и копирования память-память, когда информация появилась преждевременно на приемном буфере. Неблокируемые вызовы начала посылки могут использовать четыре режима: стандартный, буферизуемый, синхронный и по готовности с сохранением их семантики. Передачи во всех режимах, исключая режим по готовности, могут стартовать вне зависимости от того, был ли инициирован соответствующий прием; неблокируемая посылка по готовности может быть начата, только если инициирован соответствующий прием. Во всех случаях вызов начала посылки является локальным: он заканчивается немедленно, безотносительно к состоянию других процессов. Если при вызове обнаруживается нехватка некоторых системных ресурсов, тогда он не может быть выполнен и возвращает код ошибки. Вызов завершения посылки заканчивается, когда данные извлечены из буфера отправителя. Если режим передачи синхронный, тогда передача может завершиться, только если соответствующий прием стартовал, то есть прием инициирован и соответствует передаче. В этом случае вызов sendявляется нелокальным. Синхронная неблокирующая передача может быть завершена, если перед вызовом receiveимеет место соответствующий неблокирующий прием. Если используется режим буферизуемой передачи, то сообщение должно быть буферизовано, если не имеется ждущего приема. В этом случае вызов sendявляется локальным и обязан быть успешным независимо от состояния соответствующего приема. Если используется стандартный режим передачи, тогда вызов sendможет заканчиваться перед тем, как имеет место соответствующий прием, если сообщение буферизованное. С другой стороны, sendможет не завершаться до тех пор, пока имеет место соответствующий прием и сообщение было скопировано в приемный буфер. Неблокирующие передачи могут соответствовать блокирующим приемам и наоборот. Коммуникационные объекты Неблокирующие обмены используют скрытые запросы,чтобы идентифицировать операции обмена и сопоставить операцию, которая инициирует обмен с операцией, которая заканчивает его. Они являются системными объектами, которые становятся доступными в процессе обработки. Объект запроса указывает различные свойства операции обмена, такие как режим передачи, связанный с ней буфер обмена, ее контекст, тэг и номер процесса-приемника, которые используются для посылки сообщения, или тэг и номер процесса-отправителя, которые используются для приема. В дополнение этот объект хранит информацию о состоянии ждущих операций обмена. Инициация обмена Далее используются те же обозначения, что и для блокирующего обмена: преффикс B, S или R используются для буферизованного, синхронного режима или для режима готовности, преффикс I - для неблокирующего обмена. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|