Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / lecture-4.ppt
Скачиваний:
0
Добавлен:
11.06.2024
Размер:
102.91 Кб
Скачать

Задание 3.

1.Написать параллельную программу вычисления суммы S элементов матрицы

Sparallel = ∑ A(i,j).

2.Значения матрицы А инициализируются в программе (ввода матрицы

нет).

3.Сравнить значение Sparallel c суммой Sserial последовательной программы.

4.Применить программу к матрице возможно большего размера.

5.Измерить время параллельного и последовательного счета.

6.Определить ускорение параллельной программы на 2, 4, 8, 16 процессорах.

Гонки минимальное время расчета матрицы максимального размера на 8 процессорах.

Программирование в MPI

1. Операции “точка-точка” (повторение)

1.1 Передача с блокировкой (стандартный режим) MPI_SEND (BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERR)

1.2 Прием с блокировкой MPI_RECV(BUF,COUNT,DATATYPE,SOURCE,TAG,COMM,STATUS,IERR

Блокировка – приостановка выполнения процесса до выполнения некоторого условия

MPI_RECV – возвращает управление, только когда буфер приема получит сообщение.

MPI_SEND – возвращает управление, когда буфер отправки может быть повторно использован, то есть либо:

1)данные сообщения и их оболочка скопированы в системный буфер, либо

2)данные сообщения и их оболочка переданы непосредственно в буфер приема.

1. Операции “точка-точка” (новые сведения)

стандартный

MPI_SEND,

буферизованный

MPI_BSEND,

синхронный

MPI_SSEND,

по готовности

MPI_RSEND

1.3 Передача с блокировкой (буферизованный, синхронный, по готовности)

MPI_SEND (BUF,COUNT,DATATYPE,DEST,TAG,COMM,IERR)

MPI_BSEND (BUF,COUNT,DATATYPE,DEST,TAG,COMM,IERR) MPI_SSEND (BUF,COUNT,DATATYPE,DEST,TAG,COMM,IERR) MPI_RSEND (BUF,COUNT,DATATYPE,DEST,TAG,COMM,IERR)

1.3.1. Передача с буферизацией

MPI_BSEND (BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERR) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERR

BUF

- буфер передачи (выделяет пользователь !)

COUNT

- состоящий из COUNT элементов (возможно=0)

DATATYPE

- типа DATATYPE

DEST

- передается процессу с номером DEST в коммуникаторе

 

COMM

TAG

- с тэгом сообщения TAG

COMM

- коммуникатор взаимодействующих процессов

IERR

- код ошибки

Схема использования памяти при передаче с буферизацией

Процессор 1

Процессор 2

(отправитель)

(получатель)

MPI_BSEND(BUFS,…)

MPI_RECV (BUFR, …)

BUFS :

BUFR :

USER :

 

Блокировка – пока данные сообщения не скопированы в буфер пользователя

1.3.1.1. Выделение пользовательского буфера

MPI_BUFFER_ATTACH

(BUF,SIZE,IERR)

INTEGER SIZE, IERR

 

BUF

- массив BUF объявляется буфером для MPI (один на

процесс)

 

 

SIZE

- размер буфера в байтах

 

(должен быть не меньше

 

<длина сообщения> + MPI_BSEND_OVERHEAD)

IERR

- код ошибки

 

1.3.1.2. Освобождение пользовательского буфера

(блокирует, пока сообщения не уйдут из буфера)

MPI_BUFFER_DETACH (BUF,SIZE,IERR)

BUF

- адрес освобождаемого буфера

SIZE

- возвращается размер освобождаемого в

байтах

 

IERR

- код ошибки

Пример простой программы обмена с буферизацией

PROGRAM Example3 include 'mpif.h‘ INTEGER BUFSIZE

PARAMETER (BUFSIZE = 4 + MPI_BSEND_OVERHEAD) BYTE USER(BUFSIZE)

INTEGER ERR, RANK, IBUFSIZE, BUFR, STATUS(MPI_STATUS_SIZE)

CСтандартное начало MPI - программы CALL MPI_INIT (ERR)

CALL MPI_COMM_RANK (MPI_COMM_WORLD,RANK,ERR)

CCALL MPI_COMM_SIZE (MPI_COMM_WORLD,SIZE,ERR) IF (RANK .EQ. 0) THEN

CALL MPI_BUFFER_ATTACH (USER, BUFSIZE, ERR)

CALL MPI_BSEND(RANK,1,MPI_INTEGER,1,5, MPI_COMM_WORLD,ERR) CALL MPI_BUFFER_DETACH (USER, IBUFSIZE, ERR)

ENDIF

IF (RANK .EQ. 1) THEN

CALL MPI_RECV (BUFR,1,MPI_INTEGER,0,5,

*

MPI_COMM_WORLD,STATUS,ERR)

WRITE (* , *) '

Process 1 received ‘, BUFR, ' from process ',

*

STATUS(MPI_SOURCE)

ENDIF

 

CALL MPI_FINALIZE(ERR)

END

1.3.2. Передача с cинхронизацией

MPI_SSEND (BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERR) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERR

BUF

- буфер передачи

COUNT

- состоящий из COUNT элементов (возможно=0)

DATATYPE

- типа DATATYPE

DEST

- передается процессу с номером DEST в коммуникаторе

 

COMM

TAG

- с тэгом сообщения TAG

COMM

- коммуникатор взаимодействующих процессов

IERR

- код ошибки

Схема использования памяти при передаче с синхронизацией

Процессор 1

Процессор 2

(отправитель)

(получатель)

MPI_SSEND(BUFS,…) MPI_RECV (BUFR, …)

BUFS :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUFR :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SYSTEM :

Блокировка пока не начнется выполнение приема в Процессе 2

механизм “рандеву”

1.3.3. Передача по готовности (редко используется)

MPI_RSEND (BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERR) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERR

BUF

- буфер передачи

COUNT

- состоящий из COUNT элементов (возможно=0)

DATATYPE

- типа DATATYPE

DEST

- передается процессу с номером DEST в коммуникаторе

 

COMM

TAG

- с тэгом сообщения TAG

COMM

- коммуникатор взаимодействующих процессов

IERR

- код ошибки

Соседние файлы в папке Лекции