nemo_main() { int n=getiparam("n"); int iter=getiparam("iter"); int m=getiparam("m"); int seed = init_xrandom(getparam("seed")); int i,j,k,l; real *x, sum; real t0,t1,t2; init_timers(100); stamp_timers(0); x = (real *) allocate(n*sizeof(real)); for (i=0; i<n; i++) /* init the whole array */ x[i] = xrandom(0.0,1.0); for (i=0; i<m; i++) /* cache it in again ? */ x[i] = xrandom(0.0,1.0); sum = 0.0; t0 = cputime(); stamp_timers(1); if (m==0) { /* do it in one sweep, the N^2 algorithm */ stamp_timers(2); for (l=0; l<iter; l++) for (j=0; j<n; j++) for (i=0; i<n; i++) sum += FUN(x[i],x[j]); stamp_timers(3); } else { /* N/M times a small M*M patch that may be in cache */ stamp_timers(2); for (l=0; l<iter; l++) for (k=0; k<n-m; k++) for (j=k; j<k+m; j++) for (i=k; i<k+m; i++) sum += FUN(x[i],x[j]); stamp_timers(3); } stamp_timers(4); t1 = cputime(); if (m) printf("%d %d %d sum=%lg Mops=%lg\n", n,iter,m,sum,iter*m*m*n/(t1-t0)/60.0/1e6); else printf("%d %d %d sum=%lg Mops=%lg\n", n,iter,m,sum,iter*n*n/(t1-t0)/60.0/1e6); stamp_timers(5); printf("%Ld %Ld %Ld %Ld %Ld\n", diff_timers(0,1), diff_timers(1,2), diff_timers(2,3), diff_timers(3,4), diff_timers(4,5)); }
double run_experiment_ji ( mtype_t * matrix , mtype_t scalar , int buffer_size ) { int i, j, iter; hptimer_t start , end; double final_time ; start = get_time (); for ( iter = 0; iter < MAX_ITERS ; ++ iter ) { for (j = 0; j < buffer_size ; ++j ) { for (i = 0; i < buffer_size ; ++i ) { matrix [ GET_INDEX (i, j, buffer_size ) ] = scalar * matrix [ GET_INDEX (i, j, buffer_size ) ]; } } } end = get_time (); return final_time = diff_timers (start , end) / MAX_ITERS ; }