Я пытаюсь реализовать dft api INTEL MKL для проверки его скорости на CentOS 7. Компиляция прошла успешно, но при запуске выдает ошибку сегментации. Тем не менее, код уже успешно работает с Visual Studio 2017 для Windows. Результат для Windows выглядит следующим образом: Результат для Windows
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <execinfo.h>
#include <cxxabi.h>
#include <omp.h>
#include <complex>
#include "mkl_dfti.h"
int main() {
MKL_LONG len[2] = { 1080, 961 }, status;
float x_in[1080][1920];
DFTI_DESCRIPTOR_HANDLE fft;
status = DftiCreateDescriptor(&fft, DFTI_SINGLE, DFTI_REAL, 2, len);
status = DftiSetValue(fft, DFTI_PLACEMENT, DFTI_NOT_INPLACE);
status = DftiCommitDescriptor(fft);
//float x[1080* 2000];
std::complex<float> x_out[1080][961];
for (int i = 0; i < 10; i++) {
double totalcputime = (double)cv::getTickCount();
//std::cout << status << std::endl;
status = DftiComputeForward(fft, x_in, x_out);
//std::cout << status << std::endl;
totalcputime = ((double)cv::getTickCount() - totalcputime) / cv::getTickFrequency();
std::cout << "MKL-DFT Time: " << totalcputime << std::endl;
}
cv::Mat sizedimage = cv::Mat::zeros(1080, 1920, CV_32FC1);
cv::Mat opencvtransform = cv::Mat(1080, 1920 / 2 + 1, CV_32FC1);
for (int i = 0; i < 10; i++) {
double totalcputime = (double)cv::getTickCount();
cv::dft(sizedimage, opencvtransform);
totalcputime = ((double)cv::getTickCount() - totalcputime) / cv::getTickFrequency();
std::cout << "opencv-DFT Time: " << totalcputime << std::endl;
}
return 0;
}
Я использовал GDB для отладки своего кода, он дает мне следующую информацию:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004012b8 in main () at comparison.cpp:25
25 status = DftiCreateDescriptor(&fft, DFTI_SINGLE, DFTI_REAL, 2, len);
файл успешно скомпилирован следующими параметрами:
g++ comparison.cpp `pkg-config opencv --cflags --libs` -lmkl_rt -g
Кто-нибудь имеет представление о причине этой ошибки?