- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi! I'm coding my own dll in C++ language and tried to use FFT from MKL in my dll and got an error.
I'm using Win7, VS2019 and mkl 2019.5.281,
I run official one-dimensional In-place FFT example (https://software.intel.com/en-us/node/522290) in c++ console application and it worked perfectly.
Then, i tried to do FFT by calling the c++ function( with no input parametrs and with the same example code) from python by ctypes library, but it didn't work, so i checked output parametrs of functions and defined an error.
The output status of DftiCommitDescriptor(descriptor) is equal to 5. Here it is an error message - "Intel MKL DFTI ERROR: Descriptor is uncommitted or corrupted".
Could please help me to fix this problem? Thanks in advance.
void my(std::vector<std::complex<float>>& in) { DFTI_DESCRIPTOR_HANDLE descriptor; MKL_LONG status; // Here everything is fine status = DftiCreateDescriptor(&descriptor, DFTI_SINGLE, DFTI_COMPLEX, 1, in.size()); //Specify size and precision if (status && !DftiErrorClass(status, DFTI_NO_ERROR)) { printf("Error: %s\n", DftiErrorMessage(status)); } // Error here status = DftiCommitDescriptor(descriptor); if (status && !DftiErrorClass(status, DFTI_NO_ERROR)) { printf("Error: %s\n", DftiErrorMessage(status)); } status = DftiComputeForward(descriptor, in.data()); status = DftiFreeDescriptor(&descriptor); } // extern c++ function, it's called by a function from python void cpp() { std::vector<float> v = { 1.1, 2.1, 3.5, 4.2 }; std::vector<std::complex<float>> in(v.size()); std::copy(in.begin(), in.end(), v.begin()); my(in); }
// .h file #pragma once #include <iostream> #include <vector> #include <complex> #include "mkl_dfti.h" #ifdef DETERMINISTIC_EXPORTS #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif extern "C" DLL_API void cpp(); std::vector<std::complex<float>> fft_real(std::vector<float>& in_real); std::vector<std::complex<float>> fft_complex(std::vector<std::complex<float>>& in);
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
make sense to address this question to the python forum - https://software.intel.com/en-us/forums/intel-distribution-for-python
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page