- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello everyone,
I've noticed that the MKL is giving me a wrong result while calculating 3D real-to-complex in-place FFT with specific sizes. I've found a test program on this forums to confirm it's not a bug in my code, attaching the source code with settings I've used.
The error is present using both Windows and GNU/Linux, and all the Intel MKL versions following 2017.0.0 are broken (the 2017.0.0 version is the last working for me). I can use a newer Intel C Compiler but have to link the older MKL library in order to get a working code so it seems to be a bug in the library itself.
Compiling on GNU/Linux with:
icc basic_sp_real_dft_3d.c -DMKL_ILP64 -lmkl_intel_ilp64 -lmkl_core -lmkl_intel_thread -o dfttest -qopenmp
Output:
Intel(R) Math Kernel Library Version 2017.0.3 Product Build 20170413 for Intel(R) 64 architecture applications
Example basic_sp_real_dft_3d
Forward-Backward single-precision in-place 3D real FFT
Configuration parameters:
DFTI_PRECISION = DFTI_SINGLE
DFTI_FORWARD_DOMAIN = DFTI_REAL
DFTI_DIMENSION = 3
DFTI_LENGTHS = {360, 384, 433}
DFTI_PLACEMENT = DFTI_INPLACE
DFTI_CONJUGATE_EVEN_STORAGE = DFTI_COMPLEX_COMPLEX
Create DFTI descriptor
Set configuration: CCE storage
Set input strides = { 0, 166656, 434, 1 }
Set output strides = { 0, 83328, 217, 1 }
Commit the descriptor
Allocate data array
Initialize data for r2c transform
Compute real-to-complex in-place transform
Verify the result
Check if err is below errthr 7.7e-06
Verified, maximum error was 2.67e-07
Change strides to compute backward transform
Commit the descriptor
Initialize data for c2r transform
Compute backward transform
Verify the result
Check if err is below errthr 7.7e-06
x[359][2][0]: expected 0, got 0.0003608387, err 0.000361
Verification FAILED
ERROR, status = 1
Free DFTI descriptor
Free data array
TEST FAILED
Thanks for pointing out if I'm doing anything wrong. It would be nice to get a working version otherwise :).
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
thanks, we take a look at the case. Is this case happens with ILP64 or lp64 API too? Are there any specific CPU where do you this issue?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I've just checked, and even thought I use 64-bit API (ILP64) it is broken with 32-bit (LP64) one too, with the exact same result.
As far as processors go, I can confirm it's broken on several (at least E5-2620, E5-2695, i5-6500). Weirdly enough, it seems to work (both APIs) on E5-2670. To confirm this, I've tried to link the library statically on the E5-2670 machine and it still yields the wrong result on the others.
Edit:
So with some help I've obtained results from more systems. So to summarize:
Sandy Bridge - E5-2650, E5-2670
Ivy Bridge - i7-3770
are passing the attached test;
Haswell - E5-2620 v3, E5-2695 v3
Broadwell - E5-2620 v4
Skylake - i5-6500
are failing the attached test.
Since I suspect the MKL supports the conditional code execution depending on the architecture, AVX2 version is probably the one to blame.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page