Я пишу программу регистрации изображений и обнаружил странную ошибку при использовании mkl_free (). Я написал реализацию матричной экспоненциальной функции — expm () — из MATLAB с использованием функций MKL. Я проверил его отдельно, и он работает без каких-либо ошибок.
Код можно найти здесь: https://github.com/poliu2s/MKL/blob/master/matrix_exponential.cpp
Проблема возникает, когда я вызываю ее из других функций, которым она нужна для расчета. Моя программа в настоящее время вылетает прямо перед тем, как я вызываю первый mkl_free (), поэтому я подозреваю, что это какая-то утечка памяти. Но не должны ли матрицы, используемые внутри функции, быть самодостаточными? Я не понимаю, как их освобождение приведет к сбою всей моей программы.
Вызовы mkl_free_buffers (); и mkl_thread_free_buffers (); не производит никакого эффекта, который я могу наблюдать. Я попытался отключить Intel Memory Manager с помощью mkl_disable_fast_mm () за счет скорости в начале выполнения программы, но также безрезультатно.
Я проверил входные данные, входящие в саму функцию, и матрица совершенно верна — точно так же, как те, которые я использовал во время тестирования.
Есть ли какая-то причина, почему моя программа зависала, когда я вызываю mkl_free (array) в определенных циклах?
Есть несколько проблем с вашим кодом. Также не обязательно, но потенциально может привести к segfault, но вы должны исправить их при исследовании вашей проблемы.
void cblas_dcopy (const MKL_INT N, const double * X, const MKL_INT
incX, double * Y, const MKL_INT incY);
Предполагая, что вы используете функцию MKLS, передавая адрес &один, &sxtn to dcopy — это неправильно. Вы можете писать в любом месте вашей памяти процесса.
Еще два комментария о стиле:
Других решений пока нет …