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

MPI_TEST (request, flag, status)



request коммуникационный запрос (дескриптор)
flag true, если операция завершена (логический тип)
status статусный объект (статус)

Обращение к MPI_TEST возвращает flag = true, если операция, указанная в запросе, завершена. В таком случае статусный объект содержит информацию о завершенной операции; если коммуникационный объект был создан неблокирующей посылкой или приемом, то он входит в состояние дедлока, и обработка запроса устанавливается в MPI_REQUEST_NULL.Другими словами, вызов возвращает flag = false. Вэтом случае значение статуса не определено. MPI_TESTяв­ляется локальной операцией.

Статусный объект для операции посылки несет информацию, которая может быть получена обращением к MPI_TEST_CANCELLED.Можно вызывать MPI_TESTс нулевым или неактивным аргументом запроса. В таком случае операция возвращает flag = trueи emptyдля status.

Функции MPI_WAITи MPI_TESTмогут быть использованы как для завершения, так и для приема.

Пример.Простое использование неблокируемой операции.

CALL MPI_COMM_RANK(comm, rank, ierr) IF(rank.EQ.0) THEN

CALL MPI_ISEND(a(1), 10, MPI_REAL, 1, tag, comm, request, ierr) ! выполним вычисления до завершения операции посылки

CALL MPI_WAIT(request, status, ierr) ELSE

CALL MPI_IRECV(a(1), 15, MPI_REAL, 0, tag, comm, request, ierr) ! выполним вычисления до завершения операции приема

CALL MPI_WAIT(request, status, ierr) END IF

Семантика неблокирующих коммуникаций

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

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

CALL MPI_COMM_RANK(comm, rank, ierr) IF (RANK.EQ.0) THEN

CALL MPI_ISEND(a, 1, MPI_REAL, 1, 0, comm, r1, ierr)

CALL MPI_ISEND(b, 1, MPI_REAL, 1, 0, comm, r2, ierr) ELSE

CALL MPI_IRECV(a,1,MPI_REAL,0,MPI_ANY_TAG, comm, r1, ierr)

CALL MPI_IRECV(b, 1, MPI_REAL, 0, 0, comm, r2, ierr) END IF

CALL MPI_WAIT(r1,status) CALL MPI_WAIT(r2,status)

Первая посылка процесса с номером 0 будет соответствовать первому приему процесса с номером 1, даже если оба сообщения посланы до того, как процесс с номером 1 выполнит тот или другой прием.

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

Пример.Иллюстрация семантики продвижения.

CALL MPI_COMM_RANK(comm, rank, ierr) IF (RANK.EQ.0) THEN

CALL MPI_SSEND(a, 1, MPI_REAL, 1, 0, comm, ierr)

CALL MPI_SEND(b, 1, MPI_REAL, 1,1, comm, ierr) ELSE

CALL MPI_IRECV(a, 1, MPI_REAL, 0, 0, comm, r, ierr)

CALL MPI_RECV(b, 1, MPI_REAL, 0, 1, comm, ierr)

CALL MPI_WAIT(r, status, ierr) END IF

Первая синхронная посылка процесса с номером 0 обязана завершиться после того, как процесс с номером 1 установит соответствующий (неблокирующий) прием, даже если процесс 1 не достиг еще завершения вызова wait. Поэтому процесс с номером 0 будет продолжаться и выполнит вторую посылку, позволяя процессу 1 завершить передачу.

Если MPI_TEST,который завершает прием, вызывается повторно с тем же аргументом и соответствующая посылка стартовала, тогда вызов рано или поздно возвратит flag = true, если посылка не закрыта другим приемом. Если MPI_TEST,который завершает посылку, повторяется с тем же аргументом и соответствующий прием стартовал, тогда вызов рано или поздно возвратит flag = true,если не будет за­крыт другой посылкой.

2. Использование MPICH при выполнении MPI-программ.

Настройки VISUAL C++ 6.0 для работы с MPICH

Чтобы создать новый проект mpich.nt с MS Visual Studio, после того, как уже инсталлирован mpich.nt, необходимо выполнить следующие действия:

1. Открыть MS Visual Studio - Visual C++.

2. Создать новый проект с любым желаемым именем и в любой директории. Самым простым проектом является консольное приложение Win32 без файлов в нем.

3. Закончить работу мастера по установке нового проекта.

4. Перейти на Project->Settings или нажать клавишу Alt F7, чтобы вызвать диалоговое окно настройки параметров нового проекта.

5. Установить параметры для использования многопоточных (multithreaded) библиотек. Установить указатели Debug и Release режимов.

 

 

6. Установить include путь для всех целевых конфигураций: Argonne National Lab\MPICH.NT.1.2.1\SDK\include.

 

7. Установить lib путь для всех целевых конфигураций: Argonne National Lab\MPICH.NT.1.2.1\SDK\lib.

 

8. Добавить для всех конфигураций библиотеку ws2_32.lib (Это библиотека Microsoft Winsock2 library. Она по умолчанию находится в вашем пути к библиотекам). Добавить mpich.lib в режим release и mpichd.lib в режим debug.

 

 

9. Закрыть диалоговое окно установки проекта. Добавить к проекту исходные файлы.

 

10. Build.

 

Содержание отчета

Отчет должен включать:

1. Цель работы.

2. Описание и листинг разработанной программы.

Отчет должен быть составлен в соответствии с общими требованиями и правилами оформления документов в учебном процессе.

Варианты заданий

1. Напишите программу, в которой каждый процесс MPI печатает "Hello Word from process i for n", где i - номер процесса в MPI_COMM_WORLD, а n -размер MPI_COMM_WORLD.

2. Процесс с номером 1 посылает целое число процессу с номером 3. Процесс с номером 3 печатает свой номер и выводит на экран принятое число.

3. Процесс 0 пересылает целое число последнему процессу. Последний процесс выводит на экран свой номер и принятое число.

4. Процесс 3 пересылает целое число р всем ветвям параллельной программы.

5. Процесс 4 выводит на экран строку теста и свой номер.

6. Процессы 2 и 3 посылают процессу 4 целые числа. Процесс должен вычислить сумму этих чисел и вывести на экран результат.

7. Процессы 0 и 2 посылают процессу 5 целые числа. Процесс должен вычислить произведение этих чисел и вывести на экран результат.

8. Вычислить выражение (A-C)/D, где A, C,D – целые числа.

9. Решить уравнение .

10. Первый процесс получает целое число от нулевого процесса и затем делит его на 2. Целая часть получившегося числа передается второму процессу. Второй выводит это число на экран.

11. Запущено 5 процессов. Третий процесс передает четвертому целое число, увеличивает его на 2 и передает пятому. Пятый выводит на экран результат и свой номер.

12. Напишите программу, в которой определено только два процесса. В одном из них осуществляется генерация случайных чисел, количество которых задает пользователь. Второй процесс получает эти числа, складывает их, посылает результат в первый процесс. Результат выводится на экран.

13. Напишите программу, которая рассылает данные от процесса с номером 0 всем другим процессам по конвейеру. Этот означает, что процесс i должен принять данные от i-1 и послать их процессу i + 1, и так до тех пор, пока не будет достигнут последний процесс. Процесс с номером 0 читает данные (целые) от пользователя, пока не будет введено отрицательное целое число.

 

Контрольные вопросы

1. Перечислите особенности системы программирования MPI.

2. Какие функции должны обязательно использоваться в MPI-программах.

3. Какие базовые операции посылки и приема используются в MPI.

4. Приведите примеры коллективных операций в MPI.

5. Примеры операций блокирующей передачи и блокирующего приема.

6. Примеры функций для буферизации сообщений.

7. Дайте определение неблокирующего обмена.

8. Приведите примеры операций неблокирующего обмена.

9. Приведите примеры функций неблокирующего обмена.

 

Рекомендуемая литература

1. Букатов А.А., Дацюк В.Н., Жегуло А.И.. Программирование многопроцессорных вычислительных систем. Ростов-на-Дону. Издательство ООО «ЦВВР», 2003, 208 с.

2. Параллельное программирование в стандарте MPI: Учебно-методическое пособие по выполнению лабораторных работ / В.М.Баканов, Д.В.Осипов. -М.: МГУПИ, 2006. –76 c.: ил.

3. Антонов А.С. Параллельное программирование с использованием MPI: Учебное пособие. – М.: Изд-во МГУ, 2004. – 71с.

4. Шпаковский Г.И., Серикова Н.В. Программирование для многопроцессорных систем в стандарте MPI. – Минск.: БГУ, 2002. – 323 с.

 

 







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