Visible to Intel only — GUID: GUID-F7EDB71E-17A8-4154-A600-0CE720F81616
Visible to Intel only — GUID: GUID-F7EDB71E-17A8-4154-A600-0CE720F81616
mkl_free_buffers
Frees unused memory allocated by Intel® oneAPI Math Kernel Library (oneMKL) on the Host, including both CPU- and GPU-related buffers.
Syntax
call mkl_free_buffers
mkl.fi
Description
To improve performance of Intel® oneAPI Math Kernel Library (oneMKL) on CPU, the Memory Allocator uses per-thread memory pools where buffers may be collected for fast reuse. Intel® oneAPI Math Kernel Library (oneMKL) also allocates temporary buffers on the host memory to improve performance of GPU kernels. The mkl_free_buffers function frees both types of memory.
See theIntel® oneAPI Math Kernel Library (oneMKL) Developer Guide for details.
You should call mkl_free_buffers after the last call to Intel® oneAPI Math Kernel Library (oneMKL) 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® oneAPI Math Kernel Library (oneMKL) functions.
mkl_free_buffers is triggered automatically during oneMKL unloading when it is possible as part of mkl_finalize; however, in the case of statically linked oneMKL or oneMKL using GPU on Windows, the user must call mkl_free_buffers or mkl_finalize manually in order to clean up oneMKL internal buffers when oneMKL is no longer needed.
Product and Performance Information |
---|
Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex. Notice revision #20201201 |
Usage of mkl_free_buffers with FFT Functions (C Example)
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); . . . . . . 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();