#include #include #include #include #include #include int size, num; double get_cur_time() { struct timeval tv; struct timezone tz; double cur_time; gettimeofday(&tv, &tz); cur_time = tv.tv_sec + tv.tv_usec / 1000000.0; return cur_time; } void generate_mat(double *mat, const int s) { int i; for (i = 0; i < s*s; i++) { mat[i] = 0.0; } } void run_dpotrf() { double * A; int i; posix_memalign( (void **)&A, 4096, sizeof(double) * size * size ); if (A != NULL) { generate_mat(A, size); } else { printf("no mem\n"); } double start_t, end_t, gflops; start_t = get_cur_time(); LAPACKE_dpotrf( LAPACK_COL_MAJOR, 'U', size, A, size ); end_t = get_cur_time(); gflops = (((double)(size) * (((1. / 6.) * (double)(size) ) * (double)(size) - (1. / 6.))) + ((double)(size) * (((1. / 6.) * (double)(size) + 0.5) * (double)(size) + (1. / 3.))))/ (end_t-start_t) / 1000000000; printf("time %f, gflops %f\n", end_t-start_t, gflops); for (i = 0; i < num; i++) { start_t = get_cur_time(); LAPACKE_dpotrf( LAPACK_COL_MAJOR, 'L', size, A, size ); end_t = get_cur_time(); gflops = (((double)(size) * (((1. / 6.) * (double)(size) ) * (double)(size) - (1. / 6.))) + ((double)(size) * (((1. / 6.) * (double)(size) + 0.5) * (double)(size) + (1. / 3.))))/ (end_t-start_t) / 1000000000; printf("time %f, gflops %f\n", end_t-start_t, gflops); } free(A); } int main(int argc, char *argv[]) { int i; size = 4800; num = 10; for( i = 1; i < argc; i++ ) { if(0 == strcmp(argv[i], "-N")) { size = atoi(argv[i+1]); i++; } if(0 == strcmp(argv[i], "-L")) { num = atoi(argv[i+1]); i++; } } run_dpotrf(); return 0; }