Студопедия
МОТОСАФАРИ и МОТОТУРЫ АФРИКА !!!


Авиадвигателестроения Административное право Административное право Беларусии Алгебра Архитектура Безопасность жизнедеятельности Введение в профессию «психолог» Введение в экономику культуры Высшая математика Геология Геоморфология Гидрология и гидрометрии Гидросистемы и гидромашины История Украины Культурология Культурология Логика Маркетинг Машиностроение Медицинская психология Менеджмент Металлы и сварка Методы и средства измерений электрических величин Мировая экономика Начертательная геометрия Основы экономической теории Охрана труда Пожарная тактика Процессы и структуры мышления Профессиональная психология Психология Психология менеджмента Современные фундаментальные и прикладные исследования в приборостроении Социальная психология Социально-философская проблематика Социология Статистика Теоретические основы информатики Теория автоматического регулирования Теория вероятности Транспортное право Туроператор Уголовное право Уголовный процесс Управление современным производством Физика Физические явления Философия Холодильные установки Экология Экономика История экономики Основы экономики Экономика предприятия Экономическая история Экономическая теория Экономический анализ Развитие экономики ЕС Чрезвычайные ситуации ВКонтакте Одноклассники Мой Мир Фейсбук LiveJournal Instagram

Неблокированные вызовы




MPI обеспечивает возможность неблокированного выполнения операций передачи данных между двумя процессами. Наименование неблокирующих аналогов образуется из названий соответствующих функций путем добавления префикса I(Immediate).

Список параметров неблокирующих функций содержит весь набор параметров исходных функций и один дополнительный параметр request с типом MPI_Request (в функции MPI_Irecv отсутствует также параметр status):

int MPI_Isend(void *buf, int count, MPI_Datatype type, int dest,

int tag, MPI_Comm comm, MPI_Request *request)

int MPI_Issend(void *buf, int count, MPI_Datatype type, int dest,

int tag, MPI_Comm comm, MPI_Request *request)

int MPI_Ibsend(void *buf, int count, MPI_Datatype type, int dest,

int tag, MPI_Comm comm, MPI_Request *request)

int MPI_Irsend(void *buf, int count, MPI_Datatype type, int dest,

int tag, MPI_Comm comm, MPI_Request *request)

int MPI_Irecv(void *buf, int count, MPI_Datatype type, int source,

int tag, MPI_Comm comm, MPI_Request *request)

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

Проверка состояния выполняемой неблокирующей операции передачи данных выполняется при помощи функции:

int MPI_Test( MPI_Request *request, int *flag, MPI_status *status),

где

- request- дескриптор операции, определенный при вызове неблокирующей

функции,

- flag- результат проверки (=true, если операция завершена),

- status- результат выполнения операции обмена (только для завершенной

операции).

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

MPI_Isend(buf,count,type,dest,tag,comm,&request);

do {

MPI_Test(&request,&flag,&status)

} while ( !flag );

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

int MPI_Wait( MPI_Request *request, MPI_status *status).

Кроме рассмотренных, MPI содержит ряд дополнительных функций проверки и ожидания неблокирующих операций обмена:




- MPI_Testall- проверка завершения всех перечисленных операций обмена,

- MPI_Waitall– ожидание завершения всех операций обмена,

- MPI_Testany- проверка завершения хотя бы одной из перечисленных

операций обмена,

- MPI_Waitany– ожидание завершения любой из перечисленных операций

обмена,

- MPI_Testsome- проверка завершения каждой из перечисленных операций

обмена,

- MPI_Waitsome- ожидание завершения хотя бы одной из перечисленных

операций обмена и оценка состояния по всем операциям.

В примере показан обмен ем сообщений между двумя соседями в топологии кольцо (Nearest neighbor exchange in ring topology).





Дата добавления: 2015-05-10; просмотров: 265; Опубликованный материал нарушает авторские права? | Защита персональных данных | ЗАКАЗАТЬ РАБОТУ


Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Для студента самое главное не сдать экзамен, а вовремя вспомнить про него. 10137 - | 7555 - или читать все...

Читайте также:

 

35.170.81.210 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.


Генерация страницы за: 0.002 сек.