#include #include #include #include #include #include #define NCOL 20000 #define NROW 20000 #define NIT 2000 #define INC 1 error main() { int i, j, nit; double *x, *y, res[2]; clock_t t; double tprof[2] = { 0 }; rng·init(0); x = malloc(sizeof(*x)*NCOL); y = malloc(sizeof(*x)*NROW); #define DO_0 t = clock(); \ res[0] += blas·dasum(NROW/INC, x, INC); \ t = clock() - t; \ tprof[0] += 1000.*t/CLOCKS_PER_SEC; \ #define DO_1 t = clock(); \ res[1] += cblas_dasum(NROW/INC, x, INC); \ t = clock() - t; \ tprof[1] += 1000.*t/CLOCKS_PER_SEC; for (nit = 0; nit < NIT; nit++) { for (i = 0; i < NROW; i++) { x[i] = rng·random(); y[i] = rng·random(); } switch (nit % 2) { case 0: DO_0; DO_1; break; case 1: DO_1; DO_0; break; } } printf("mean time/iteration (mine): %fms\n", tprof[0]/NIT); printf("--> result (mine): %f\n", res[0]); printf("mean time/iteration (openblas): %fms\n", tprof[1]/NIT); printf("--> result (openblas): %f\n", res[1]); return 0; }