Release notes#

0.4.0#

  • New functionalities:
    • 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.