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.