Тема: Производные типы в MPI
Цель: Научиться использовать механизмы создания и работы с производными типами данных
Задание к лабораторной работе
В заданиях лабораторной работы предлагается дописать фрагменты программ на языке C, написанные с использованием функций MPI. Пропущенные фрагменты обозначены соответствующим комментарием.
Задание 1
В программе на языке C (lab51.c) имеется двумерный массив М, представляющий собой квадратную матрицу размерность матрицы зависит от числа работающих процессов. Используя приведенный шаблон, в соответствии с приведенными заданиями и рекомендациями:
Задание 1.1 Создать производный тип данных mCol, описывающий столбцы матрицы M (использовать конструктор типа MPI_Type_vector). Зарегистрировать производный тип mCol.
Задание 1.2 Создать производный тип данных mRow, описывающий строки матрицы M (использовать конструктор типа MPI_Type_contiguous). Зарегистрировать производный тип mRow.
Задание 1.3 Выполнить транспонирование матрицы в главном процессе, для чего:
a) разослать столбцы матрицы с использованием нового производного типа mCol самому себе (использовать MPI_Send) ;
b) принять разосланные столбцы от самого себя и перезаписать матрицу M так, чтобы получилась транспонированная матрица (использовать MPI_Recv)
Задание 1.4 Разослать строки матрицы всем процессам, включая самого себя с использованием производного типа данных mRow (использовать MPI_Send)
Задание 1.5 Принять строку матрицы от главного процесса в массив m (использовать MPI_Recv)
Задание 1.6 Расчитать локальную сумму элементов массива m, результат записать в переменную sum
Задание 1.7 С помощью MPI_Gather, выполнить "склейку" локальных сумм (переменная sum) из каждого процесса в массив sR в главном процессе
Задание 1.8 С помощью вызова MPI_Reduce, посчитать сумму элементов матрицы по столбцам, для чего необходимо:
a) применить операцию редукции к массиву m ;
b) результат записать в массив sC c) операция приведения - MPI_SUM
Задание 1.9 Уничтожить созданные производные типы данных
Задание 2 В программе на языке C (lab52.c) необходимо выполнить отправку структуры данных путем создания нового производного типа. Изучить исходный код приложения и внести необходимые правки для его корректной работы. Аргументы функций MPI_Type_struct и MPI_Type_commit, а также некоторые другие фрагменты пропущены. Добавить эти фрагменты. Откомпилировать и запустить программу.
Задание 3 Модифицируйте программу из предыдущего задания таким образом что бы структура данных передавалась с помощью упаковки и распаковки данных, программу сохраните под именем lab53.c.
Литература
Эндрю Таненбаум, Мартин ван Стеен Распределенные системы. Принципы и парадигмы = Andrew S. Tanenbaum, Maarten van Steen. "Destributed systems. Principles and paradigms. — Санкт-Петербург: Питер, 2003. — 877 с. — (Классика computer science). — ISBN 5-272-00053-6
С. Н. Андрианов, А. Б. Дегтярев 1 // ПАРАЛЛЕЛЬНЫЕ И РАСПРЕДЕЛЕННЫЕ ВЫЧИСЛЕНИЯ. — С.-Петерб.: Издательство С.-Петербургского университета, 2007. — 61 с.
А. А. Букатов, В. Н. Дацюк, А. И. Жегуло Программирование многопроцессорных вычислительных систем. — Ростов-на-Дону: ООО «ЦВВР», 2003. — 208 с. — ISBN 5-94153-062-5
Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования. Пер.с англ. — М.: Издательский дом «Вильямс», 2003.
Миллер Р., Боксер Л. Последовательные и параллельные алгоритмы. Пер. с англ. — М.: БИНОМ. Лаборатория знаний, 2006.
Богачёв К.Ю. Основы параллельного программирования. — М.: БИНОМ. Лаборатория знаний, 2003.