Параллельные вычисления

  • Вид работы:
    Практическое задание
  • Предмет:
    Физика
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    951,54 Кб
  • Опубликовано:
    2014-12-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Параллельные вычисления

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ

БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

"ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ"

Факультет прикладной математики и телекоммуникаций

Кафедра радиоэлектронных средств



Лабораторные работы № 1 - 4

Параллельные вычисления












Киров 2014

Лабораторная работа №1

Параллельные алгоритмы матрично-векторного умножения

Цель работы: разработка параллельной программы, которая выполняет умножение матриц на вектор.

.        Реализация последовательного алгоритма умножения матрицы на вектор.

Рисунок 1.1 - Задание размера матрицы

Рисунок 1.2 - Ввод данных простым способом

Рисунок 1.3 - Результат выполнения матрично-векторного умножения

.        Проведение вычислительных экспериментов

Вычисление времени выполнения алгоритма:


Таблица 1.1 - Сравнительная таблица работы последовательного алгоритма

Размер матрицы

Экспериментальное время, с

Теоретическое время, с

10

0,000091

0,00038

100

0,000177

0,0398

1000

0,006624

3,998

2000

0,018156

15,996

3000

0,039233

35,994

4000

0,064005

63,992

5000

0,102

99,99

6000

0,139

143,988

7000

0,236

195,986

8000

0,258

255,984

9000

0,309

323,982

10000

0,393

399,98


.        Разработка параллельного алгоритма умножения матрицы на вектор

Рисунок 1.4 - Печать количества и ранга процессов

Рисунок 1.5 - Распределение данных

Рисунок 1.6 - Результат проверки умножения матрицы на вектор

.        Проведение вычислительных экспериментов

Таблица 1.2 - Сравнение времени работы последовательного и параллельного алгоритмов

Размер объектов

Последовательный алгоритм, с

Параллельный алгоритм



2 процесса

4 процесса

8 процессов



Время, с

ускорение

Время, с

ускорение

Время, с

ускорение

10

0,000002

0,000003

0,67

0,000004

0,5

0,000003

0,67

100

0,000045

0,000022

2,045

0,000013

3,46

0,000008

5,625

1000

0,003988

0,00278

1,4345

0,001134

3,52

0,000545

7,32

2000

0,016664

0,008298

2,008

0,004478

3,72

0,002116

7,875

3000

0,033735

0,017384

1,94

0,010314

3,27

0,004806

7,019

4000

0,059323

0,03352

1,77

0,018750

3,16

0,011837

5,012

5000

0,094667

0,051625

1,834

0,029602

3,198

0,015779

5,99

6000

0,137

0,1001

1,369

0,040165

3,41

0,023406

5,85

7000

0,192

0,1007

1,91

0,055858

3,44

0,027571

6,96

8000

0,247

0,13

1,9

0,074295

3,33

0,035478

6,96

9000

0,318

0,161

1,975

0,093128

3,415

0,05137

6,19

10000

0,384

0,206

1,864

0,114

3,37

0,062096

6,184


Вывод:

.        В ходе лабораторной работы были разработаны 2 алгоритма вычисления произведения матрицы на вектор.

.        Выявлено, что последовательный алгоритм выполняется быстрее, чем последовательный, и с увеличением числа процессов, время вычисления уменьшается.

Лабораторная работа №2

Параллельные алгоритмы матричного умножения

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

.        Реализация последовательного алгоритма матричного умножения

Рисунок 2.1 - Задание размера объекта

Рисунок 2.2 - Ввод данных простым способом

Рисунок 2.3 - Результат выполнения матрично-векторного умножения

Рисунок 2.4 - Задание данных с помощью случайного генератора

.        Проведение вычислительных экспериментов

Вычисление времени выполнения алгоритма:


Таблица 2.1 - Сравнительная таблица работы последовательного алгоритма

Размер матрицы

Экспериментальное время, с

Теоретическое время, с

10

0,000009

0,0000065

100

0,004949

0,0068

500

0,853

0,853

1000

13,438

6,827

1500

54,374

23,0464

2000

129,97

54,632985

2500

277,843

106,71

3000

483,046

184,40169


3.      Разработка параллельного алгоритма матричного умножения

Рисунок 2.5 - Определение ранга процесса

.        Проведение вычислительных экспериментов

Таблица 2.2 - Сравнение работы последовательного и параллельного алгоритмов

Размер объектов

Последовательный алгоритм, с

Параллельный алгоритм



4 процесса

9 процессов



Время, с

ускорение

Время, с

ускорение

10

0,000009

0,00005

0,18

0,007362

0,001

100

0,004949

0,003443

1,437

0,023

0,215

500

0,853

0,255

3,345

0,375

2,275

1000

13,438

3,039

4,42

1,872

7,178

1500

54,374

17,057

3,19

5,811397

9,356

2000

129,97

33,23

3,91

21,47895

6,051

2500

277,843

85,074

3,266

40,23121

6,91

3000

483,046

130,373

3,705

56,60254

8,534


Вывод:

.        В ходе лабораторной работы были реализованы 2 алгоритма вычисление произведения матриц.

.        Результаты работы последовательного и параллельного алгоритма совпадают.

.        Ускорение параллельного алгоритма, относительно последовательного, пропорционально числу выполняемых процессов.

Лабораторная работа №3

Параллельные методы решения систем линейных уравнений

Цель работы: разработка параллельной программы, которая выполняет решение системы линейных уравнений методом Гаусса.

.        Реализация последовательного алгоритма Гаусса

Рисунок 3.1 - Результат работы последовательного алгоритма

Рисунок 3.2 - Работа программы со случайными числами

Рисунок 3.3 - Прямой ход, выбор ведущих строк

.        Проведение вычислительных экспериментов

Вычисление времени выполнения алгоритма:


Таблица 3.1 - Сравнительная таблица работы последовательного алгоритма

Размер матрицы

Экспериментальное время, с

Теоретическое время, с

10

0,000015

0,000018

100

0,001978

0,001611

500

0,199

0,199

1000

1,647

1,589619

1500

5,89896

5,362286

2000

13,158849

12,70743

2500

26,066889

24,815479

3000

46,434393

42,876861


3.      Разработка параллельного алгоритма Гаусса

Рисунок 3.4 - Определение ранга процесса

Рисунок 3.5 - Результат выполнения прямого хода метода Гаусса

4.      Проведение вычислительных экспериментов

Таблица 3.2 - Сравнение работы последовательного и параллельного алгоритмов

Размер объектов

Последовательный алгоритм, с

Параллельный алгоритм



2 процесса

4 процесса

8 процессов

ускорение

Время, с

ускорение

Время, с

ускорение

10

0,000015

0,000136

0,110294

0,000625

0,024

0,064815

0,000231

100

0,001978

0,002086

0,948226

0,003529

0,560499

0,442513

0,00447

500

0,199

0,112197

1,773666

0,088939

2,237489

3,381095

0,058857

1000

1,647

0,879686

1,872259

0,618633

2,662322

9,32891

0,176548

1500

5,89896

2,98725

1,974713

3,04487

1,937344

15,725795

0,375114

2000

13,158849

7,025873

1,872913

5,009367

2,626849

24,13871

0,545135

2500

26,066889

14,022705

1,858906

10,231977

2,547591

34,096514

0,764503

3000

46,434393

24,198062

1,91893

15,636958

2,969529

45,749477

1,014971


Вывод:

.        В ходе лабораторной работы были разработаны две программы для решения систем линейных уравнений методом Гаусса.

.        Результаты работы программ совпадают.

.        Параллельный алгоритм выполняется быстрее последовательного.

Лабораторная работа №4

матрица вектор алгоритм сортировка

Параллельные методы сортировки данных

Цель работы: разработка параллельной программы, которая выполняет сортировку данных.

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

Рисунок 4.1 - Задание размера объекта

Рисунок 4.2 - Результат сортировки массива

.        Проведение вычислительных экспериментов

Вычисление времени выполнения алгоритма:

 



Таблица 4.1 - Сравнительная таблица работы последовательного алгоритма

Размер матрицы

Экспериментальное время, с

Теоретическое время, с

При использовании стандартных библиотек, с

10

0,000003

0,0000003

0,000007

100

0,000035

0,0000349

0,000018

10000

0,325979

0,35249672

0,001528

20000

1,454637

1,410057387

0,002973

30000

3,172682

3,172682

0,004271

40000

5,589694

5,64037056

0,0061

50000

8,924028

8,813123066

0,008473


.        Разработка параллельного алгоритма сортировки

Рисунок 4.3 - Результат работы параллельной программы

.        Проведение вычислительных экспериментов

Таблица 4.2 - Сравнение работы последовательного и параллельного алгоритмов

Размер объектов

Последовательный алгоритм, с

При использовании стандартных библиотек, с

Параллельный алгоритм




2 процесса




Время, с

Ускорение 1

Ускорение 2

10

0,000003

0,000007

0,000028

0,107143

0,25

100

0,000035

0,000018

0,000038

0,921053

0,473684

10000

0,325979

0,001528

0,1112

2,931466

0,013741

20000

1,454637

0,002973

0,302582

4,807414

0,009825

30000

3,172682

0,004271

0,690155

4,597057

0,006188

40000

5,589694

0,0061

1,219006

4,585452

0,005004

50000

8,924028

0,008473

2,002792

4,455794

0,004231

Параллельный алгоритм

4 процесса

8 процессов

Время, с

Ускорение 1

Ускорение 2

Время, с

Ускорение 1

Ускорение 2

0,000054

0,055556

0,12963

0,018494

0,000162

0,000379

0,000061

0,57377

0,295082

0,036119

0,000969

0,000498

0,086117

3,785304

0,017743

0,033827

9,636651

0,045171

0,090653

16,04621

0,032795

0,092735

15,68595

0,032059

0,201978

15,70806

0,021146

0,167749

18,91327

0,025461

0,355119

15,74034

0,017177

0,228482

24,46448

0,026698

0,541799

16,4711

0,015639

0,285105

31,30085

0,029719


В таблице 4.2 "Ускорение 1" соответствует значению ускорения времени выполнения параллельного алгоритма относительно практически полученного времени выполнения последовательного алгоритма, а "Ускорение 2" - ускорение, взятое в сравнении со временем работы последовательного алгоритма при использовании в нем стандартных библиотек.

Вывод:

.        В ходе лабораторной работы были разработаны последовательный и параллельный алгоритмы для сортировки данных.

.        При использовании стандартных библиотек время вычисления алгоритма значительно сокращается.

Индивидуальное задание.

Формулировка:

Дана матрица случайных чисел (равномерно распределенных на интервале [0,r] , где r - параметр, передаваемый в функцию), размера N*N . Отсортировать строки матрицы в порядке убывания суммы элементов строк.

Код программы:

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #include <mpi.h> #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<N; 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; }



Результат работы программы:


Вывод: В ходе проделанной работы был разработан алгоритм для сортировки данных. Посчитали сумму элементов строк, а затем отсортировали матрицу по убыванию этой суммы элементов.

Похожие работы на - Параллельные вычисления

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!