#include<stdio.h> #include \"shared.h\" #include \"forkjoin.h\" int main() { int i, j, k, n, pid, nproc, **a, **b, **c; int m=0, shmidc[10], sh6; int *ival, *jval, *kval, sh, sh2, sh3, sh4, sh5, shmid[10], shmidb[10]; printf(\"Enter the size for the matrix :: \"); scanf(\"%d\",&n); *a=(int *)create_memory(sizeof(int)*n, &sh); for(i=0;i<n;i++) a[i]=(int *)create_memory(n*2, &shmid[i]); b=(int **)create_memory(n*sizeof(int),&sh2); for(i=0;i<n;i++) b[i]=(int *)create_memory(n*2, &shmidb[i]); c=(int **)create_memory(n*2,&sh3); for(i=0;i<n;i++) c[i]=(int *)create_memory(n*2,&shmidc[i]); ival=(int *)create_memory(n*n*n*2, &sh4); jval =(int *)create_memory(n*n*n*2, &sh5); kval =(int *)create_memory(n*n*n*2, &sh6); printf(\"\\nEnter the value of first matrix\\n\"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf(\"Enter the value of a[%d][%d] :: \",i+1,j+1); scanf(\"%d\",&a[i][j]); } } printf(\"\\nEnter the value of second matrix\\n\"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf(\"Enter the value of b[%d][%d] :: \",i+1,j+1); scanf(\"%d\",&b[i][j]); } } m=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { for(k=0;k<n;k++) { ival[m]=i; jval[m]=j; kval[m]=k; m++; } } } printf(\"Enter the total number of processes :: \"); scanf(\"%d\",&nproc); pid=create_process(&nproc); for(m=pid;m<n*n*n;m+=nproc) { i=ival[m]; j=jval[m]; k=kval[m]; c[i][j] += a[i][k]*b[k][j]; } join_process(&nproc,&pid); printf(\"\\nThe resultant matrix is\\n\"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf(\"%d\\t\",c[i][j]); } printf(\"\\n\"); } for(i=0;i<n;i++) { cleanup_memory(&shmid[i]); cleanup_memory(&shmidc[i]); cleanup_memory(&shmidb[i]); } cleanup_memory(&sh); cleanup_memory(&sh2); cleanup_memory(&sh3); cleanup_memory(&sh4); cleanup_memory(&sh5); cleanup_memory(&sh6); printf(\"\\n\"); return 0; } /* OUTPUT */ Enter the size for the matrix :: 2 Enter the value of first matrix Enter the value of a[1][1] :: 1 Enter the value of a[1][2] :: 2 Enter the value of a[2][1] :: 3 Enter the value of a[2][2] :: 4 Enter the value of second matrix Enter the value of b[1][1] :: 5 Enter the value of b[1][2] :: 6 Enter the value of b[2][1] :: 7 Enter the value of b[2][2] :: 8 Enter the total number of processes :: 2 The resultant matrix is 19 22 43 50