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<double> 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
}
Comments