Параллельные вычисления с MPI
Данный проект демонстрирует эффективность параллельных вычислений с использованием MPI (Message Passing Interface) на примере двух задач:
Вычисление числа π методом Монте-Карло
Умножение матрицы на вектор с различными схемами распределения данных
Данные в таблицах представлены в формате: время(ускорение)
Вычисление числа π методом Монте-Карло
Сводная таблица производительности
Количество точек
Последовательный алгоритм
2 процессора
3 процессора
4 процессора
100 000 000
0,806 с (1,00x)
0,410 с (1,97x)
0,275 с (2,93x)
0,228 с (3,53x)
500 000 000
4,191 с (1,00x)
2,052 с (2,04x)
1,333 с (3,14x)
1,000 с (4,19x)
1 000 000 000
8,068 с (1,00x)
4,059 с (1,99x)
2,769 с (2,91x)
2,066 с (3,91x)
Лучшее ускорение: 4.19x при 500M точек на 4 процессах
Эффективность: 85-105% (очень высокая)
Стабильность: Ускорение сохраняется при увеличении объема данных
Умножение матрицы на вектор
Сравнение методов распределения
Размер матрицы
1 Процесс
2 Процесса
3 Процесса
4 Процесса
1000
0,0113 с (1,00x)
0,0061 с (1,87x)
0,0045 с (2,51x)
0,0036 с (3,16x)
2000
0,0054 с (1,00x)
0,0028 с (1,96x)
0,0020 с (2,69x)
0,0018 с (2,97x)
3000
0,0112 с (1,00x)
0,0059 с (1,91x)
0,0043 с (2,62x)
0,0035 с (3,21x)
Размер матрицы
1 Процесс
2 Процесса
3 Процесса
4 Процесса
1000
-
0,0060 с (1,90x)
0,0042 с (2,70x)
0,0036 с (3,13x)
2000
-
0,0031 с (1,76x)
0,0020 с (2,71x)
0,0016 с (3,30x)
3000
-
0,0061 с (1,83x)
0,0044 с (2,52x)
0,0036 с (3,13x)
Размер матрицы
1 Процесс
2 Процесса
3 Процесса
4 Процесса
1000
-
0,0064 с (1,77x)
0,0043 с (2,65x)
0,0037 с (3,03x)
2000
-
0,0029 с (1,86x)
0,0019 с (2,83x)
0,0017 с (3,16x)
3000
-
0,0062 с (1,80x)
0,0039 с (2,87x)
0,0037 с (3,06x)
Рейтинг методов по эффективности
ROWS - лучшая производительность и масштабируемость
COLUMNS - хороший баланс производительности
BLOCKS - немного отстает из-за сложности коммуникаций
Сильные стороны параллелизации
Высокое ускорение: До 4.19x на 4 процессах
Хорошая масштабируемость: Ускорение растет с объемом задач
Стабильность: Результаты предсказуемы и воспроизводимы
Задача
Рекомендуемые процессы
Лучший метод
Вычисление π
4 процесса
Distribution 0
Матрицы 1000x1000
4 процесса
Метод ROWS
Матрицы 2000x2000
4 процесса
Метод COLUMNS
Матрицы 3000x3000
4 процесса
Метод ROWS
Эффективность параллелизации
Количество процессов
Среднее ускорение
Эффективность
2
1.92x
96%
3
2.75x
92%
4
3.58x
90%
# Компиляция программ
mpicc -O3 -o pi_calculation pi_calculation_mpi.c -lm
mpicc -O3 -o matrix_vector matrix_vector_multiply.c -lm
# Запуск тестов
chmod +x test.sh
./test.sh