#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;
}
If the answers is incorrect or not given, you can answer the above question in the comment box. If the answers is incorrect or not given, you can answer the above question in the comment box.