Release Notes#

This section includes significant changes, new features, performance improvements, and various issues. Unless noted, listed issues should not impact functionality. When functionality is impacted, we offer a work-around to avoid the issue (if available).

1.8.0#

Important

Due to the number of new features and implementation changes in this release, the optimal implementations selected for a given description may differ from those chosen in previous versions. It is strongly encouraged to re-tune your kernels (e.g., re-evaluate ElementsPerThread, FFTsPerBlock, Transposition, and ThreadLayout choices) with cuFFTDx after upgrading to this version.

New Features#

  • Added CUFFTDX_SKIP_IF_NOT_APPLICABLE_SM_BLOCK() macro, an if constexpr variant of CUFFTDX_SKIP_IF_NOT_APPLICABLE_SM() that avoids instantiating the kernel body for unintended device architectures in translation units targeting multiple architectures at once. See SM Operator for details.

  • Added the Transposition operator, selecting the shared-memory layout used by the block execution implementation, including the new transposition::by_component_padded layout (available only with the default PTX/ptxas compiled implementations, not with LTO). See Transposition Operator, and Tuning Block Execution for guidance on choosing a value.

  • Added the ThreadLayout operator, selecting the thread-to-data mapping used during block execution. The thread_layout::transposed value is only available with PTX code, not with LTO. See Thread Layout Operator, and Tuning Block Execution for guidance on choosing a value.

  • Added the ThreadLinearization operator, which maps the thread block to a linear thread index. ThreadLinearization and Transposition are also supported on the LTO execution path. ThreadLinearization requires LTO databases generated with cuFFT 12.5 or later; Transposition has no database version requirement, but the online helpers need a cuFFT 12.5 runtime when it is not any. See Thread Linearization Operator.

  • Added the FFT::working_group functions batchid(), fftid(), implicit_bpb() and batch_stride(), the FFT::transposition trait, and the experimental::thread_layout_of, experimental::transposition_of and experimental::is_thread_linearization_enabled traits. See Traits.

  • Added initial support for SM107 (Rubin) in examples, tests, and LTO helpers. See SM Operator.

  • query_database, get_all_implementations, get_database_and_ltoir, and query_all_cufft_implementations now fall back to a Bluestein implementation for block-execution, non-folded sizes with no direct implementation, instead of reporting none found. See Runtime Database Query.

Table 1 cuFFTDx 1.8.0 feature availability by code path#

Feature

PTX (ptxas)

LTO (cuFFT Device API)

Transposition: none, by_component, by_complex

Yes

Yes. The online helpers require cuFFT 12.5 (device version 0.6.0) when the value is not any

Transposition: by_component_padded

Yes

No

ThreadLinearization

Yes

Yes, requires an LTO database generated with cuFFT 12.5 (device version 0.6.0)

ThreadLayout: regular

Yes

Yes

ThreadLayout: transposed

Yes

No

Bluestein fallback in runtime database queries

Yes (check workspace_size)

Yes (block execution, non-folded sizes)

Breaking Changes in Experimental APIs#

The following changes may require updates to code written for cuFFTDx 1.7:

  • cufftdx::utils::get_database_and_ltoir now returns the implementation traits instead of the block dimensions and the shared memory size, and is only available when CUFFTDX_ENABLE_RUNTIME_DATABASE is defined before including the cuFFTDx headers (in addition to CUFFTDX_ENABLE_CUFFT_DEPENDENCY and CUFFT_ENABLE_EXPERIMENTAL_API). See get_database_and_ltoir.

    // cuFFTDx 1.7
    auto [lto_db, ltoirs, block_dim, shared_memory_size] = cufftdx::utils::get_database_and_ltoir(/* ... */);
    
    // cuFFTDx 1.8
    auto [lto_db, ltoirs, impl_traits] = cufftdx::utils::get_database_and_ltoir(/* ... */);
    // impl_traits.block_dim_x/y/z and impl_traits.shared_memory_size replace block_dim and shared_memory_size.
    
  • The runtime database queries (query_database and get_all_implementations) now fall back to a Bluestein implementation in every query mode, including the default ptx mode. A returned implementation can therefore require a workspace: in 1.7 such sizes returned no implementation, so a result meant that the size could be computed without a workspace. Check workspace_size of the returned implementation; a nonzero value means a workspace is required, which NVRTC-compiled code cannot use. These APIs are experimental and may change in future releases. See Runtime Database Query.

  • cufftdx::experimental::utils::frontend_to_backend takes additional parameters, for example for thread linearization, thread layout and code type. See Frontend to Backend Traits Conversion for the full signature.

  • cufftdx::experimental::utils::frontend_impl_traits has new members (transposition_type, execution_size, workspace_size and code), and its constructor takes the corresponding additional arguments.

Resolved Issues#

  • The suggested_elements_per_thread value returned by query_database and get_all_implementations echoed the requested ElementsPerThread instead of the suggested value for that size. It now matches FFT::suggested_elements_per_thread. The values returned in ltoir_online mode are the ones the cuFFT Device API reports for the generated function.

  • ElementsPerThread<1> with real_mode::folded was accepted and silently replaced by the default elements per thread. It is now rejected: the description does not compile, and the runtime queries return no implementation.

Deprecations#

  • Support for GCC 7 as the host compiler is deprecated and will be removed in a future release. A warning is emitted when compiling with GCC 7. We recommend GCC 10 or newer.

1.7.3#

cuFFTDx patch to solve query database issues.

Resolved Issues#

  • Solved incorrect input_elements_per_thread and output_elements_per_thread results from query_database and get_all_implementations functions when querying c2r and r2c FFT types.

1.7.1#

Update for MathDx 26.06 release.

New Features#

  • New runtime API to query for supported FFT sizes without workspace supports both offline and online LTO databases. Check Runtime Database Query for more details.

  • Support of BlockDim Operator with augmented LTO databases.

  • Added CUFFTDX_SKIP_IF_NOT_APPLICABLE_SM() macro to skip kernel compilation for unintended device architectures, reducing compilation time and the final binary size. See SM Operator for details.

  • The cufftdx::utils::frontend_to_backend helper and related backend_impl_traits and frontend_impl_traits types have moved to the cufftdx::experimental::utils namespace. Check Frontend to Backend Traits Conversion for more details.

Table 2 Compatible cuFFT and CUDA Toolkit versions for using cuFFTDx with cuFFT LTO with BlockDim operator and runtime database query#

cuFFTDx Version

cuFFT Version

CUDA Toolkit Version

1.7.1

12.3.0 (from CTK 13.3), device version 0.4.0

13.0 or newer

Note

The cuFFT and CUDA Toolkit versions listed above are only required when using the new features introduced in cuFFTDx 1.7.1 (the BlockDim Operator with augmented LTO databases and the LTO modes of the Runtime Database Query API). When these features are not used, cuFFTDx 1.7.1 remains compatible with the cuFFT and CUDA Toolkit versions supported by previous cuFFTDx releases.

1.7.0#

Update for MathDx 26.03 release.

New Features#

  • Support for CUDA 12.0 is fully removed.

  • Support for Volta (sm_70, sm_72) and legacy Thor (sm_101) architectures are fully removed.

  • Minor changes to statically check if required number of threads is supported by the architecture.

  • New runtime API to query for supported FFT sizes without workspace. Check Runtime Database Query for more details.

1.6.1#

Update for MathDx 25.12.1 patch release. Minor documentation updates.

1.6.0#

Update for MathDx 25.12 release.

New Features#

  • Partial support for BlockDim operator. See corresponding documentation for all requirements for compatibility in BlockDim Operator.

  • Experimental support for extending cuFFTDx with cuFFT LTO. See corresponding documentation for more information in using cuFFTDx with cuFFT LTO.

Table 3 Compatible cuFFT and CUDA Toolkit versions for using cuFFTDx with cuFFT LTO#

cuFFTDx Version

cuFFT Version

CUDA Toolkit Version

1.6.0

12.1.0 (from CTK 13.1), device version 0.2.0

13.0 or newer

Known Issues#

  • BlockDim operator is not officially supported with CUDA Toolkit 13.1.0 (NVCC 13.1.80) and earlier. If you are using cuFFTDx with a previous version of nvcc, and you want to use the BlockDim operator, you can:

    • Define the CUFFTDX_IGNORE_BLOCK_DIM_UNSUPPORTED macro to ignore these assertions and use the BlockDim operator.

    • Add the -Xptxas -O1 flag to the compilation command and verify correctness of the results every time.

1.5.1#

Update for MathDx 25.06.1 release.

New Features#

  • Support for CUDA 13.0

  • Deprecation of CUDA 11.X

  • Support for Thor SM renaming from sm_101 to sm_110 starting from CUDA 13.0 * Note: For CUDA 12.9 and older releases, Thor stays labeled as sm_101

1.5.0#

Update for MathDx 25.06 release. It does not include features from 1.4.0 EA.

  • Added a new chapter in the documentation: Python Bindings.

  • Deprecated legacy architecture: sm72.

New Features#

  • Added support for new Blackwell architectures:

    • SM100, SM101, SM120.

    • Experimental support: SM103, SM121.

Known Issues#

  • cuFFTDx discontinues experimental support for MSVC compiler. See MSVC compiler warning for more information.

Warning

MSVC as host compiler is not supported and can lead to known compilation errors. It’s still supported to use cuFFTDx via NVRTC runtime compilation library on Windows.

1.4.0 Early Access#

The first Early Access (EA) release of cuFFTDx library with Link Time Optimization via cuFFT. It is packaged as a separate library and can be downloaded from here.

New Features#

  • Over 1000 additional sizes supported with improved performance and without workspace requirement, via code sharing across cuFFT and cuFFTDx enabled by LTO.

  • New LTO-enabled features supports both offline (NVCC) and online (NVRTC / nvJitLink) kernel generation.

1.3.1#

Minor update for MathDx 25.01.1 release.

  • Updated version incompatibilities. Now, it is recommended to disable CUTLASS dependency when using CUDA toolkits with versions earlier than 11.4. See Installation Guide for more information.

Resolved Issues#

  • Removed cufftdx_separate_twiddles_lut target from all when including cuFFTDx package.

  • Minor corrections and fixes in documentation.

1.3.0#

cuFFTDx update with performance improvements.

New Features#

  • Extended the number of sizes supported without additional workspace. Check here for the full list of supported sizes.

  • Added a new linking target for optimization of the final exeutable size. See Installation Guide for more information.

  • Examples updates

    • Introduced convolution_3d examples.

    • Extended explanation in docs of mixed_precision examples.

Resolved Issues#

  • cuFFTDx internal versioning definitions have been fixed:

    • CUFFTDX_VERSION_MAJOR is now defined as a multiple of 10000 in CUFFTDX_VERSION, i.e. CUFFTDX_VERSION_MAJOR = CUFFTDX_VERSION / 10000.

    • CUFFTDX_VERSION_MINOR now can have a new maximum of two digits.

    • Absolute ordering between version remains valid. However, CUFFTDX_VERSION between 1201 and 10300 will not exist.

    • All definitions can be checked in the file cufftdx_version.hpp.

1.2.1#

Minor update for MathDx 24.08 release.

1.2.0#

cuFFTDx update extending R2C/C2R capabilities.

New Features#

  • Added RealFFTOptions Operator with two knobs:

    • complex_layout allows for changing complex value layouts for both real-to-complex and complex-to-real transforms.

    • real_mode introduces optimized mode, providing up to 2x performance boosts for real-to-complex and complex-to-real transforms and allowing for twice as long sequences.

  • Extended thread range twofold for each precision and architecture (e.g. SM<900> can now execute up to 64-point thread FFTs instead of 32-point).

  • Added an optional stream parameter to make_workspace functions taking a CUDA stream.

  • Added new input/output traits (e.g. Input Length Trait)

    • Among new threads the input_type and output_type traits have been repurposed from previous use. Please refer to Traits for further detail.

  • Examples updates

    • Updated all input/output to follow the new simplified trait-based idiom.

    • Updated real-to-complex and complex-to-real examples to utilize the new RealFFTOptions Operator.

    • Introduced convolution_padded and mixed_precision examples.

  • Improvements to the documentation:

    • Added missing information regarding memory alignment requirements for shared memory.

    • Updated the documentation to follow the new trait-based input/output idiom.

    • Added description of features introduced in this release: RealFFTOptions Operator, new make_workspace overloads, new supported size ranges.

    • Added padded convolution performance comparison with cuFFT and non-padded cuFFTDx to the examples chapter.

Resolved Issues#

  • Added missing acquire synchronization for complex-to-real block FFTs when input data is in thread local arrays.

1.1.1#

cuFFTDx patch update to accommodate cuBLASDx EA 0.1.0 release.

New Features#

  • Added 2D and 3D FFT examples.

  • cuFFTDx now depends on commonDx headers. commonDx includes private tools and types that all Dx libraries use.

Resolved Issues#

  • Disabled runtime CUDA block dimensions assertions (using assert()) in execute() methods by default. In previous versions they are disabled only when NDEBUG (defined by CMake in Release mode) or CUFFTDX_DISABLE_RUNTIME_ASSERTS are defined, or when compilation is done by NVRTC. Keeping assertions could result in performance penalty. Now, user has to define CUFFTDX_ENABLE_RUNTIME_ASSERTS to enable them.

1.1.0#

The first release of cuFFTDx library with support for Hopper and Ada architectures.

New Features#

Known Issues#

  • Compiling using MSVC as CUDA host compiler requires enabling __cplusplus (/Zc:__cplusplus). In order to do so, pass -Xcompiler "/Zc:__cplusplus" as an option to NVCC (NVCC: Options for Passing Specific Phase Options).

  • When compiling using MSVC as CUDA host compiler please be aware of the limit on the length of mangled names and other compiler limits which in extreme cases can result in calling incorrect instances of kernel templates involving cuFFTDx.

1.0.0#

The first general availability (GA) release of cuFFTDx library.

New Features#

Resolved Issues#

  • ptxas warning program uses 32-bit address on line XXX which is conflicting with .address_size 64 shouldn’t appear anymore.

0.3.1#

The last early access (EA) release of cuFFTDx library.

Known Issues#

  • ptxas warning about pointer size conflict:

    ptxas warning : Program uses 32-bit address on line 'XXX'
    which is conflicting with .address_size 64
    

    This warning may appear when compiling, but it does not impact functionality or performance.