
- •Федеральное агенство связи Поволжская государственная академия телекоммуникаций и информатики
- •Введение
- •Реализация и настройка кластера интерфейса mpi в среде ms Windows 9x/nt/xp
- •Рекомендуемая литература
- •Лабораторная работа № 1 Компиляция программ, использующих интерфейс mpi
- •Подготовка к работе
- •Контрольные вопросы
- •3. Задание
- •4. Методические указания
- •4. Листинг программы
- •5. Примечания
- •Лабораторная работа № 2 Использование функции групповой рассылки данных
- •Подготовка к работе
- •Контрольные вопросы
- •3. Задание
- •4. Методические указания
- •5. Примечания
- •Лабораторная работа № 3 Вычисление числа π
- •Подготовка к работе
- •Контрольные вопросы
- •Задание
- •4. Методические указания
- •5. Пример выполнения
- •6. Примечания
- •Лабораторная работа № 4 Передача данных отдельным процессам
- •Задание
- •Методические указания
- •Алгоритм
- •Пример выполнения
- •Лабораторная работа № 5 Матричные вычисления
- •Контрольные вопросы
- •Приложение а
- •Приложение в Краткий справочник функций mpi
- •Сообщения «точка-точка»
- •Групповые сообщения
- •Типы пересылаемых данных
- •Аргументы
Задание
Написать программу пересылающую n байтов по цепочке: от нулевого процесса первому процессу, первый процесс ко второму, и так далее. Последний процесс отсылает данные обратно нулевому процессу. При этом требуется замерить время работы полного цикла, а также время пересылки между отдельными процессами.
Методические указания
В начале работы программы организуцется буфер для передачи. Размер буфера должен браться из аргумента ком. Строки, переданной прогроамме при запуске. Под буфер выделяется место в памяти. После этого можно начатьт передавать данные. Нулевой процесс заполняет этот буфер какими либо данными (можно просто нулями) и посылает их первому процессу. Посылка происходит с помощью команды:
MPI_Send ( буфер, размер буфера, MPI_CHAR, 1, 1, MPI_COMM_WORLD).
При этом происходит посылка первому процессу данного буфера. Стоит обратить внимание на идентификацию посылки. Он должен совпадать у отправителя и у получателя.
Остальные процессы должны по цепочке передавать это сообщение друг другу. Т.е. сначала вызывается функция:
MPI_Recv ( буфер, размер буфера, MPI_CHAR, номер пред. процесса, номер процесса MPI_COMM_WORLD, & statuc);
Потом вызывается
MPI_Send ( буфер, размер буфера, MPI_CHAR, номер след.процесса, номер след.процесса, MPI_COMM_WORLD);
Последний процесс отсылает сообщение первому.
Первый процесс получает от посоледнего данные с помощью функции
MPI Recv ( буфер, размер буфера, MPI_CHAR, номер после. процесса, 0, MPI_COMM_WOPLD & status);
Обратите внимание: сообщения отсылаются строго в последовательности передачи, т.е. фукции MPI_Recv(), MPI_Send() выполняются с блокировкой, т.е. программа ждет получения всего буфера.
Алгоритм
MPI_Init()
…
Настройка буфера
MPI_Recv()
MPI_Send()
Сообщение о Gdiffnorm получении
Заполнение буфера данными
MPI_Recv()
MPI_Send()
Сообщение о получении
MPI_Finalize()
Да
Нет
Схема прохождения сигнала
Процесс 1
Процесс 2
Процесс 3
Процесс n
Send Recv
Пример выполнения
Посылка данных в цикл (1024 байтов) …
Процесс номер 1 получил 1024 байта от процесса 0 … 0.0001242 сек
Процесс номер 1 получил 1024 байта от процесса 1 … 0.0018743 сек
Процесс номер 1 получил 1024 байта от процесса 2 … 0.0002536 сек
Процесс номер 1 получил данные от процесса 3: общее время… 0.0035021 сек
Лабораторная работа № 5 Матричные вычисления
Подготовка к работе
Необходимо иметь в наличии работающий кластер на базе MPICH Уметь программировать на языке С. Ознакомится с методом решения СЛАУ методом решения Якоби.
Контрольные вопросы
Каким образом организуеия совместная работа всех процессов с одной матрицей.
Как происходит обработка матрицы несколькими процессами.
Что делает каждый процесс с общей матрицей при расчете.
Описишите принцип метода Якоби.
Что делает функция MPI_Allreduce()
С какой точностью производится расчет?
Что такое точечная посылка?
Чем отличается посылка с блокировкой от посылки без блокировки?
Как процесс получает именно свое сообщение?
Почему нужно использовать MPI_WTime для получения времени?
Из-за чего могут возникать задержки в передаче данных между процессами?
Задание
Для решения системы СЛАУ методом Якоби вам требуется решить уравнение Лапласа. Для это требуется создать матрицу и использовать данный алгоритм.
Методические указания
Каждый процесс создает матрицу разрера 12Х12 ячеек, которые будут обрабатываться четырьмя процессами. Исходная матрица разделяется на четыре части, каждая из них обрабатывается отдельным процессом, используя функцию:
for (i,j) xnew [i][ j] = (x[ i + 1][ j] + x[ i- I][j] + x[i][j + 1] + х [i][ j - 1]/4;
for(i,j) x [i][j ]= xnew [i][j].
Для этого нам потребуется каждому процессу иметь доступ к следующим элементам матрицы:
X [0 ][ j ], x[ n – 1] [j], x [ i ][ 0], x [i ] [n - 1].
Каждый процесс будет обрабатывать ¼ часть матрицы, деля ее по горизонтали. Затем результат работы четырех процессов суммируется нулевым процессом.
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
В данной примерной матрице номерами указан какую ячейку обрабатывает каждый процесс, где –1 суммируется нулевым процессом. Всего выполняется 100 итераций. Для сбора результатов от процессов используйте функцию MPI_Allreduce() с параметром MPI_SUM.
А
MPI_Init()
…
лгоритм
Xlocal ( I, J) = rank
Xlocal (0, J) = -1
Xlocal (size, J) = -1
MPI Send (xlocal[maxn/size], maxn MPI_DOUBLE, rank + 1, 0, … ); MPI_
MPI_Recv(xlocal[0], maxn, MPI_DOUBLE, rank+1,1,… );
MPI_Send(xloca [1],maxn,MPI_DOUBLE,rank+1,1,…)
MPI_ Send (xlocal [maxn/size+1], maxn
MPI_Double, rank + 1,
0, … );
Co++, diff =
0
xnew(i) [j] = (xI [i] [j+1] +xI [I][ j-1] + x
[i+1] [j]+x1 [i-1] [ j ] / 4;
Diffnorm += (xn [ I][ j] – xl [I] [ j] )*(xn [i][ j] – xl [i]
[j] );
MPI_ALLreduce (&diffnorm, &gdiffnorm,1,... );
Xlocal [i] [ j] + xnew [i][ j] ;
Gdiffnorm + Gdiffnorm
Вывести тек.значение
gdiffnorm п
MPI-Finalize ()
Пример выполнения
At iteration 1, diff is 3. 791438e + 000
At iteration 2, diff is 3. 948557e + 000
At iteration 3, diff is 3. 324536e + 000
At iteration 4, diff is 3. 014272e + 000
At iteration 5, diff is 3. 266808e + 001
At iteration 6, diff is 3. 992270e + 001
At iteration 7, diff is 3. 063208e + 001
At iteration 8, diff is 3. 354581e + 001
At iteration 9, diff is 3. 796424e + 001
At iteration 10, diff is 3. 345620e + 001
. . .
At iteration 91, diff is 1. 077600e + 002
At iteration 92, diff is 1. 033949e + 002
At iteration 93, diff is 9. 920652e + 003
Final solution is
-1.00000 –1.00000 –1.00000 –1.00000 –1.00000 –1.00000 –1.00000 –1.00000 –1.00000
-1.00000 –1.00000 –1.00000
3.000000 0.892898 0.065635 -0.299648 -0.470180 -0.539828 -0.539828 -0.470180
0.892898 3.00000
3.000000 1.505402 0.668228 -0.043031 -0.151248 -0.043031 0.204468 0.668228
1.505402 3.000000
2.000000 1.459421 0.895371 0.489475 0.241411 0.125389 0.125386 0.241411 0.489475 0.895371 1.459421 2.000000
2.000000 1.435428 0.961518 0.612675 0.389030 0.280790 0.280790 0.389030 0.612675 0.961518 1.435428 2.000000
2.000000 1.318993 0.899183 0.605903 0.415499 0.321700 0.415499 0.605903 0.899183
1.318993 2.000000
1.0000000 0.939427 0.706611 0.491070 0.339122 0.262020 0.262020 0.33122 0.491070 0.706611 0.939427 1.000000
1.000000 0.730175 0.493062 0.307470 0.181674 0.118464 0.118464 0.181674
0.307470 0.493062 0.730175 1.000000
1.000000 0.486443 0.224600 0.059331 –0.044069 –0.094514 -0.094514 -0.044069 0.059331 0.224600 0.486443 1.000000
0.000000 -0.010469 -0.143252 -0.254610 -0.327503 -0.363090 -0.363090 -0.327503 -0.254610 -0.143252 -0.010469 0.000000
0.000000 –0.386115 -0.534537 -0.609828 -0.670933 –0.670933 -0.651626 -0.609828 -0.534537 -0.386115 0.000000
-1.000000 –1.000000 –1.000000 –1.000000 –1.000000 –1.000000 –1.000000 –1.000000 –1.000000 –1.000000 –1.000000 –1.000000