#include "forkjoin.h"
#include "barrier.h"
main()
{
int *x,*u,*z,r,t;
int pid,nproc,*bar,shmid,shmid1,shmid2,shmid3,shmid4;
int i,n,*sum;
printf("Enter the no. of elements : ");
scanf("%d",&n);
x=(int *) create_memory(sizeof(int)*n,&shmid);
u=(int *) create_memory(sizeof(int)*(n+6),&shmid1);
z=(int *) create_memory(sizeof(int)*n,&shmid2);
printf("Enter the value of array U\n");
for(i=0;i<n+6;i++)
{
printf("Enter the valueof U[%d] : ",i+1);
scanf("%d",&u[i]);
}
printf("\nEnter the value of array Z\n");
for(i=0;i<n;i++)
{
printf("Enter the valueof Z[%d] : ",i+1);
scanf("%d",&z[i]);
}
printf("\nEnter the value of r : ");
scanf("%d",&r);
printf("Enter the value of t : ");
scanf("%d",&t);
printf("\nEnter the no. of processes : ");
scanf("%d",&nproc);
bar=(int *) create_memory(sizeof(int),&shmid3);
sum=(int *) create_memory(sizeof(int)*3,&shmid4);
bar=barrier_init(333);
pid=create_process(nproc);
for(i=pid/3;i<n;i+=nproc/3)
{
if(pid%3 == 0)
sum[pid]=r * (z[i] + r*u[i]);
elseif(pid%3==1)
sum[pid]=t*(u[i+3] + r*(u[i+2] + r*u[i+1]));
else
sum[pid]=t*t*(u[i+6] + r*(u[i+5] + r*u[i+4]));
barrier(bar);
if(pid%3==0)
x[i]=u[i]+sum[pid]+sum[pid+1]+sum[pid+2];
}
join_process(nproc,pid);
printf("\nThe result is : ");
for(i=0;i<n;i++)
printf("%d\t",x[i]);
clear_memory(&shmid);
clear_memory(&shmid1);
clear_memory(&shmid2);
clear_memory(&shmid3);
clear_memory(&shmid4);
}