Closed bmwiedemann closed 2 months ago
The full reproducer from postfish
uses
w="fftwf-wisdom -v -o postfish-wisdomrc rif32 rof32 rib32 rob32 rif64 rof64 rib64 rob64 rif128 rof128 rib128 rob128 rif256 rof256 rib256 rob256 rif512 rof512 rib512 rob512 rif1024 rof1024 rib1024 rob1024 rif2048 rof2048 rib2048 rob2048 rif4096 rof4096 rib4096 rob4096 rif8192 rof8192 rib8192 rob8192 rif16384 rof16384 rib16384 rob16384"
please use that one to verify your fix.
The fftw-wisdom binary is not expected to produce deterministic results, at least not in measure/patient/exhaustive (and there's little interest in having 'estimate' plans in the wisdom files). It only generates 'plans' for the specified transformations to enable deterministic reuse from those generated 'plans' afterward. It doesn't do more than the combination of 'fftw_plan()' and 'fftw_export_wisdom()'.
Yes, it's not deterministic, because plan generation depends on runtime timing measurements. (fftw-wisdom
defaults to using FFTW_PATIENT
mode.) See the FFTW FAQ.
Thanks for that pointer to the FAQ. I can confirm that using fftwf-wisdom -e
makes output deterministic.
While working on reproducible builds for openSUSE, I found that our
postfish
package varied between builds, because itspostfish-wisdomrc
varied. This is with fftw 3.3.10To reproduce, use this minimal reproducer:
I tried
taskset 1 setarch -R fftw-wisdom ...
but it still was non-deterministic.Please ensure output only depends on inputs.