Multiplying 100*100 matrix using threads and also produce the sum of the diagonal elements in another matrix

How To Write a C Program To Multiplying 100*100 matrix using threads and also produce the sum of the diagonal elements in another matrix in C Programming Language ?


Solution For Multiplying 100*100 matrix using threads and also produce the sum of the diagonal elements in another matrix :

#include <omp.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
long int a[100][100],c[100][100],b[100][100],d[100][100],i,k,j,val;
int id,ids;
#pragma omp parallel for private(i,j) shared(a)
for(j=0;j<100;j++)
{
for(i=0;i<100;i++)
{
a[i][j]=rand()%999;
}
}

#pragma omp parallel for private(i,j) shared(b)
for(j=0;j<100;j++)
{
for(i=0;i<100;i++)
{
b[i][j]=rand()%999;
}
}

val=0;
#pragma omp parallel for private(i,j,k) shared(a,b,c)
for(k=0;k<100;k++)
{
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
c[i][j]=c[i][j]+(a[i][k]*b[k][j]);
} }
}
/*
for(j=0;j<100;j++)
{
for(i=0;i<100;i++)
{
printf("%ld\n",a[i][j]);
}
}
for(j=0;j<100;j++)
{
for(i=0;i<100;i++)
{
printf("%ld\n",b[i][j]);
}
}
*/
#pragma omp parallel for private(i,j) shared(c)
for(j=0;j<100;j++)
{
for(i=0;i<100;i++)
{
printf("%ld\n",c[i][j]);
}
}
#pragma omp critical
#pragma omp parallel for private(i,j) shared(id)
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
ids=omp_get_num_threads();
id=omp_get_thread_num();
if(id%2!=0)
{
while(id%2!=0)
{
ids=omp_get_num_threads();
id=omp_get_thread_num();
}
}
else
{ if(id%2==0)
{
printf("Thread number is %d\n",id);
d[i][j]=a[i][j]+b[i][j];
printf("%ld\n",d[i][j]);
}
else
{
while(id%2!=0)
{
ids=omp_get_num_threads();
id=omp_get_thread_num();
}
}
}
}
}
return 0;
}

Tags:  Multiplying 100*100 matrix using threads and also produce the sum of the diagonal elements in another matrix, matrix multiplication example, matrix addition, matrix vector multiplication, matrix multiplier, matrix division, matrix multiplication rules, matrix transpose, matrix inverse.


Learn More :