#include #include #include #include "mkl.h" double nanodiff(const uint64_t _t0, const uint64_t _t1) { long double t0, t1, numer, denom, nanosec; mach_timebase_info_data_t tb_info; mach_timebase_info(&tb_info); numer = (long double)(tb_info.numer); denom = (long double)(tb_info.denom); t0 = (long double)(_t0); t1 = (long double)(_t1); nanosec = (t1 - t0) * numer / denom; return (double)nanosec; } int main(int argc, char **argv) { const int BOUNDARY = 64; long double nanosec; int n = 512; int m = n, k = n; double *A = (double*)mkl_malloc(n*n*sizeof(double), BOUNDARY); double *B = (double*)mkl_malloc(n*n*sizeof(double), BOUNDARY); double *C = (double*)mkl_malloc(n*n*sizeof(double), BOUNDARY); uint64_t t0, t1; t0 = mach_absolute_time(); cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, k, 1.0, A, k, B, n, 1.0, C, n); t1 = mach_absolute_time(); nanosec = nanodiff(t0, t1); printf("elapsed time: %g ns\n", (double)nanosec); mkl_free(A); mkl_free(B); mkl_free(C); }