Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семестровая.doc
Скачиваний:
9
Добавлен:
20.04.2015
Размер:
144.9 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Кемеровский государственный университет»

Математический факультет

Кафедра ЮНЕСКО по новым информационным технологиям

ОТЧЕТ ПО СЕМЕСТРОВОЙ РАБОТЕ

ПО ДИСЦИПЛИНЕ

Многопроцессорные вычислительные системы и параллельное программирование”

«Задание №11: Умножение матрицы на вектор»

студента 2 курса

Алексеева Дмитрия Владимировича

Направление 010400.62 – Прикладная математика и информатика

Преподаватель:

к-т физ.-мат.наук, доцент

С.В. Стуколов

_____________________

Работа защищена:

“____”_______________201_г.

с оценкой _____________

Кемерово 2012

СОДЕРЖАНИЕ

Введение 3

1. Постановка задачи 3

2. Последовательные алгоритмы 4

2.1 Строковый 4

2.2 Столбцовый 5

3. Параллельные алгоритмы 7

3.1 Строковый параллельный 7

3.2 Столбцовый параллельный 9

4.Таблицы эффективности 11

4.1 Общее время работы 11

4.2 Относительный прирост от многопоточности 12

4.3 Эффективность использования вычислителей 14

4.4 Время на системе с 4 физическими вычислителями и общей памятью 15

5.Заключение 16

Введение

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

1. Постановка задачи

Реализуйте последовательный алгоритм умножения матрицы на вектор, получите зависимость времени реализации алгоритма от размера матрицы. Реализуйте параллельный строчно-ориентированный алгоритм умножения матрицы на вектор, вычислите время реализации алгоритма на различном числе процессоров для размера матрицы от 1000х1000 до 5000х5000. Вычислите ускорение и эффективность параллельного алгоритма по сравнению с последовательным в зависимости от размера матрицы. Реализуйте параллельный столбцово-ориентированный алгоритм умножения матрицы на вектор, вычислите время реализации алгоритма на различном числе процессоров для размера матрицы от 1000х1000 до 5000х5000. Вычислите ускорение и эффективность параллельного алгоритма по сравнению с последовательным в зависимости от размера матрицы. Проведите сравнение параллельных алгоритмов (строчно- и столбцово-ориентированного) по ускорению и эффективности.

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

2.1 Строковый

#include <stdio.h>

#include <stdlib.h>

#include "mpi.h"

unsigned int n=1000;

int main(int argc, char *argv[])

{

MPI_Init(&argc, &argv);

int iRank,iSize;

MPI_Comm_rank(MPI_COMM_WORLD, &iRank);

MPI_Comm_size(MPI_COMM_WORLD, &iSize);

///////////////////

int** iMatrix;

iMatrix=(int**)calloc(n,sizeof(int*));

for(int i=0; i<n; i++)

{

iMatrix[i]=(int*)calloc(n,sizeof(int));

}

if(!iMatrix)

{

printf("Error! Not enough memory");

exit(0);

}

//////////////////

int* iVr;

iVr=(int*)calloc(n,sizeof(int));

if(!iVr)

{

printf("Error! Not enough memory");

exit(0);

}

//////////////////

int* iResult;

iResult=(int*)calloc(n,sizeof(int));

if(!iResult)

{

printf("Error! Not enough memory");

exit(0);

}

//////////////

for(int i=0;i<n;i++)

{

for(int j=0;j<n;j++)

{

iMatrix[i][j]=rand()%11+1;//fill with random numbers

}

}

for(int i=0;i<n;i++)

{

iVr[i]=rand()%11+1;//fill it

}

iResult[0]=0;//Result of computing

double dTimeStart= MPI_Wtime();

for(int i=0;i<n;i++)

{

for(int j=0;j<n;j++)

{

iMatrix[i][j]=iMatrix[i][j]*iVr[j];

}

}

for(int i=0;i<n;i++)

{

for(int j=0;j<n;j++)

{

iResult[i]=iResult[i]+iMatrix[i][j];

}

}

double dTimeFifish=MPI_Wtime();

double r=dTimeFifish-dTimeStart;

printf("%.10f",r);

for(int i=0; i<n; i++)

{

free(iMatrix[i]);

}

free(iMatrix);

free(iVr);

free(iResult);

MPI_Finalize();

return 0;

}