Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix non-determinism in global placement caused by different FFT output values #4518

Merged
merged 2 commits into from
Jan 10, 2024

Commits on Jan 10, 2024

  1. Adding a simple test for the FFT class.

    The `fft_test` checks that the FFT output is deterministic despite using
    floating point values.
    
    Signed-off-by: Tim 'mithro' Ansell <tansell@google.com>
    mithro committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    537d81c View commit details
    Browse the repository at this point in the history
  2. Add -ffp-contract=off compile flag.

    GCC per default enables one optimization for x86_64 that can change the
    result of floating-point operations: -ffp-contract=fast.
    
    This allows the compiler to do floating-point expression contraction
    such as combining multiplication and addition instructions with an FMA
    instruction. However, the FMA instruction omits the rounding done in the
    multiplication instruction, making the calculations produce different
    results for some input values.
    
    Disabling floating-point contraction with -ffp-contract=off makes GCC
    generate code that produces a consistent result for x86_64.
    
    See https://kristerw.github.io/2021/11/09/fp-contract/
    
    The `fft_test` checks that this is working correctly.
    
    Signed-off-by: Tim 'mithro' Ansell <tansell@google.com>
    mithro committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    c5984d7 View commit details
    Browse the repository at this point in the history