#include #include #include #include #include int main(int argc, char **argv) { double *block, sum=0; float scale; int cacheSize=8388608/sizeof(double), numBlocks=2000, i, j, iblock; if(argc != 2) { printf("Usage cachetest2 \n"); exit(1); } scale=atof(argv[1]); printf("Read scale as %f\n", scale); block = (double *)memalign(32, (int)(cacheSize*scale)*sizeof(double)); memset(block, 0, (int)(cacheSize*scale)*sizeof(double)); for(iblock = 0; iblock < numBlocks; iblock++) { block[0] += 1; #pragma omp simd for(i = 0; i < (int)(cacheSize*scale); i++) { block[i] += i*i*i/1.e12; } } for(i = 0; i < (int)(cacheSize*scale); i++) sum += block[i]; printf("sum of element is %f\n", sum); return 0; }