Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра ЕОМ
Звіт
про виконання лабораторної роботи №2
з курсу: «Паралельні та розподілені обчислення»,
на тему:
«Паралельне представлення алгоритмів»
Львів 2005 рік
Мета: вивчити можливості паралельного представлення алгоритму. Набути навиків такого представлення.
Текст програмної реалізації
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <stdlib.h>
#include <string.h>
int **A, **B, **Y ;
//---------------------------------------------
void genA(int n)
{
int i, j ;
A = (int**)calloc(n,sizeof(int*)) ;
for(i=0;i<n;i++)
A[i] = (int*)calloc(n,sizeof(int)) ;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if (j<=n-i)
A[i][j] = (i+1);
else A[i][j] = 0 ;
}
//-------------------------------------------
void genB(int n)
{
int i, j, k, s;
B = (int**)calloc(n,sizeof(int*)) ;
for(i=0;i<n;i++)
B[i] = (int*)calloc(n,sizeof(int)) ;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
B[i][j] = rand()%10 ;
k=0; s=1;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
if ((j<k)||(j>=(n-k)))
B[i][j] =0;
if (k==(n/2)) s=-1;
k+=s;
}
}
//----------------------------------------------------------
int** mulmat(int n,int **a,int **b)
{
int **c ;
int i, j, k, s ;
c = (int**)calloc(n,sizeof(int*)) ;
for(i=0;i<n;i++)
c[i] = (int*)calloc(n,sizeof(int)) ;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
c[i][j] = a[i][i]*b[i][j] ;
}
return c ;
}
//--------------------------------------
void printmatrix(int **A, int n)
{
int i, j ;
char *a ;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
printf(" %5d ",A[i][j]) ;
printf("\n") ;
}
printf("----------------------------------------\n") ;
}
//-----------------------------------------------
void readmatrix(int **AA, int n)
{
int i, j ;
char *s ;
AA = (int**)calloc(n,sizeof(int*)) ;
for(i=0;i<n;i++)
AA[i] = (int*)calloc(n,sizeof(int)) ;
for(i=0; i<n; i++)
for(j=0; j<n ;j++)
{
printf("\nEnter B[%d][%d] = ",i,j) ;
gets(s);
//scanf("%d",&s) ;
AA[i][j] = atoi(s) ;
}
}
//----------------------------------------------
void main()
{
int i, j, n ;
char str[25] ;
clrscr() ;
printf("Enter size matrix n: ") ;
gets(str) ;
n = atoi(str) ;
printf("\nEnter matrix B from the keyboard (y/n)?") ;
gets(str) ;
if (strcmp(str,"y")==0)
readmatrix(B,n) ;
else genB(n) ;
genA(n) ;
Y = (int**)calloc(n,sizeof(int*)) ;
for(i=0;i<n;i++)
Y[i] = (int*)calloc(n,sizeof(int)) ;
Y = mulmat(n,A,B) ;
printf("Matrix A: \n") ;
printmatrix(A,n) ;
printf("Matrix B: \n") ;
printmatrix(B,n) ;
printf("Matrix Y: \n") ;
printmatrix(Y,n) ;
getch() ;
}
Граф залежностей
Приклад виконання програми
Enter size matrix n: 5
Enter matrix B from the keyboard (y/n)? n
Matrix A:
1 1 1 1 1
2 2 2 2 2
3 3 3 3 0
4 4 4 0 0
5 5 0 0 0
----------------------------------------
Matrix B:
6 0 2 0 6
0 5 5 8 0
0 0 1 0 0
0 2 1 3 0
9 1 0 5 4
----------------------------------------
Matrix Y:
6 0 2 0 6
0 10 10 16 0
0 0 3 0 0
0 0 0 0 0
0 0 0 0 0
----------------------------------------
Висновок. На даній лабараторній роботі я вивчив можливості паралельного представлення алгоритму. Набув навиків такого представлення. Розробив власний локально-рекурсивний алгоритм, для реалізації заданого варіанту.