Examples of mkl_malloc(), mkl_free(), mkl_mem_stat() Usage

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;
}

Submit feedback on this help topic