Параллельные вычисления
Разработка параллельного алгоритма умножения матрицы на вектор Рисунок 1.4 — Печать количества и ранга процессов Рисунок 1.5 — Распределение данных Рисунок 1.6 — Результат проверки умножения матрицы на вектор. Реализация последовательного алгоритма Гаусса Рисунок 3.1 — Результат работы последовательного алгоритма Рисунок 3.2 — Работа программы со случайными числами Рисунок 3.3 — Прямой ход, выбор… Читать ещё >
Параллельные вычисления (реферат, курсовая, диплом, контрольная)
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
" ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ"
Факультет прикладной математики и телекоммуникаций Кафедра радиоэлектронных средств Лабораторные работы № 1 — 4
Параллельные вычисления Киров 2014
Лабораторная работа № 1
Параллельные алгоритмы матрично-векторного умножения Цель работы: разработка параллельной программы, которая выполняет умножение матриц на вектор.
1. Реализация последовательного алгоритма умножения матрицы на вектор.
Рисунок 1.1 — Задание размера матрицы Рисунок 1.2 — Ввод данных простым способом Рисунок 1.3 — Результат выполнения матрично-векторного умножения
2. Проведение вычислительных экспериментов Вычисление времени выполнения алгоритма:
Таблица 1.1 — Сравнительная таблица работы последовательного алгоритма
Размер матрицы | Экспериментальное время, с | Теоретическое время, с | |
0,91 | 0,38 | ||
0,177 | 0,0398 | ||
0,6 624 | 3,998 | ||
0,18 156 | 15,996 | ||
0,39 233 | 35,994 | ||
0,64 005 | 63,992 | ||
0,102 | 99,99 | ||
0,139 | 143,988 | ||
0,236 | 195,986 | ||
0,258 | 255,984 | ||
0,309 | 323,982 | ||
0,393 | 399,98 | ||
3. Разработка параллельного алгоритма умножения матрицы на вектор Рисунок 1.4 — Печать количества и ранга процессов Рисунок 1.5 — Распределение данных Рисунок 1.6 — Результат проверки умножения матрицы на вектор
4. Проведение вычислительных экспериментов Таблица 1.2 — Сравнение времени работы последовательного и параллельного алгоритмов
Размер объектов | Последовательный алгоритм, с | Параллельный алгоритм | ||||||
2 процесса | 4 процесса | 8 процессов | ||||||
Время, с | ускорение | Время, с | ускорение | Время, с | ускорение | |||
0,2 | 0,3 | 0,67 | 0,4 | 0,5 | 0,3 | 0,67 | ||
0,45 | 0,22 | 2,045 | 0,13 | 3,46 | 0,8 | 5,625 | ||
0,3 988 | 0,278 | 1,4345 | 0,1 134 | 3,52 | 0,545 | 7,32 | ||
0,16 664 | 0,8 298 | 2,008 | 0,4 478 | 3,72 | 0,2 116 | 7,875 | ||
0,33 735 | 0,17 384 | 1,94 | 0,10 314 | 3,27 | 0,4 806 | 7,019 | ||
0,59 323 | 0,3 352 | 1,77 | 0,18 750 | 3,16 | 0,11 837 | 5,012 | ||
0,94 667 | 0,51 625 | 1,834 | 0,29 602 | 3,198 | 0,15 779 | 5,99 | ||
0,137 | 0,1001 | 1,369 | 0,40 165 | 3,41 | 0,23 406 | 5,85 | ||
0,192 | 0,1007 | 1,91 | 0,55 858 | 3,44 | 0,27 571 | 6,96 | ||
0,247 | 0,13 | 1,9 | 0,74 295 | 3,33 | 0,35 478 | 6,96 | ||
0,318 | 0,161 | 1,975 | 0,93 128 | 3,415 | 0,5 137 | 6,19 | ||
0,384 | 0,206 | 1,864 | 0,114 | 3,37 | 0,62 096 | 6,184 | ||
Вывод:
1. В ходе лабораторной работы были разработаны 2 алгоритма вычисления произведения матрицы на вектор.
2. Выявлено, что последовательный алгоритм выполняется быстрее, чем последовательный, и с увеличением числа процессов, время вычисления уменьшается.
Лабораторная работа № 2
Параллельные алгоритмы матричного умножения Цель работы: разработка параллельной программы, которая выполняет умножение двух матриц.
1. Реализация последовательного алгоритма матричного умножения Рисунок 2.1 — Задание размера объекта Рисунок 2.2 — Ввод данных простым способом Рисунок 2.3 — Результат выполнения матрично-векторного умножения Рисунок 2.4 — Задание данных с помощью случайного генератора
2. Проведение вычислительных экспериментов Вычисление времени выполнения алгоритма:
Таблица 2.1 — Сравнительная таблица работы последовательного алгоритма
Размер матрицы | Экспериментальное время, с | Теоретическое время, с | |
0,9 | 0,65 | ||
0,4 949 | 0,0068 | ||
0,853 | 0,853 | ||
13,438 | 6,827 | ||
54,374 | 23,0464 | ||
129,97 | 54,632 985 | ||
277,843 | 106,71 | ||
483,046 | 184,40 169 | ||
3. Разработка параллельного алгоритма матричного умножения Рисунок 2.5 — Определение ранга процесса
4. Проведение вычислительных экспериментов Таблица 2.2 — Сравнение работы последовательного и параллельного алгоритмов
Размер объектов | Последовательный алгоритм, с | Параллельный алгоритм | ||||
4 процесса | 9 процессов | |||||
Время, с | ускорение | Время, с | ускорение | |||
0,9 | 0,5 | 0,18 | 0,7 362 | 0,001 | ||
0,4 949 | 0,3 443 | 1,437 | 0,023 | 0,215 | ||
0,853 | 0,255 | 3,345 | 0,375 | 2,275 | ||
13,438 | 3,039 | 4,42 | 1,872 | 7,178 | ||
54,374 | 17,057 | 3,19 | 5,811 397 | 9,356 | ||
129,97 | 33,23 | 3,91 | 21,47 895 | 6,051 | ||
277,843 | 85,074 | 3,266 | 40,23 121 | 6,91 | ||
483,046 | 130,373 | 3,705 | 56,60 254 | 8,534 | ||
Вывод:
1. В ходе лабораторной работы были реализованы 2 алгоритма вычисление произведения матриц.
2. Результаты работы последовательного и параллельного алгоритма совпадают.
3. Ускорение параллельного алгоритма, относительно последовательного, пропорционально числу выполняемых процессов.
Лабораторная работа № 3
Параллельные методы решения систем линейных уравнений Цель работы: разработка параллельной программы, которая выполняет решение системы линейных уравнений методом Гаусса.
1. Реализация последовательного алгоритма Гаусса Рисунок 3.1 — Результат работы последовательного алгоритма Рисунок 3.2 — Работа программы со случайными числами Рисунок 3.3 — Прямой ход, выбор ведущих строк
2. Проведение вычислительных экспериментов Вычисление времени выполнения алгоритма:
Таблица 3.1 — Сравнительная таблица работы последовательного алгоритма
Размер матрицы | Экспериментальное время, с | Теоретическое время, с | |
0,15 | 0,18 | ||
0,1 978 | 0,1 611 | ||
0,199 | 0,199 | ||
1,647 | 1,589 619 | ||
5,89 896 | 5,362 286 | ||
13,158 849 | 12,70 743 | ||
26,66 889 | 24,815 479 | ||
46,434 393 | 42,876 861 | ||
3. Разработка параллельного алгоритма Гаусса Рисунок 3.4 — Определение ранга процесса Рисунок 3.5 — Результат выполнения прямого хода метода Гаусса
4. Проведение вычислительных экспериментов Таблица 3.2 — Сравнение работы последовательного и параллельного алгоритмов
Размер объектов | Последовательный алгоритм, с | Параллельный алгоритм | ||||||
2 процесса | 4 процесса | 8 процессов | ||||||
Время, с | ускорение | Время, с | ускорение | Время, с | ускорение | |||
0,15 | 0,136 | 0,110 294 | 0,625 | 0,024 | 0,64 815 | 0,231 | ||
0,1 978 | 0,2 086 | 0,948 226 | 0,3 529 | 0,560 499 | 0,442 513 | 0,447 | ||
0,199 | 0,112 197 | 1,773 666 | 0,88 939 | 2,237 489 | 3,381 095 | 0,58 857 | ||
1,647 | 0,879 686 | 1,872 259 | 0,618 633 | 2,662 322 | 9,32 891 | 0,176 548 | ||
5,89 896 | 2,98 725 | 1,974 713 | 3,4 487 | 1,937 344 | 15,725 795 | 0,375 114 | ||
13,158 849 | 7,25 873 | 1,872 913 | 5,9 367 | 2,626 849 | 24,13 871 | 0,545 135 | ||
26,66 889 | 14,22 705 | 1,858 906 | 10,231 977 | 2,547 591 | 34,96 514 | 0,764 503 | ||
46,434 393 | 24,198 062 | 1,91 893 | 15,636 958 | 2,969 529 | 45,749 477 | 1,14 971 | ||
Вывод:
1. В ходе лабораторной работы были разработаны две программы для решения систем линейных уравнений методом Гаусса.
2. Результаты работы программ совпадают.
3. Параллельный алгоритм выполняется быстрее последовательного.
Лабораторная работа № 4
матрица вектор алгоритм сортировка Параллельные методы сортировки данных Цель работы: разработка параллельной программы, которая выполняет сортировку данных.
1. Реализация последовательного алгоритма сортировки данных Рисунок 4.1 — Задание размера объекта Рисунок 4.2 — Результат сортировки массива
2. Проведение вычислительных экспериментов Вычисление времени выполнения алгоритма:
Таблица 4.1 — Сравнительная таблица работы последовательного алгоритма
Размер матрицы | Экспериментальное время, с | Теоретическое время, с | При использовании стандартных библиотек, с | |
0,3 | 0,3 | 0,7 | ||
0,35 | 0,349 | 0,18 | ||
0,325 979 | 0,35 249 672 | 0,1 528 | ||
1,454 637 | 1,410 057 387 | 0,2 973 | ||
3,172 682 | 3,172 682 | 0,4 271 | ||
5,589 694 | 5,64 037 056 | 0,0061 | ||
8,924 028 | 8,813 123 066 | 0,8 473 | ||
3. Разработка параллельного алгоритма сортировки Рисунок 4.3 — Результат работы параллельной программы
4. Проведение вычислительных экспериментов Таблица 4.2 — Сравнение работы последовательного и параллельного алгоритмов
Размер объектов | Последовательный алгоритм, с | При использовании стандартных библиотек, с | Параллельный алгоритм | |||
2 процесса | ||||||
Время, с | Ускорение 1 | Ускорение 2 | ||||
0,3 | 0,7 | 0,28 | 0,107 143 | 0,25 | ||
0,35 | 0,18 | 0,38 | 0,921 053 | 0,473 684 | ||
0,325 979 | 0,1 528 | 0,1112 | 2,931 466 | 0,13 741 | ||
1,454 637 | 0,2 973 | 0,302 582 | 4,807 414 | 0,9 825 | ||
3,172 682 | 0,4 271 | 0,690 155 | 4,597 057 | 0,6 188 | ||
5,589 694 | 0,0061 | 1,219 006 | 4,585 452 | 0,5 004 | ||
8,924 028 | 0,8 473 | 2,2 792 | 4,455 794 | 0,4 231 | ||
Параллельный алгоритм | ||||||
4 процесса | 8 процессов | |||||
Время, с | Ускорение 1 | Ускорение 2 | Время, с | Ускорение 1 | Ускорение 2 | |
0,54 | 0,55 556 | 0,12 963 | 0,18 494 | 0,162 | 0,379 | |
0,61 | 0,57 377 | 0,295 082 | 0,36 119 | 0,969 | 0,498 | |
0,86 117 | 3,785 304 | 0,17 743 | 0,33 827 | 9,636 651 | 0,45 171 | |
0,90 653 | 16,4 621 | 0,32 795 | 0,92 735 | 15,68 595 | 0,32 059 | |
0,201 978 | 15,70 806 | 0,21 146 | 0,167 749 | 18,91 327 | 0,25 461 | |
0,355 119 | 15,74 034 | 0,17 177 | 0,228 482 | 24,46 448 | 0,26 698 | |
0,541 799 | 16,4711 | 0,15 639 | 0,285 105 | 31,30 085 | 0,29 719 | |
В таблице 4.2 «Ускорение 1» соответствует значению ускорения времени выполнения параллельного алгоритма относительно практически полученного времени выполнения последовательного алгоритма, а «Ускорение 2» — ускорение, взятое в сравнении со временем работы последовательного алгоритма при использовании в нем стандартных библиотек.
Вывод:
1. В ходе лабораторной работы были разработаны последовательный и параллельный алгоритмы для сортировки данных.
2. При использовании стандартных библиотек время вычисления алгоритма значительно сокращается.
Индивидуальное задание.
Формулировка:
Дана матрица случайных чисел (равномерно распределенных на интервале [0,r], где r — параметр, передаваемый в функцию), размера N*N. Отсортировать строки матрицы в порядке убывания суммы элементов строк.
Код программы:
#include #include #include #include #include #define N 5 int A[N][N]; int B[N][N]; void fill_matrix () { int i, j; srand (time (NULL)); for (i = 0; i < N; i ++) for (j = 0; j < N; j ++) A[i][j]=rand ()%30; } void print_matrix () { int i, j; for (i = 0; i < N; i ++) { for (j = 0; j < N; j ++) printf («%d «, A[i][j]); printf («n»); } } int main (int argc, char* argv[]) { int r, i, j, k, temp, temp1; int D[N]; MPI_Status st; MPI_Datatype typ; MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &r); if (r == 0) { fill_matrix (); printf («n Source: n»); print_matrix (); printf («n»); for (i = 0; i < N; i ++) { for (j = 0; j < (N); j++) { B[i][j]=A[i][j]; }} | MPI_Barrier (MPI_COMM_WORLD); MPI_Send (A, N*N, MPI_INT, 1, 0, MPI_COMM_WORLD); } else if (r == 1) { MPI_Barrier (MPI_COMM_WORLD); MPI_Recv (B, N*N, MPI_INT, 0, 0, MPI_COMM_WORLD, &st); for (i = 0; i < N; i ++) { D[i]=0; for (j = 0; j < (N); j++) { D[i]=D[i]+B[i][j]; } } for (i = 0; i < N; i ++) { printf («%d «, D[i]); printf («n»); } for (i = 0; i < N- 1; i++) { for (k = i + 1; k < N; k++) { for (j=0; j { if (D[i] < D[k]) { temp = D[i]; D[i] = D[k]; D[k] = temp; temp1 = B[i][j]; B[i][j] = B[k][j]; B[k][j] = temp1; } } } } printf («n»); printf («n Otsortirovannaya: n»); for (i = 0; i < N; i ++) { for (j = 0; j < N; j ++) printf («%d «, B[i][j]); printf («n»); }} MPI_Finalize (); return 0; } | |
Результат работы программы:
Вывод: В ходе проделанной работы был разработан алгоритм для сортировки данных. Посчитали сумму элементов строк, а затем отсортировали матрицу по убыванию этой суммы элементов.