/* */ /* CS 4331: Parallel Programming Fall, 2008 */ /* */ /* This UPC program computes heat flow in a 1-dimensional wire. */ #include #include #include //#include "upc.h" //#include "upc_collective.h" //#define MAXN 8 /* maximum vector length */ /* shared objects must be declared at file scope */ shared [8] double t[8*THREADS]; shared double epsilon, my_epsilon, max_epsilon; int main() { int i,j; // , s; int base; /* double tmp[2]; double *tme; double e, etmp; clock_t start_time, end_time; /* "wallclock" times */ /* tme = (double *)&t[MAXN*MYTHREAD]; for (i=0; i epsilon) */ for (j=0; j e) e = etmp; t[i-1] = tmp[0]; //tmp[0] = tmp[1]; } if (MYTHREAD < THREADS-1) { tmp[1] = (t[base+MAXN-2] + t[base+MAXN-1] + t[base+MAXN]) / 3.0; etmp = fabs(t[base+MAXN-1]-tmp[1]); //if (etmp > e) e = etmp; t[base+MAXN-1] = tmp[1]; } upc_barrier; t[base+MAXN-2] = tmp[0]; // printf("T=%d e=%lf\n", MYTHREAD, e); /* Convert to shared */ // my_epsilon = e; // upc_all_reduceD(&max_epsilon, &my_epsilon, UPC_MAX, sizeof(double), 1, NULL, 0); // if (MYTHREAD==0) // printf("step %d: E=%lf\n", s, max_epsilon); // ++s; } // upc_barrier; // if (MYTHREAD == 0) // { printf("%d steps e=%lf\n", s, e); // for (i=0; i