Intel® Math Kernel Library 2018 Developer Reference - C
Frees unused memory allocated by the Intel MKL Memory Allocator.
void mkl_free_buffers (void);
To improve performance of Intel MKL, the Memory Allocator uses per-thread memory pools where buffers may be collected for fast reuse. The mkl_free_buffers function frees unused memory allocated by the Memory Allocator.
See the Intel MKL Developer Guide for details.
You should call mkl_free_buffers after the last call to Intel MKL functions. In large applications, if you suspect that the memory may get insufficient, you may call this function earlier, but anticipate a drop in performance that may occur due to reallocation of buffers for subsequent calls to Intel MKL functions.
In a threaded application, avoid calling mkl_free_buffers from each thread because the function has a global effect. Call mkl_thread_free_buffers instead.
DFTI_DESCRIPTOR_HANDLE hand1; DFTI_DESCRIPTOR_HANDLE hand2; void mkl_free_buffers(void); . . . . . . /* Using Intel MKL FFT */ Status = DftiCreateDescriptor(&hand1, DFTI_SINGLE, DFTI_COMPLEX, dim, m1); Status = DftiCommitDescriptor(hand1); Status = DftiComputeForward(hand1, s_array1); . . . . . . Status = DftiCreateDescriptor(&hand2, DFTI_SINGLE, DFTI_COMPLEX, dim, m2); Status = DftiCommitDescriptor(hand2); . . . . . . Status = DftiFreeDescriptor(&hand1); /* Do not call mkl_free_buffers() here because the hand2 descriptor will be corrupted! */ . . . . . . Status = DftiComputeBackward(hand2, s_array2)); Status = DftiFreeDescriptor(&hand2); /* Here you finish using Intel MKL FFT */ /* Memory leak will be triggered by any memory control tool */ /* Use mkl_free_buffers() to avoid memory leaking */ mkl_free_buffers();