Презентация на тему Параллельное программирование с использованием технологии MPI

Презентация на тему Параллельное программирование с использованием технологии MPI, предмет презентации: Разное. Этот материал содержит 19 слайдов. Красочные слайды и илюстрации помогут Вам заинтересовать свою аудиторию. Для просмотра воспользуйтесь проигрывателем, если материал оказался полезным для Вас - поделитесь им с друзьями с помощью социальных кнопок и добавьте наш сайт презентаций ThePresentation.ru в закладки!

Слайды и текст этой презентации

Слайд 1
Текст слайда:

Параллельное программирование с использованием технологии MPI

Аксёнов Сергей Владимирович
к.т.н., доцент каф.ОСУ ТПУ

Лекция 9
Томский политехнический университет

Параллельное программирование с использованием технологии MPI Аксёнов С.В.


Слайд 2
Текст слайда:

Функция MPI_Reduce()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

Функция MPI_Reduce() объединяет элементы входного буфера каждого процесса в группе, используя операцию op, и возвращает объединенное значение в выходной буфер процесса с номером root.

int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
Вход sendbuf: Адрес посылающего буфера
Выход recvbuf: Адрес принимающего буфера Вход count: Количество элементов в посылающем буфере
Вход datatype: Тип данных элементов посылающего буфера
Вход op: Операция редукции
Вход root: Номер корневого процесса
Вход comm: Коммуникатор


Слайд 3
Текст слайда:

Предопределенные операции редукции

Параллельное программирование с использованием технологии MPI Аксёнов С.В.


Слайд 4
Текст слайда:

Пример MPI_Reduce()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

int main (int argc, char *argv[])
{
int *sendbuf, *recvbuf, i, n, rank;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
n = 5;
sendbuf = malloc(5*sizeof(int));
recvbuf = malloc(5*sizeof(int));
srand(rank);
for (i=0; i sendbuf[i]=rand()%100;
for (i=0; i printf("Процесс № %d Значение элемента sendbuf на позиции %d равно %d",rank,
i,sendbuf[i]);
MPI_Reduce(sendbuf,recvbuf,n,MPI_INT,MPI_MAX,0,MPI_COMM_WORLD);
if (rank==0)
for (i=0; i<5; i++)
printf(Процесс № %d Максимальное значение элементов sendbuf на позиции %d
равно %d",rank,i,recvbuf[i]
MPI_Finalize();
return 0:
}


Слайд 5
Текст слайда:

Функция MPI_Allreduce()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

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

int MPI_Allreduce (void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
Вход sendbuf: Адрес посылающего буфера
Выход recvbuf: Адрес принимающего буфера Вход count: Количество элементов в посылающем буфере
Вход datatype: Тип данных элементов посылающего буфера
Вход op: Операция редукции
Вход comm: Коммуникатор


Слайд 6
Текст слайда:

Функция MPI_Reduce_scatter()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

Функция MPI_Reduce_scatter() сначала производит поэлементную редукцию вектора из элементов в посылающем буфере. Далее полученный вектор результатов разделяется на n непересекающихся сегментов, где n – число членов в группе.

int MPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
Вход sendbuf: Адрес посылающего буфера
Выход recvbuf: Адрес принимающего буфера Вход recvcounts: Целочисленный массив, определяющий количество элементов результата, распределенных каждому процессу.
Вход datatype: Тип данных элементов посылающего буфера
Вход op: Операция редукции
Вход comm: Коммуникатор


Слайд 7
Текст слайда:

Функция MPI_Scan()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

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

int MPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
Вход sendbuf: Адрес посылающего буфера
Выход recvbuf: Адрес принимающего буфера Вход count: Количество элементов в принимающем буфере
Вход datatype: Тип данных элементов посылающего буфера
Вход op: Операция редукции
Вход comm: Коммуникатор


Слайд 8
Текст слайда:

Пользовательские операции приведения

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

Допускается определение собственных операций приведения. Для этого используется подпрограмма MPI_Op_create ().

Описание типа пользовательской функции выглядит следующим образом:
typedef void (MPI_User_function) (void *a, void *b, int *len, MPI_Datatype *dtype

int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op)
Вход function: Пользовательская функция
Вход commute: Флаг, которому присваивается значение «истина», если
операция коммутативна
Выход op: Операция редукции

После завершения операций приведения пользовательская функция должна быть удалена:
int MPI_Op_free(MPI_Op *op)


Слайд 9
Текст слайда:

Конструктор MPI_Type_contiguous()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype &newtype)
Вход count: Число повторений
Вход oldtype: Старый тип Вход/Выход newtype: Новый тип

Функция MPI_Type_contiguous() позволяет копировать тип данных в смежные области.
Новый тип newtype есть тип, полученный конкатенацией (сцеплением) count копий старого типа oldtype.


Слайд 10
Текст слайда:

Конструктор MPI_Type_vector()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype, MPI_Datatype &newtype)
Вход count: Число блоков
Вход blocklength: Число элементов в каждом блоке
Вход stride: Число элементов между началами каждого блока
Вход oldtype: Старый тип Вход/Выход newtype: Новый тип

Функция MPI_Type_vector() является универсальным конструктором, который позволяет реплицировать типы данных в области, которые состоят из блоков равного объема. Каждый блок получается как конкатенация некоторого количества копий старого типа. Пространство между блоками кратно размеру oldtype.


Слайд 11
Текст слайда:

Конструктор MPI_Type_hvector()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

int MPI_Type_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype, MPI_Datatype &newtype)
Вход count: Число блоков
Вход blocklength: Число элементов в каждом блоке
Вход stride: Число байтов между началами каждого блока
Вход oldtype: Старый тип Вход/Выход newtype: Новый тип

Функция MPI_Type_hvector() идентична MPI_Type_vector() за исключением того, что страйд задается в байтах, а не в элементах.


Слайд 12
Текст слайда:

Конструктор MPI_Type_indexed()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

int MPI_Type_indexed(int count, int *array_of_blocklength, int *array_of_displacement, MPI_Datatype oldtype, MPI_Datatype *newtype)
Вход count: Число блоков
Вход array_of_blocklength: Число элементов в каждом блоке
Вход array_of_displacements : Смещение для каждого блока Вход oldtype: Старый тип Вход/Выход newtype: Новый тип

Функция MPI_Type_indexed() позволяет реплицировать старый тип oldtype в последовательность блоков (каждый блок есть конкатенация oldtype), где каждый блок может содержать различное число копий и иметь различное смещение. Все смещения блоков кратны длине старого блока oldtype.


Слайд 13
Текст слайда:

Конструктор MPI_Type_hindexed()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

int MPI_Type_indexed(int count, int *array_of_blocklength, MPI_Aint *array_of_displacements, MPI_Datatype oldtype, MPI_Datatype *newtype)
Вход count: Число блоков
Вход array_of_blocklength: Число элементов в каждом блоке
Вход array_of_displacements : Смещение для каждого блока Вход oldtype: Старый тип Вход/Выход newtype: Новый тип

Функция MPI_Type_hindexed() идентична MPI_Type_indexed() за исключением того, что смещения блоков в массиве array_of_displacements задаются в байтах, а не в кратностях ширины старого типа oldtype.


Слайд 14
Текст слайда:

Конструктор MPI_Type_struct()

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

int MPI_Type_struct(int count, int *array_of_blocklength, MPI_Aint *array_of_displacements, MPI_Datatype *array_of_types, MPI_Datatype *newtype)
Вход count: Число блоков
Вход array_of_blocklength: Число элементов в каждом блоке
Вход array_of_displacements : Смещение для каждого блока Вход array_of_types: Массив типов Вход/Выход newtype: Новый тип

Функция MPI_Type_hindexed() идентична MPI_Type_indexed() за исключением того, что смещения блоков в массиве array_of_displacements задаются в байтах, а не в кратностях ширины старого типа oldtype.


Слайд 15
Текст слайда:

Объявление объектов типа данных

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

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

Функция MPI_Type_commit() объявляет тип данных, то есть формально описывает коммуникационный буфер, но не содержимое этого буфера. Поэтому после того, как тип данных объявлен, он может быть многократно использован, чтобы передавать изменяемое содержимое буфера или различных буферов с различными стартовыми адресами.

int MPI_Type_commit(MPI_Datatype datatype)

Вход datatype: Объявленный тип данных


Слайд 16
Текст слайда:

Удаление объектов типа данных

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

Функция MPI_Type_free() маркирует объекты типа данных, связанные с datatype для удаления и установки типа данных в MPI_DATATYPE_NULL. Удаление типа данных не воздействует на другой тип, который был построен от удаленного типа. Система ведет себя как если бы аргументы входного типа данных были переданы конструктору производного типа данных по значению.

int MPI_Type_free(MPI_Datatype datatype)

Вход datatype: Тип данных, который освобождается


Слайд 17
Текст слайда:

Пример

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

#include “mpi.h”
#include
#include
typedef struct {
double real, img;
} complex;

typedef void complexproduct(complex *a, complex *b, int *len, MPI_Datatype *dptr)
{
int i;
complex c;
for (i=0; i<*len; i++)
{
c.real = b->real*a->real - b->img*a->img;
c.img = b->real*a->img + b->img*a->real;
*b = ;
a++;
b++
}
}


Слайд 18
Текст слайда:

Пример

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

int main (int argc, char *argv[])
{
complex sendbuf[5];
complex recvbuf[5],
int i, n, rank;
MPI_Datatype ctype;
MPI_Op complexop;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
srand(rank);
MPI_Type_contiguous(2,MPI_DOUBLE, &ctype);
MPI_Type_commit(&ctype);
MPI_Op_create(complexproduct, 1, &complexop)
for (i=0; i<5; i++)
{
sendbuf[i].real = rand()%10;
sendbuf[i].img = rand()%10;
}



Слайд 19
Текст слайда:

Пример

Параллельное программирование с использованием технологии MPI Аксёнов С.В.

for (i=0; i printf("Процесс № %d Значение элемента sendbuf на позиции %d равно %d + %d *i",rank,i,sendbuf[i].real,
sendbuf[i].img);

MPI_Reduce(sendbuf,recvbuf,n,ctype,complexop,0,MPI_COMM_WORLD);

if (rank==0)
for (i=0; i printf("Процесс № %d Значение элемента sendbuf на позиции %d равно %d + %d *i",rank,i,sendbuf[i].real,
sendbuf[i].img);
MPI_Op_free(&complexop);
MPI_Type_free(&ctype);
MPI_Finalize();
return 0:
}



Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика