Release notes#
0.4.2#
- New functionalities:
Added support for cuFFTDx FFTs requiring workspace, using the same API as other FFTs; see cuFFTDx for supported configurations.
Added cuSolverDx modified LU, BDSVD, GESVD, HEGST and HEGV; see cuSolverDx.
Added Native and Tile device function ABI selection for cuFFTDx, cuSolverDx and nvCOMPDx.
Added copies between register and global/shared memory for cuBLASDx pipelined accumulators; see the register-copy example in cuBLASDx.
Added CUFFTDX_OPERATOR_DEVICE_FUNCTION to compile FFT execution and thread/batch helper functions from one descriptor. Execution remains the default.
Added the enums cublasdxStaticBlockDim, cublasdxInputStreaming and cublasdxWithPipeline for CUBLASDX_OPERATOR_STATIC_BLOCK_DIM, CUBLASDX_OPERATOR_ENABLE_INPUT_STREAMING and CUBLASDX_OPERATOR_WITH_PIPELINE, respectively. Each provides named disabled (0) and enabled (1) values, passed through the unchanged cublasdxSetOperatorInt64 API. Existing calls passing 1 remain valid; passing 0 now explicitly disables the operator instead of returning an error. Omitting the operator still leaves it disabled.
Added cuBLASDx TRSM support (CUBLASDX_FUNCTION_TRSM), an in-place triangular solve with no alpha/beta scalars, configured with the new operators CUBLASDX_OPERATOR_SIDE, CUBLASDX_OPERATOR_FILL_MODE and CUBLASDX_OPERATOR_DIAG (all three required for TRSM). All cuBLASDx APIs are supported. The generated LTOIR must be linked together with the universal fatbin, retrieved with cublasdxGetUniversalFATBINSize / cublasdxGetUniversalFATBIN. Refer to libcublasdx.h.
Added cublasdxFinalizeCodes, cufftdxFinalizeCodes, cusolverdxFinalizeCodes, curanddxFinalizeCodes and nvcompdxFinalizeCodes, which generate code from multiple descriptors of the same library in a single call.
Added the experimental cuFFTDx operator CUFFTDX_OPERATOR_TRANSPOSITION, which controls the transposition strategy used by an implementation. The matching knob CUFFTDX_KNOB_TRANSPOSITION enumerates the transpositions available for a descriptor. Refer to libcufftdx.h.
Added the experimental cuFFTDx operator CUFFTDX_OPERATOR_THREAD_LAYOUT. Block FFTs can select regular layout, where adjacent CUDA threads have adjacent FFT-thread indices, or transposed layout, where they have adjacent FFT-batch indices. Refer to libcufftdx.h.
Added cufftdxThreadLinearization for CUFFTDX_OPERATOR_THREAD_LINEARIZATION, with named disabled (0) and enabled (1) values passed through cufftdxSetOperatorInt64. Existing calls passing 1 remain valid; passing 0 now explicitly disables thread linearization instead of returning an error.
Added nvcompdxBlockWarpCompleteness for the second element of NVCOMPDX_OPERATOR_BLOCK_WARP and NVCOMPDX_TRAIT_BLOCK_WARP. The two-element integer array API and numeric values (0 for incomplete, 1 for complete) are unchanged.
CUBLASDX_DEVICE_FUNCTION_IS_THREAD_ACTIVE, CUBLASDX_DEVICE_FUNCTION_IS_PREDICATED, CUBLASDX_DEVICE_FUNCTION_IS_INDEX_IN_BOUNDS and CUBLASDX_DEVICE_FUNCTION_MAP_IDX2CRD_PARTITIONER now also accept an accumulator tensor (CUBLASDX_TENSOR_SUGGESTED_ACCUMULATOR_C or CUBLASDX_TENSOR_ACCUMULATOR_C), passed as the first argument of the generated function. This form is required for a pipelined BLAS (CUBLASDX_OPERATOR_WITH_PIPELINE). Refer to libcublasdx.h.
- Notes:
cuSolverDx now uses a new internal API, significantly reducing JIT compilation time. Trait queries no longer invoke NVRTC at all.
cuFFTDx knob queries combining CUFFTDX_KNOB_ELEMENTS_PER_THREAD and CUFFTDX_KNOB_FFTS_PER_BLOCK may return more entries than before, because implementations differing only by transposition are no longer collapsed; use CUFFTDX_KNOB_TRANSPOSITION to tell them apart. Queries on CUFFTDX_KNOB_ELEMENTS_PER_THREAD alone are unchanged.
- Compatibility changes:
nvCOMPDx ANS uses the nvCOMP 6.0 / nvCOMPDx 0.2.0 compressed chunk format, which is incompatible with earlier releases. Existing ANS data requires its original decoder; see nvCOMPDx.
0.4.1#
- Notes:
Patch release to support MathDx 26.06.1.
0.4.0#
- New functionalities:
Added support for nvCOMPDx.
Added CUBLASDX_DEVICE_FUNCTION_FINISH_ACCUMULATION, a device function that finalizes a reusable accumulator after pipelined execution. It must be called once after the last CUBLASDX_DEVICE_FUNCTION_EXECUTE and before the accumulator is read by a non-epilogue path. Do not combine it with CUBLASDX_DEVICE_FUNCTION_EPILOGUE, which finalizes internally.
Added the LIBMATHDX_TMPDIR environment variable, which overrides the directory used for NVRTC bundled-header temporary files. When unset, the OS temporary directory is used as before.
- Breaking changes:
Removed the cuSolverDx traits CUSOLVERDX_TRAIT_SHARED_MEMORY_SIZE, CUSOLVERDX_TRAIT_ARRANGEMENT, CUSOLVERDX_TRAIT_BATCHES_PER_BLOCK, CUSOLVERDX_TRAIT_TYPE, CUSOLVERDX_TRAIT_LEADING_DIMENSION and CUSOLVERDX_TRAIT_VALUE_TYPE. With the exception of CUSOLVERDX_TRAIT_SHARED_MEMORY_SIZE, these values are descriptor inputs supplied through the corresponding operators (CUSOLVERDX_OPERATOR_ARRANGEMENT, CUSOLVERDX_OPERATOR_BATCHES_PER_BLOCK, CUSOLVERDX_OPERATOR_TYPE, CUSOLVERDX_OPERATOR_LEADING_DIMENSION and the data-type operators) and are therefore available to the caller without a trait query. The remaining trait enumerators and their values are unchanged. The function cusolverdxGetTraitCommondxDataTypes has also been removed, as CUSOLVERDX_TRAIT_VALUE_TYPE was its only supported trait.
For pipelined cuBLASDx (a BLAS created with a pipeline), the accumulator creation device function (CUBLASDX_DEVICE_FUNCTION_CREATE on a CUBLASDX_TENSOR_SUGGESTED_ACCUMULATOR_C tensor) must now be created with cublasdxCreateDeviceFunctionWithPipelines, passing the tile pipeline. The generated function’s signature now takes the tile pipeline as an additional first argument (create_acc(tile_pipeline, acc) instead of create_acc(acc)), as the accumulator instance is now sourced from the tile pipeline.
0.3.2#
- New functionalities:
Added more cuSolverDx traits. Refer to libcusolverdx.h. New supported traits: CUSOLVERDX_TRAIT_ARRANGEMENT, CUSOLVERDX_TRAIT_BATCHES_PER_BLOCK, CUSOLVERDX_TRAIT_TYPE, CUSOLVERDX_TRAIT_LEADING_DIMENSION and CUSOLVERDX_TRAIT_VALUE_TYPE.
Added support for passing cuRANDDx distribution parameters at runtime. Refer to libcuranddx.h.
- Notes:
mapidx2crd may be less performant for shared-memory swizzled tensors. This is a known limitation in 0.3.2 and is planned to be improved in a future release.
- Breaking changes:
Removed cuSolverDx CUSOLVERDX_TRAIT_SUGGESTED_LEADING_DIMENSION trait. It was removed from cuSolverDx entirely.
Removed the operator CURANDDX_OPERATOR_DISTRIBUTION_PARAMETERS, removed the function curanddxSetOperatorDoubles and the signature of the compiled generate function now expects distribution parameters in the last argument (unless the CURANDDX_DISTRIBUTION_UNIFORM_BITS is used).
0.3.1#
- New functionalities:
New Opaque tensor copies without BLAS descriptor using LIBMATHDX_NONE.
- Breaking changes:
The COMMONDX_OPTION_EXTRA_NVTRC_ARGS enum had a spelling mistake and was renamed COMMONDX_OPTION_EXTRA_NVRTC_ARGS.
The type of alpha and beta in axpby(alpha, c, beta, d) was changed from having the type of C (in the BLAS descriptor) for both to having the type of c and d, respectively.
The type of alpha and beta in BLAS execute(alpha, A, B, beta, C) was changed from having the type of C as specified in the BLAS descriptor to the type of its C argument.
0.3.0#
- New functionalities:
New cuRANDDx apis. See libcuranddx.h.
New cuBLASDx “pipelined” APIs. See libcublasdx.h. This includes new opaque tensor types (CUBLASDX_TENSOR_SUGGESTED_ACCUMULATOR_C), new opaque stateful pipelines and corresponding device functions (CUBLASDX_DEVICE_FUNCTION_EXECUTE, CUBLASDX_DEVICE_FUNCTION_EPILOGUE). Pipeline APIs require CUDA toolkit 13.0 or above. cublasdxCreateDeviceFunctionWithPipelines must be used to create device functions operating on opaque pipelines.
New cuBLASDx opaque tensors representing arbitrary strided tensors. See cublasdxCreateTensorStrided in libcublasdx.h.
Added cuSolverDx traits. See libcusolverdx.h. This includes CUSOLVERDX_TRAIT_SUGGESTED_BLOCK_DIM, CUSOLVERDX_TRAIT_SUGGESTED_BATCHES_PER_BLOCK, etc.
Added support for family (f) and accelerated (a) virtual architectures.
- Breaking changes:
cuBLASDx opaque tensors lifetime is now decoupled from their descriptors. cublasdxBindTensor was removed and replaced by cublasdxCreateTensor and cublasdxDestroyTensor.
cuBLASDx device functions lifetime is now decoupled from their descriptors. cublasdxBindDeviceFunction was removed and replaced by cublasdxCreateDeviceFunction and cublasdxDestroyDeviceFunction.
The meaning of M, N, K in cuSolverDx changed for TRSM. See https://docs.nvidia.com/cuda/cusolverdx/release_notes.html
0.2.3#
- New functionalities:
New mathdxGetVersionEx, cusolverdxGetVersion, cufftdxGetVersion and cublasdxGetVersion APIs.
- Breaking changes:
CUBLASDX_DEVICE_FUNCTION_TRAIT_NAME was removed. Use CUBLASDX_DEVICE_FUNCTION_TRAIT_SYMBOL to get a device function symbol (aka extern “C” name).
0.2.2#
- Bug fixes:
Fixed some cuFFTDx traits: SM87 and all thread APIs were returning wrong EPT and FPB’s in the cufftdxGetKnob* APIs.
- New functionalities:
New cufftdxIsSupported APIs that returns whether a descriptor has an underlying implementation.
Significantly improved performance when querying the CUFFTDX_TRAIT_ELEMENTS_PER_THREAD, CUFFTDX_TRAIT_SHARED_MEMORY_SIZE, CUFFTDX_TRAIT_FFTS_PER_BLOCK, CUFFTDX_TRAIT_SUGGESTED_FFTS_PER_BLOCK, CUFFTDX_TRAIT_BLOCK_DIM traits.
0.2.1#
- Bug fixes:
Alignment of shared memory tensors now respect the CUBLASDX_OPERATOR_ALIGNMENT operator
- New functionalities:
axpby functionalities for register memory tensors
Tensor option to set specific alignment for global memory tensors
TRSM and non-pivoted LU in cuSolverDx
Complex support for Cholesky and TRSM
COMMONDX_OPTION_EXTRA_NVRTC_ARGS option to add extra arguments to NVRTC at compile time.
LIBMATHDX_NVRTC_ARGS_OVERWRITE and LIBMATHDX_NVRTC_ARGS_EXTRA for NVRTC arguments override.
- Breaking changes:
COMMONDX_OPTION_CODE_TYPE was renamed COMMONDX_OPTION_CODE_CONTAINER
commondxCodeType_t was renamed commondxCodeContainer_t
commondxCodeTypeToStr was renamed commondxCodeContainerToStr
CUBLASDX_TENSOR_TRAIT_NAME has been removed. CUBLASDX_TENSOR_TRAIT_UID is deprecated. Please use CUBLASDX_TENSOR_TRAIT_OPAQUE_NAME instead.
0.2.0#
- Breaking changes:
cuSolverDx Cholesky device APIs now return an integer (through a pointer passed as the last argument) indicating whether the factorization was successful or not.
cuSolverDx Cholesky factorization device APIs no longer take a leading dimension by default.
cuBLASDx & cuSolverDx pointer APIs take all their arguments by pointers, including alpha and beta (for matmuls) and leading dimensions.
CUFFTDX_API_BLOCK_LMEM and CUFFTDX_API_BLOCK_SMEM were renamed CUFFTDX_API_LMEM and CUFFTDX_API_SMEM, respectively.
CUBLASDX_API_BLOCK_SMEM and CUBLASDX_API_BLOCK_SMEM_DYNAMIC_LD were renamed CUBLASDX_API_SMEM and CUBLASDX_API_SMEM_DYNAMIC_LD, respectively.
CUSOLVERDX_API_BLOCK_SMEM and CUSOLVERDX_API_BLOCK_SMEM_DYNAMIC_LD were renamed CUSOLVERDX_API_SMEM and CUSOLVERDX_API_SMEM_DYNAMIC_LD, respectively.
- New functionalities
cuBLASDx now provides tensor APIs with output in shared or register memory
cuSolverDx has a new CUSOLVERDX_API_SMEM_DYNAMIC_LD enumeration for optional leading dimension arguments.
Deprecated functionalities: cublasdxGetLTOIR*, cufftdxGetLTOIR* and cusolverdxGetLTOIR* APIs are all deprecated. It is now recommended to use commondxGetCodeLTOIR* APIs instead.