linbox-team / linbox

LinBox - C++ library for exact, high-performance linear algebra
https://linbox-team.github.io/linbox
GNU Lesser General Public License v2.1
81 stars 28 forks source link

Test FFT with ModularExtended<double> failing on i386 #293

Closed d-torrance closed 2 years ago

d-torrance commented 2 years ago

After applying the patch from #292, I still get the following failure in an i386 Debian experimental chroot:

$  tests/test-fft -
Writing report data to cout (intermingled with brief report)

# To rerun this test: test-fft-new -s 1639518228
# seed = 1639518228
Testing polynomial fft transforms...  0%  

... [snip] ...

  ********************************************************************************
  Test FFT with ModularExtended<double>, p=242239433635841 (50 bits, 2^11 divides p-1)
  ** with n=2^1
                  DIF<NoSimd<double>> ........................................ success
         DIF_reversed<NoSimd<double>> ........................................ success
                  DIT<NoSimd<double>> ........................................ success
         DIT_reversed<NoSimd<double>> ........................................ success
           FFT_direct<NoSimd<double>> ........................................ success
          FFT_inverse<NoSimd<double>> ........................................ success
  ** with n=2^2
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
  ** with n=2^3
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
  ** with n=2^4
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
  ** with n=2^5
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
  ** with n=2^6
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
  ** with n=2^7
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
  ** with n=2^8
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
  ** with n=2^9
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
  ** with n=2^10
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
  ** with n=2^11
                  DIF<NoSimd<double>> ........................................ failure
         DIF_reversed<NoSimd<double>> ........................................ failure
                  DIT<NoSimd<double>> ........................................ failure
         DIT_reversed<NoSimd<double>> ........................................ failure
           FFT_direct<NoSimd<double>> ........................................ failure
          FFT_inverse<NoSimd<double>> ........................................ failure
cyrilbouvier commented 2 years ago

I was able to reproduce the issue, I will investigate

cyrilbouvier commented 2 years ago

The bug comes from the usage of dom_power (implemented in Givaro) in fft_utils.h where one of its argument is casted from size_t to long. I will open a PR on Givaro to try to fix the issue.

ClementPernet commented 2 years ago

Let me just reopen this issue (automatically closed upon merging linbox-team/givaro#197) so @d-torrance can confirm that the problem is fixed on his side.

d-torrance commented 2 years ago

Works for me now, thanks! Closing.