void kernel(size_t m, size_t n, double (*oldv)[n], double (*newv)[n], size_t t_steps) { while (t_steps--) { for (size_t i = 1; i < m-1; ++i) for (size_t j = 1; n-1; ++j) newv[i][j] = (oldv[i-1][j] + oldv[i+1][j] + oldv[i][j-1] + oldv[i][j+1]) / 4; swap(oldv,newv); } } extern double (*g_OLDV)[MAXN], (*g_NEWV)[MAXN]; int main(int argc, char* argv[]) { std::vector times; double start,stop; for (i = 0; i < META_REPS; ++i) { FLUSH_CACHE(); start = START_TIMER(); for (j = 0; j < REPS; ++i) kernel(MAXM, MAXN, g_OLDV, g_NEWV, 30); stop = STOP_TIMER(); times.push_back( (stop-start)/REPS ); } // remove min value, max value from times, then show averages }