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, anif constexprvariant ofCUFFTDX_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
Transpositionoperator, selecting the shared-memory layout used by the block execution implementation, including the newtransposition::by_component_paddedlayout (available only with the default PTX/ptxascompiled implementations, not with LTO). See Transposition Operator, and Tuning Block Execution for guidance on choosing a value.Added the
ThreadLayoutoperator, selecting the thread-to-data mapping used during block execution. Thethread_layout::transposedvalue 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
ThreadLinearizationoperator, which maps the thread block to a linear thread index.ThreadLinearizationandTranspositionare also supported on the LTO execution path.ThreadLinearizationrequires LTO databases generated with cuFFT 12.5 or later;Transpositionhas no database version requirement, but the online helpers need a cuFFT 12.5 runtime when it is notany. See Thread Linearization Operator.Added the FFT::working_group functions
batchid(),fftid(),implicit_bpb()andbatch_stride(), theFFT::transpositiontrait, and theexperimental::thread_layout_of,experimental::transposition_ofandexperimental::is_thread_linearization_enabledtraits. 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, andquery_all_cufft_implementationsnow 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.
Feature |
PTX ( |
LTO (cuFFT Device API) |
|---|---|---|
|
Yes |
Yes. The online helpers require cuFFT 12.5 (device version 0.6.0) when the value is not |
|
Yes |
No |
|
Yes |
Yes, requires an LTO database generated with cuFFT 12.5 (device version 0.6.0) |
|
Yes |
Yes |
|
Yes |
No |
Bluestein fallback in runtime database queries |
Yes (check |
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_ltoirnow returns the implementation traits instead of the block dimensions and the shared memory size, and is only available whenCUFFTDX_ENABLE_RUNTIME_DATABASEis defined before including the cuFFTDx headers (in addition toCUFFTDX_ENABLE_CUFFT_DEPENDENCYandCUFFT_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_databaseandget_all_implementations) now fall back to a Bluestein implementation in every query mode, including the defaultptxmode. 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. Checkworkspace_sizeof 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_backendtakes 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_traitshas new members (transposition_type,execution_size,workspace_sizeandcode), and its constructor takes the corresponding additional arguments.
Resolved Issues#
The
suggested_elements_per_threadvalue returned byquery_databaseandget_all_implementationsechoed the requestedElementsPerThreadinstead of the suggested value for that size. It now matchesFFT::suggested_elements_per_thread. The values returned inltoir_onlinemode are the ones the cuFFT Device API reports for the generated function.ElementsPerThread<1>withreal_mode::foldedwas 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_threadandoutput_elements_per_threadresults fromquery_databaseandget_all_implementationsfunctions when queryingc2randr2cFFT 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_backendhelper and relatedbackend_impl_traitsandfrontend_impl_traitstypes have moved to thecufftdx::experimental::utilsnamespace. Check Frontend to Backend Traits Conversion for more details.
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.
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_UNSUPPORTEDmacro to ignore these assertions and use the BlockDim operator.Add the
-Xptxas -O1flag 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_101tosm_110starting from CUDA 13.0 * Note: For CUDA 12.9 and older releases, Thor stays labeled assm_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_luttarget 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_3dexamples.Extended explanation in docs of
mixed_precisionexamples.
Resolved Issues#
cuFFTDx internal versioning definitions have been fixed:
CUFFTDX_VERSION_MAJORis now defined as a multiple of 10000 inCUFFTDX_VERSION, i.e.CUFFTDX_VERSION_MAJOR = CUFFTDX_VERSION / 10000.CUFFTDX_VERSION_MINORnow can have a new maximum of two digits.Absolute ordering between version remains valid. However,
CUFFTDX_VERSIONbetween 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.
All Device Extensions libraries are bundled together in a single package named nvidia-mathdx-24.08.0.tar.gz.
cuFFTDx now has an indirect dependency on CUTLASS library. See Installation Guide for more information.
1.2.0#
cuFFTDx update extending R2C/C2R capabilities.
New Features#
Added RealFFTOptions Operator with two knobs:
complex_layoutallows for changing complex value layouts for both real-to-complex and complex-to-real transforms.real_modeintroduces 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
streamparameter tomake_workspacefunctions taking a CUDA stream.Added new input/output traits (e.g. Input Length Trait)
Among new threads the
input_typeandoutput_typetraits 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_paddedandmixed_precisionexamples.
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_workspaceoverloads, 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()) inexecute()methods by default. In previous versions they are disabled only whenNDEBUG(defined by CMake inReleasemode) orCUFFTDX_DISABLE_RUNTIME_ASSERTSare defined, or when compilation is done by NVRTC. Keeping assertions could result in performance penalty. Now, user has to defineCUFFTDX_ENABLE_RUNTIME_ASSERTSto enable them.
1.1.0#
The first release of cuFFTDx library with support for Hopper and Ada architectures.
New Features#
Initial support for Orin architecture (SM87).
Initial support for Ada architecture (SM89).
Initial support for Hopper architecture (SM90).
Added cufftdx::is_supported.
Added preliminary support for MSVC.
Improvements to the documentation:
Examples chapter,
Quick Installation Guide chapter,
information about shared memory usage in cuFFTDx, and
updated introduction chapters: First FFT Using cuFFTDx and Your Next Custom FFT Kernels.
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#
Added new shared API for block FFT execution, see block execution methods.
Added and documented FFT::stride.
Optimized default ElementsPerThread and FFTsPerBlock values for SM80 (targeting A100) and SM70 (targeting V100).
Restored full performance of powers-of-two kernels in cuFFTDx.
Resolved Issues#
ptxaswarningprogram uses 32-bit address on line XXX which is conflicting with .address_size 64shouldn’t appear anymore.
0.3.1#
The last early access (EA) release of cuFFTDx library.
Known Issues#
ptxaswarning 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.