Quantcast
Channel: Intel® oneAPI Math Kernel Library & Intel® Math Kernel Library
Viewing all articles
Browse latest Browse all 2652

Floating Point Exception in MKL FFT from 18.0.4 onwards.

$
0
0

A floating point overflow is raised in the code below giving the following backtrace.

Program received signal SIGFPE, Arithmetic exception.
0x0000000000d4a1e6 in mkl_dft_avx2_coDFTColTwid_Compact_Fwd_v_10_s ()
(gdb) backtrace
#0  0x0000000000d4a1e6 in mkl_dft_avx2_coDFTColTwid_Compact_Fwd_v_10_s ()
#1  0x00000000005e6e0d in compute_colbatch_fwd ()
#2  0x00000000004057dc in MAIN__ ()

 

The same code runs fine with a previous version of mkl (11.1.1) or if the CNR mode is set to SSE4_2.

Seems something specific to the avx2 code path.

 

program mkl_test

   USE MKL_DFTI

  include  'mkl.fi'

  integer, parameter :: len_i = 1025
  integer, parameter :: len_j = 1920
  complex :: values_in(len_i * len_j)
  complex :: values_out(len_i * len_j)
  real :: temp_r, temp_i
  integer :: ieee_flags
  character*16 :: out
  integer :: i, j, unit,  status
  integer stride_in(2)
  integer stride_out(2)

  type(dfti_descriptor), pointer :: My_Desc1_Handle
!---------------------------------------------------------------------------------------------------  
  values_out(:) = cmplx(0,0)

  print*, "Started and reading in data..."
  open(unit, file='data2_CFFT.txt')
  do j=1, len_j
    do i=1, len_i
      read(unit, '(2f15.8)') temp_r, temp_i
      values_in((j-1) * len_i + i) = cmplx(temp_r,temp_i)
    enddo
  enddo
  close(unit)
  print*, "Done reading data"

!  status = mkl_cbwr_set(MKL_CBWR_SSE4_2)
!  if(status .ne. MKL_CBWR_SUCCESS ) then
!     print *, 'unable to set the mkl environment'

!  endif

  i = ieee_flags('set', 'exception', 'overflow', out)

  stride_in(0)=0;
  stride_in(1)=1025;
  stride_out(0)=0;
  stride_out(1)=1025;

  status = DftiCreateDescriptor(My_Desc1_Handle,DFTI_SINGLE,DFTI_COMPLEX,1,1920)
  status = DftiSetValue(My_Desc1_Handle, DFTI_PLACEMENT, DFTI_NOT_INPLACE);
  status = DftiSetValue(My_Desc1_Handle, DFTI_NUMBER_OF_TRANSFORMS, 1025);
  status = DftiSetValue(My_Desc1_Handle, DFTI_INPUT_DISTANCE, 1);
  status = DftiSetValue(My_Desc1_Handle, DFTI_OUTPUT_DISTANCE, 1);
  status = DftiSetValue(My_Desc1_Handle, DFTI_INPUT_STRIDES, stride_in);
  status = DftiSetValue(My_Desc1_Handle, DFTI_OUTPUT_STRIDES, stride_out);
  status = DftiCommitDescriptor(My_Desc1_Handle);

  status = DftiComputeForward( My_Desc1_Handle, values_in, values_out )

  print*, "Finished successfully."

end program mkl_test

Compile as follows:

$INTEL_HOME/ifort -I$MKL_HOME/include/ cpbtrs.f90 -Wl,--start-group -Wl,-Bstatic -L$MKL_HOME_LIB/lib -lmkl_core -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_lapack95_lp64 -liomp5 -Wl,--end-group

The input file data2_CFFT.txt that is read and passed to the FFT funtion is attached. Input all looks normal.

MKL 2019 u2 seems to have the same issue.

I am using linux debian 9 on a Intel(R) Xeon(R) CPU E3-1240 v3. Can someone please have a look.

AttachmentSize
Downloadapplication/zipdata2_CFFT.zip5.24 MB

Viewing all articles
Browse latest Browse all 2652

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>