Usage Example
in Fortran
PROGRAM FOO
REAL*8 A,B,C
POINTER (A_PTR,A(1)), (B_PTR,B(1)), (C_PTR,C(1)
INTEGER N, I
REAL*8 ALPHA, BETA
INTEGER*8 ALLOCATED_BYTES
INTEGER*4 ALLOCATED_BUFFERS
#ifdef _SYSTEM_BITS32
INTEGER*4 MKL_MALLOC
INTEGER*4 ALLOC_SIZE
#else
INTEGER*8 MKL_MALLOC
INTEGER*8 ALLOC_SIZE
#endif
INTEGER MKL_MEM_STAT
EXTERNAL MKL_MALLOC, MKL_FREE, MKL_MEM_STAT
ALPHA = 1.1; BETA = -1.2
N = 1000
ALLOC_SIZE = 8*N*N
A_PTR = MKL_MALLOC(ALLOC_SIZE,64)
B_PTR = MKL_MALLOC(ALLOC_SIZE,64)
C_PTR = MKL_MALLOC(ALLOC_SIZE,64)
DO I=1,N*N
A(I) = I
B(I) = -I
C(I) = 0.0
END DO
CALL DGEMM('N','N',N,N,N,ALPHA,A,N,B,N,BETA,C,N);
ALLOCATED_BYTES = MKL_MEM_STAT(ALLOCATED_BUFFERS)
PRINT *,'DGEMM uses ',ALLOCATED_BYTES,' bytes in ',
$ ALLOCATED_BUFFERS,' buffers '
CALL MKL_FREE_BUFFERS
ALLOCATED_BYTES = MKL_MEM_STAT(ALLOCATED_BUFFERS)
IF (ALLOCATED_BYTES > 0) THEN
PRINT *,'MKL MEMORY LEAK!'
PRINT *,'AFTER MKL_FREE_BUFFERS there are ',
$ ALLOCATED_BYTES,' bytes in ',
$ ALLOCATED_BUFFERS,' buffers'
END IF
CALL MKL_FREE(A_PTR)
CALL MKL_FREE(B_PTR)
CALL MKL_FREE(C_PTR)
STOP
END
Usage
Example in C
#include <stdio.h>
#include <mkl.h>
int main(void) {
double *a, *b, *c;
int n, i;
double alpha, beta;
MKL_INT64 AllocatedBytes;
int N_AllocatedBuffers;
alpha = 1.1; beta = -1.2;
n = 1000;
a = (double*)mkl_malloc(n*n*sizeof(double),64);
b = (double*)mkl_malloc(n*n*sizeof(double),64);
c = (double*)mkl_malloc(n*n*sizeof(double),64);
for (i=0;i<(n*n);i++) {
a[i] = (double)(i+1);
b[i] = (double)(-i-1);
c[i] = 0.0;
}
dgemm("N","N",&n,&n,&n,&alpha,a,&n,b,&n,&beta,c,&n);
AllocatedBytes = mkl_mem_stat(&N_AllocatedBuffers);
printf("\nDGEMM uses %ld bytes in %d buffers",(long)AllocatedBytes,N_AllocatedBuffers);
mkl_free_buffers();
AllocatedBytes = mkl_mem_stat(&N_AllocatedBuffers);
if (AllocatedBytes > 0) {
printf("\nMKL memory leak!");
printf("\nAfter mkl_free_buffers there are %ld bytes in %d buffers",
(long)AllocatedBytes,N_AllocatedBuffers);
}
mkl_free(a);
mkl_free(b);
mkl_free(c);
return 0;
}