Задача 1. Откомпилировать и выполнить программу 3.4.3.2., задающую базовую структуру MPI-программ. Запустить программу на количестве процессоров от 1 до 4.
Задача 2. Написать и отладить MPI-программу, в которой корневой процесс (процесс с рангом 0) выдает на консоль количество запущенных процессов, а также сообщение
“ Root process: Hello, world”,
а все остальные процессы выдают сообщение
“Slave process: my rank is xxxx”,
где xxx есть ранг соответствующего процесса.
Выполнить запуски программы на разном количестве процессоров.
Задача 3. Оттранслировать и запустить на выполнение программу 3.4.4.1.1. с параметром –np 2, в которой процесс с номером 0 “пингует” (посылает тестовое сообщение, в данном случае, длины 1) процессу с номером 1, и ждет от него ответного сообщения.
Задача 4. Написать программу, в которой процесс с номером 0 пингует все процессы в группе (кроме самого себя), посылая им однобайтовые сообщения и принимая от них такие же ответные сообщения.
Задача 5. Реализоватьпрограмму суммирования элементов вектора на заданном числе процессов (задается через аргументы): мастер-процесс посылает дочерним части вектора, дочерние возвращают суммы частей, после чего мастер-процесс их суммирует и выводит результат, время выполнения. Сравнить с последовательным вариантом суммирования для 5000, 10000, 50000 элементов (для замер времени выполнения использовать функции приложения 2).
|
|
Задача 6. Реализоватьпрограмму умножения матрицы A на вектор b: мастер-процесс посылает дочерним часть матрицы A(блок строк) и реплицирует вектор b, каждый процесс обрабатывает части, после чего все собирается мастер-процессом.
Задача 7. Реализоватьпрограмму умножения матрицы A на вектор b: мастер-процесс посылает дочерним части матрицы A(блок строк) и вектора b, дочерние анализируют часть А, определяют необходимые для вычислений части вектора b (случай разреженной матрицы), запрашивают у процессов, производят вычисления, частные результаты собираются мастер-процессом. Сравнить время выполнения с результатом зад.6.
Задача 8. Реализоватьпрограмму ленточного умножения матрицы A на матрицу В. Каждый процесс получает блок строк матрицы А и блок строк матрицы В. Запрашивает необходимые части матрицы В у других процессов. Проводит вычисления. Сбор результатов мастер-процессом.
Задача 10. Реализовать посылку сообщений (например, значений ранга) от всех процессов в группе, процессу с заданным рангом (этот ранг является входным параметром программы) с помощью функции MPI_Gather.
Задача 11. Оттранслировать и выполнить с параметром –np 4 программу 3.4.5.1.4., в которой функция MPI_Scatter используется для рассылки строк матрицы чисел с плавающей точкой по отдельным процессам.
|
|
Дополнить эту программу фрагментом, в котором отдельные процессы суммируют все элементы полученной строки и возвращают полученные результаты корневому процессу с помощью функции MPI_Gather.
Задача 13. Реализовать программу, которая
1) рассылает строки исходной прямоугольной матрицы по процессам;
2) находит максимальный элемент в каждом столбце этой матрицы,
3) умножает все элементы i-ой строки матрицы на максимальный элемент i-го столбца,
4) собирает полученную матрицу в процессе с номером 0.
5) сохраняет результат на машине процессора 0.
Приложение 1.
Активизация MPI в Visual C++
- Установите mpich2-1.0.7-win32-ia32.msi на все машины предполагаемого кластера. Например, в папку C:\Program Files\.
- Используя программу wmpiconfig.exe сконфигурировать рабочие места.
- Создать консольное приложение CLR в Microsoft Visual Studio
- Установите параметры компиляции проекта:
- Откройте диалоговое окно свойств проекта: Project -> <Название проекта> properties.
- Раскройте вкладку Configuration properties -> C/C++ -> General.
- Установите значение параметра Additional Include Directories: "C:\Program Files\MPICH2\Include".
- Раскройте вкладку Configuration properties -> Linker -> General.
- Установите значение параметра Additional Library Directories: "C:\Program Files\MPICH2\Lib".
- Раскройте вкладку Configuration properties -> Linker -> Input.
- Установите значение параметра Additional Dependencies: cxxd.lib mpi.lib.
- Скомпилируйте Вашу программу:
- Build -> Build <Название проекта>.
- Запустите Вашу программу:
- Откройте папку Вашего проекта в Far.
- Создайте на диске каталог с общим доступом (напр, D:\temp\).
- Скопируйте туда полученный ехе-файл (напр, sample.exe).
- Добавьте в папку Debug (!!!) файл (Shift + F4) с именем run.bat.
- Скопируйте строку ниже в run.bat:
"D:\Program Files\MPICH2\bin\mpiexec.exe" -np 3 "D:\temp\sample.exe" > out.txt
Примечание:
Аттрибут -np означает количество процессов в приложении.
- Сохраните изменения в run.bat (F2).
- Закройте run.bat (F10).
- Выполните run.bat (Enter).
- Результат выполнения программы посмотрите в файле out.txt папки Debug.
Приложение 2