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

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

#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;

double dTimeStart;

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);

}

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

int* iTemp;

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

if(!iTemp)

{

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

iResult[1]=0;

iResult[2]=0;

iResult[3]=0;

iResult[4]=0;

iResult[5]=0;

if(0==iRank)

dTimeStart= MPI_Wtime();

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

{

for(int i=iRank;i<n;i+=iSize)

{

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

}

}

MPI_Reduce(iTemp,iResult,n,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);

if(0==iRank)

{

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;

}

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

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

1000х1000

2000х2000

3000х3000

4000х4000

5000х5000

Строковый последова-тельный

0,0135

0,0546

0,1237

0,2191

0,3445

Столбцовый

последова-тельный

0,0076

0,0313

0,0704

0,1253

0,1988

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

Х2

0,0072

0,0276

0,0621

0,1127

0,1753

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

Х4

0,0039

0,0160

0,0337

0,0562

0,0877

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

Х6

0,0038

0,0093

0,0220

0,0375

0,0585

Столбцовый

Параллельный

Х2

0,0073

0,0306

0,0704

0,1275

0,2054

Столбцовый

Параллельный

Х4

0,0066

0,0180

0,0399

0,0693

0,1028

Столбцовый

Параллельный

Х6

0,0055

0,0167

0,0347

0,0532

0,0761

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

Строчный

Х2

Строчный

Х4

Строчный

Х6

Стоблцов

ый Х2

Стоблцов

ый Х4

Стоблцов

ый Х6

1000х1000

1,875

3,461

3,461

1,041

1,151

1,381

2000х2000

1,978

3,412

5,87

1,022

1,738

1,874

3000х3000

1,991

3,67

5,622

1

1,764

2,028

4000х4000

1,944

3,898

5,842

0,982

1,808

2,355

5000х5000

1,965

3,928

5,888

0,967

1,942

2,612