/******************************************************************************* * * MIT License * * Copyright (C) 2022-2025 Advanced Micro Devices, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *******************************************************************************/ /** \file * \brief hipblaslt.h provides general matrix-matrix operations with * flexible API to let user set attributes for solution selection. */ /*! \defgroup types_module Data types * * * \defgroup library_module Library management functions * Provides the library handle * * \defgroup aux_module Auxilary functions * Initializes hipBLASLt for the current HIP device */ #pragma once #ifndef _HIPBLASLT_H_ #define _HIPBLASLT_H_ #include "hipblaslt/hipblaslt-export.h" #include "hipblaslt/hipblaslt-version.h" #ifndef LEGACY_HIPBLAS_DIRECT #include #else #include #endif #include #include #include #include #include #include #include #include #if defined(__HIP_PLATFORM_AMD__) #include "hipblaslt-types.h" #endif /* Opaque structures holding information */ // clang-format off #define HIPBLASLT_DATATYPE_INVALID static_cast(255) // TODO: Replace static_cast(0) with the appropriate value since 0 represents f16_r #define HIPBLASLT_COMPUTE_TYPE_INVALID static_cast(0) #define HIPBLASLT_OPERATION_INVALID static_cast(0) #define ROCBLASLT_COMPUTE_TYPE_INVALID static_cast(255) #define HIPBLASLT_MATMUL_DESC_A_SCALE_POINTER_VEC_EXT \ static_assert(false, "HIPBLASLT_MATMUL_DESC_A_SCALE_POINTER_VEC_EXT is deprecated and not supported. Please set HIPBLASLT_MATMUL_DESC_A_SCALE_MODE as HIPBLASLT_MATMUL_MATRIX_SCALE_OUTER_VEC_32F instead.") #define HIPBLASLT_MATMUL_DESC_B_SCALE_POINTER_VEC_EXT \ static_assert(false, "HIPBLASLT_MATMUL_DESC_B_SCALE_POINTER_VEC_EXT is deprecated and not supported. Please set HIPBLASLT_MATMUL_DESC_B_SCALE_MODE as HIPBLASLT_MATMUL_MATRIX_SCALE_OUTER_VEC_32F instead.") /*! \ingroup types_module * \brief Specify the enum type to set the postprocessing options for the epilogue. */ typedef enum { HIPBLASLT_EPILOGUE_DEFAULT = 1, /**= m (number of * rows). * * \retval HIPBLAS_STATUS_SUCCESS If the descriptor was created successfully. * \retval HIPBLAS_STATUS_ALLOC_FAILED If the memory could not be allocated. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatrixLayoutCreate( hipblasLtMatrixLayout_t* matLayout, hipDataType type, uint64_t rows, uint64_t cols, int64_t ld); /*! \ingroup library_module * \brief Destory a matrix layout descriptor * * \details * This function destroys a previously created matrix layout descriptor object. * * @param[in] * matLayout Pointer to the structure holding the matrix layout descriptor that * should be destroyed by this function. see \ref hipblasLtMatrixLayout_t . * * \retval HIPBLAS_STATUS_SUCCESS If the operation was successful. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatrixLayoutDestroy(const hipblasLtMatrixLayout_t matLayout); /*! \ingroup library_module * \brief Set attribute to a matrix descriptor * * \details * This function sets the value of the specified attribute belonging to a * previously created matrix descriptor. * * @param[in] * matLayout Pointer to the previously created structure holding the matrix * mdescriptor queried by this function. See \ref hipblasLtMatrixLayout_t. * @param[in] * attr The attribute that will be set by this function. See \ref * hipblasLtMatrixLayoutAttribute_t. * @param[in] * buf The value to which the specified attribute should be set. * @param[in] * sizeInBytes Size of buf buffer (in bytes) for verification. * * \retval HIPBLAS_STATUS_SUCCESS If the attribute was set successfully.. * \retval HIPBLAS_STATUS_INVALID_VALUE If \p buf is NULL or \p sizeInBytes * doesn't match the size of the internal storage for the selected attribute. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatrixLayoutSetAttribute(hipblasLtMatrixLayout_t matLayout, hipblasLtMatrixLayoutAttribute_t attr, const void* buf, size_t sizeInBytes); /*! \ingroup library_module * \brief Query attribute from a matrix descriptor * * \details * This function returns the value of the queried attribute belonging to a * previously created matrix descriptor. * * @param[in] * matLayout Pointer to the previously created structure holding the matrix * descriptor queried by this function. See \ref hipblasLtMatrixLayout_t. * @param[in] * attr The attribute that will be retrieved by this function. See * \ref hipblasLtMatrixLayoutAttribute_t. * @param[out] * buf Memory address containing the attribute value retrieved by this * function. * @param[in] * sizeInBytes Size of \p buf buffer (in bytes) for verification. * @param[out] * sizeWritten Valid only when the return value is HIPBLAS_STATUS_SUCCESS. If * sizeInBytes is non-zero: then sizeWritten is the number of bytes actually * written; if sizeInBytes is 0: then sizeWritten is the number of bytes needed * to write full contents. * * \retval HIPBLAS_STATUS_SUCCESS If attribute's value was successfully * written to user memory. \retval HIPBLAS_STATUS_INVALID_VALUE If \p * sizeInBytes is 0 and \p sizeWritten is NULL, or if \p sizeInBytes is non-zero * and \p buf is NULL, or \p sizeInBytes doesn't match size of internal storage * for the selected attribute. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatrixLayoutGetAttribute(hipblasLtMatrixLayout_t matLayout, hipblasLtMatrixLayoutAttribute_t attr, void* buf, size_t sizeInBytes, size_t* sizeWritten); /*! \ingroup library_module * \brief Create a matrix multiply descriptor * * \details * This function creates a matrix multiply descriptor by allocating the memory * needed to hold its opaque structure. * * @param[out] * matmulDesc Pointer to the structure holding the matrix multiply descriptor * created by this function. See \ref hipblasLtMatmulDesc_t . * @param[in] * computeType Enumerant that specifies the data precision for the matrix * multiply descriptor this function creates. See hipblasComputeType_t . * @param[in] * scaleType Enumerant that specifies the data precision for the matrix * transform descriptor this function creates. See hipDataType. * * \retval HIPBLAS_STATUS_SUCCESS If the descriptor was created successfully. * \retval HIPBLAS_STATUS_ALLOC_FAILED If the memory could not be allocated. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmulDescCreate(hipblasLtMatmulDesc_t* matmulDesc, hipblasComputeType_t computeType, hipDataType scaleType); /*! \ingroup library_module * \brief Destory a matrix multiply descriptor * * \details * This function destroys a previously created matrix multiply descriptor * object. * * @param[in] * matmulDesc Pointer to the structure holding the matrix multiply descriptor * that should be destroyed by this function. See \ref hipblasLtMatmulDesc_t . * * \retval HIPBLAS_STATUS_SUCCESS If operation was successful. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmulDescDestroy(const hipblasLtMatmulDesc_t matmulDesc); /*! \ingroup library_module * \brief Set attribute to a matrix multiply descriptor * * \details * This function sets the value of the specified attribute belonging to a * previously created matrix multiply descriptor. * * @param[in] * matmulDesc Pointer to the previously created structure holding the matrix * multiply descriptor queried by this function. See \ref hipblasLtMatmulDesc_t. * @param[in] * attr The attribute that will be set by this function. See \ref * hipblasLtMatmulDescAttributes_t. * @param[in] * buf The value to which the specified attribute should be set. * @param[in] * sizeInBytes Size of buf buffer (in bytes) for verification. * * \retval HIPBLAS_STATUS_SUCCESS If the attribute was set successfully.. * \retval HIPBLAS_STATUS_INVALID_VALUE If \p buf is NULL or \p sizeInBytes * doesn't match the size of the internal storage for the selected attribute. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmulDescSetAttribute(hipblasLtMatmulDesc_t matmulDesc, hipblasLtMatmulDescAttributes_t attr, const void* buf, size_t sizeInBytes); /*! \ingroup library_module * \brief Query attribute from a matrix multiply descriptor * * \details * This function returns the value of the queried attribute belonging to a * previously created matrix multiply descriptor. * * @param[in] * matmulDesc Pointer to the previously created structure holding the matrix * multiply descriptor queried by this function. See \ref hipblasLtMatmulDesc_t. * @param[in] * attr The attribute that will be retrieved by this function. See * \ref hipblasLtMatmulDescAttributes_t. * @param[out] * buf Memory address containing the attribute value retrieved by this * function. * @param[in] * sizeInBytes Size of \p buf buffer (in bytes) for verification. * @param[out] * sizeWritten Valid only when the return value is HIPBLAS_STATUS_SUCCESS. If * sizeInBytes is non-zero: then sizeWritten is the number of bytes actually * written; if sizeInBytes is 0: then sizeWritten is the number of bytes needed * to write full contents. * * \retval HIPBLAS_STATUS_SUCCESS If attribute's value was successfully * written to user memory. \retval HIPBLAS_STATUS_INVALID_VALUE If \p * sizeInBytes is 0 and \p sizeWritten is NULL, or if \p sizeInBytes is non-zero * and \p buf is NULL, or \p sizeInBytes doesn't match size of internal storage * for the selected attribute. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmulDescGetAttribute(hipblasLtMatmulDesc_t matmulDesc, hipblasLtMatmulDescAttributes_t attr, void* buf, size_t sizeInBytes, size_t* sizeWritten); /*! \ingroup library_module * \brief Create a preference descriptor * * \details * This function creates a matrix multiply heuristic search preferences * descriptor by allocating the memory needed to hold its opaque structure. * * @param[out] * pref Pointer to the structure holding the matrix multiply preferences * descriptor created by this function. see \ref hipblasLtMatmulPreference_t . * * \retval HIPBLAS_STATUS_SUCCESS If the descriptor was created * successfully. \retval HIPBLAS_STATUS_ALLOC_FAILED If memory could not be * allocated. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmulPreferenceCreate(hipblasLtMatmulPreference_t* pref); /*! \ingroup library_module * \brief Destory a preferences descriptor * * \details * This function destroys a previously created matrix multiply preferences * descriptor object. * * @param[in] * pref Pointer to the structure holding the matrix multiply preferences * descriptor that should be destroyed by this function. See \ref * hipblasLtMatmulPreference_t . * * \retval HIPBLAS_STATUS_SUCCESS If operation was successful. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmulPreferenceDestroy(const hipblasLtMatmulPreference_t pref); /*! \ingroup library_module * \brief Set attribute to a preference descriptor * * \details * This function sets the value of the specified attribute belonging to a * previously created matrix multiply preferences descriptor. * * @param[in] * pref Pointer to the previously created structure holding the matrix * multiply preferences descriptor queried by this function. See \ref * hipblasLtMatmulPreference_t * @param[in] * attr The attribute that will be set by this function. See \ref * hipblasLtMatmulPreferenceAttributes_t. * @param[in] * buf The value to which the specified attribute should be set. * @param[in] * sizeInBytes Size of \p buf buffer (in bytes) for verification. * * \retval HIPBLAS_STATUS_SUCCESS If the attribute was set successfully.. * \retval HIPBLAS_STATUS_INVALID_VALUE If \p buf is NULL or \p sizeInBytes * doesn't match the size of the internal storage for the selected attribute. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmulPreferenceSetAttribute(hipblasLtMatmulPreference_t pref, hipblasLtMatmulPreferenceAttributes_t attr, const void* buf, size_t sizeInBytes); /*! \ingroup library_module * \brief Query attribute from a preference descriptor * * \details * This function returns the value of the queried attribute belonging to a * previously created matrix multiply heuristic search preferences descriptor. * * @param[in] * pref Pointer to the previously created structure holding the matrix * multiply heuristic search preferences descriptor queried by this function. * See \ref hipblasLtMatmulPreference_t. * @param[in] * attr The attribute that will be retrieved by this function. See * \ref hipblasLtMatmulPreferenceAttributes_t. * @param[out] * buf Memory address containing the attribute value retrieved by this * function. * @param[in] * sizeInBytes Size of \p buf buffer (in bytes) for verification. * @param[out] * sizeWritten Valid only when the return value is HIPBLAS_STATUS_SUCCESS. If * sizeInBytes is non-zero: then sizeWritten is the number of bytes actually * written; if sizeInBytes is 0: then sizeWritten is the number of bytes needed * to write full contents. * * \retval HIPBLAS_STATUS_SUCCESS If attribute's value was successfully * written to user memory. \retval HIPBLAS_STATUS_INVALID_VALUE If \p * sizeInBytes is 0 and \p sizeWritten is NULL, or if \p sizeInBytes is non-zero * and \p buf is NULL, or \p sizeInBytes doesn't match size of internal storage * for the selected attribute. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmulPreferenceGetAttribute(hipblasLtMatmulPreference_t pref, hipblasLtMatmulPreferenceAttributes_t attr, void* buf, size_t sizeInBytes, size_t* sizeWritten); /*! \ingroup library_module * \brief Retrieve the possible algorithms * * \details * This function retrieves the possible algorithms for the matrix multiply * operation hipblasLtMatmul() function with the given input matrices A, B and * C, and the output matrix D. The output is placed in heuristicResultsArray[] * in the order of increasing estimated compute time. Note that the wall duration * increases if the requestedAlgoCount increases. * * @param[in] * handle Pointer to the allocated hipBLASLt handle for the * hipBLASLt context. See \ref hipblasLtHandle_t . * @param[in] * matmulDesc Handle to a previously created matrix multiplication * descriptor of type \ref hipblasLtMatmulDesc_t . * @param[in] * Adesc,Bdesc,Cdesc,Ddesc Handles to the previously created matrix layout * descriptors of the type \ref hipblasLtMatrixLayout_t . * @param[in] * pref Pointer to the structure holding the heuristic * search preferences descriptor. See \ref hipblasLtMatmulPreference_t . * @param[in] * requestedAlgoCount Size of the \p heuristicResultsArray (in elements). * This is the requested maximum number of algorithms to return. * @param[out] * heuristicResultsArray[] Array containing the algorithm heuristics and * associated runtime characteristics, returned by this function, in the order * of increasing estimated compute time. * @param[out] * returnAlgoCount Number of algorithms returned by this function. This * is the number of \p heuristicResultsArray elements written. * * \retval HIPBLAS_STATUS_SUCCESS If query was successful. Inspect * heuristicResultsArray[0 to (returnAlgoCount -1)].state for the status of the * results. \retval HIPBLAS_STATUS_NOT_SUPPORTED If no heuristic function * available for current configuration. \retval HIPBLAS_STATUS_INVALID_VALUE If * \p requestedAlgoCount is less or equal to zero. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmulAlgoGetHeuristic(hipblasLtHandle_t handle, hipblasLtMatmulDesc_t matmulDesc, hipblasLtMatrixLayout_t Adesc, hipblasLtMatrixLayout_t Bdesc, hipblasLtMatrixLayout_t Cdesc, hipblasLtMatrixLayout_t Ddesc, hipblasLtMatmulPreference_t pref, int requestedAlgoCount, hipblasLtMatmulHeuristicResult_t heuristicResultsArray[], int* returnAlgoCount); /*! \ingroup library_module * \brief Retrieve the possible algorithms * * \details * This function computes the matrix multiplication of matrices A and B to * produce the output matrix D, according to the following operation: \p D = \p * alpha*( \p A *\p B) + \p beta*( \p C ), where \p A, \p B, and \p C are input * matrices, and \p alpha and \p beta are input scalars. Note: This function * supports both in-place matrix multiplication (C == D and Cdesc == Ddesc) and * out-of-place matrix multiplication (C != D, both matrices must have the same * data type, number of rows, number of columns, batch size, and memory order). * In the out-of-place case, the leading dimension of C can be different from * the leading dimension of D. Specifically the leading dimension of C can be 0 * to achieve row or column broadcast. If Cdesc is omitted, this function * assumes it to be equal to Ddesc. * * @param[in] * handle Pointer to the allocated hipBLASLt handle for the * hipBLASLt context. See \ref hipblasLtHandle_t . * @param[in] * matmulDesc Handle to a previously created matrix multiplication * descriptor of type \ref hipblasLtMatmulDesc_t . * @param[in] * alpha,beta Pointers to the scalars used in the multiplication. * @param[in] * Adesc,Bdesc,Cdesc,Ddesc Handles to the previously created matrix layout * descriptors of the type \ref hipblasLtMatrixLayout_t . * @param[in] * A,B,C Pointers to the GPU memory associated with the * corresponding descriptors \p Adesc, \p Bdesc and \p Cdesc . * @param[out] * D Pointer to the GPU memory associated with the * descriptor \p Ddesc . * @param[in] * algo Handle for matrix multiplication algorithm to be * used. See \ref hipblasLtMatmulAlgo_t . When NULL, an implicit heuristics query * with default search preferences will be performed to determine actual * algorithm to use. * @param[in] * workspace Pointer to the workspace buffer allocated in the GPU * memory. Pointer must be 16B aligned (that is, lowest 4 bits of address must * be 0). * @param[in] * workspaceSizeInBytes Size of the workspace. * @param[in] * stream The HIP stream where all the GPU work will be * submitted. * * \retval HIPBLAS_STATUS_SUCCESS If the operation completed * successfully. \retval HIPBLAS_STATUS_EXECUTION_FAILED If HIP reported an * execution error from the device. \retval HIPBLAS_STATUS_ARCH_MISMATCH If * the configured operation cannot be run using the selected device. \retval * HIPBLAS_STATUS_NOT_SUPPORTED If the current implementation on the * selected device doesn't support the configured operation. \retval * HIPBLAS_STATUS_INVALID_VALUE If the parameters are unexpectedly NULL, in * conflict or in an impossible configuration. For example, when * workspaceSizeInBytes is less than workspace required by the configured algo. * \retval HIBLAS_STATUS_NOT_INITIALIZED If hipBLASLt handle has not been * initialized. */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatmul(hipblasLtHandle_t handle, hipblasLtMatmulDesc_t matmulDesc, const void* alpha, const void* A, hipblasLtMatrixLayout_t Adesc, const void* B, hipblasLtMatrixLayout_t Bdesc, const void* beta, const void* C, hipblasLtMatrixLayout_t Cdesc, void* D, hipblasLtMatrixLayout_t Ddesc, const hipblasLtMatmulAlgo_t* algo, void* workspace, size_t workspaceSizeInBytes, hipStream_t stream); /** Create new matrix transform operation descriptor. * * \retval HIPBLAS_STATUS_ALLOC_FAILED if memory could not be allocated * \retval HIPBLAS_STATUS_SUCCESS if desciptor was created successfully */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatrixTransformDescCreate(hipblasLtMatrixTransformDesc_t* transformDesc, hipDataType scaleType); /** Destroy matrix transform operation descriptor. * * \retval HIPBLAS_STATUS_SUCCESS if operation was successful */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatrixTransformDescDestroy(hipblasLtMatrixTransformDesc_t transformDesc); /** Set matrix transform operation descriptor attribute. * * \param[in] transformDesc The descriptor * \param[in] attr The attribute * \param[in] buf memory address containing the new value * \param[in] sizeInBytes size of buf buffer for verification (in bytes) * * \retval HIPBLAS_STATUS_INVALID_VALUE if buf is NULL or sizeInBytes doesn't match size of internal storage for * selected attribute * \retval HIPBLAS_STATUS_SUCCESS if attribute was set successfully */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatrixTransformDescSetAttribute( // hipblasLtMatrixTransformDesc_t transformDesc, hipblasLtMatrixTransformDescAttributes_t attr, const void* buf, size_t sizeInBytes); /*! \ingroup library_module * \brief Matrix transform operation getter * \details Get matrix transform operation descriptor attribute. * * @param[in] transformDesc The descriptor * @param[in] attr The attribute * @param[out] buf memory address containing the new value * @param[in] sizeInBytes size of buf buffer for verification (in bytes) * @param[out] sizeWritten only valid when return value is HIPBLAS_STATUS_SUCCESS. If sizeInBytes is non-zero: number * of bytes actually written, if sizeInBytes is 0: number of bytes needed to write full contents * * \retval HIPBLAS_STATUS_INVALID_VALUE if sizeInBytes is 0 and sizeWritten is NULL, or if sizeInBytes is non-zero * and buf is NULL or sizeInBytes doesn't match size of internal storage for * selected attribute * \retval HIPBLAS_STATUS_SUCCESS if attribute's value was successfully written to user memory */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatrixTransformDescGetAttribute(hipblasLtMatrixTransformDesc_t transformDesc, hipblasLtMatrixTransformDescAttributes_t attr, void* buf, size_t sizeInBytes, size_t* sizeWritten); /*! \ingroup library_module * \brief Matrix layout conversion helper * \details * Matrix layout conversion helper (C = alpha * op(A) + beta * op(B)), * can be used to change memory order of data or to scale and shift the values. * @param[in] lightHandle Pointer to the allocated hipBLASLt handle for the * hipBLASLt context. See \ref hipblasLtHandle_t . * @param[in] transformDesc Pointer to allocated matrix transform descriptor. * @param[in] alpha Pointer to scalar alpha, either pointer to host or device address. * @param[in] A Pointer to matrix A, must be pointer to device address. * @param[in] Adesc Pointer to layout for input matrix A. * @param[in] beta Pointer to scalar beta, either pointer to host or device address. * @param[in] B Pointer to layout for matrix B, must be pointer to device address * @param[in] Bdesc Pointer to layout for inputmatrix B. * @param[in] C Pointer to matrix C, must be pointer to device address * @param[out] Cdesc Pointer to layout for output matrix C. * @param[in] stream The HIP stream where all the GPU work will be submitted. * * \retval HIPBLAS_STATUS_NOT_INITIALIZED if hipBLASLt handle has not been initialized * \retval HIPBLAS_STATUS_INVALID_VALUE if parameters are in conflict or in an impossible configuration; e.g. * when A is not NULL, but Adesc is NULL * \retval HIPBLAS_STATUS_NOT_SUPPORTED if current implementation on selected device doesn't support configured * operation * \retval HIPBLAS_STATUS_ARCH_MISMATCH if configured operation cannot be run using selected device * \retval HIPBLAS_STATUS_EXECUTION_FAILED if HIP reported execution error from the device * \retval HIPBLAS_STATUS_SUCCESS if the operation completed successfully */ HIPBLASLT_EXPORT hipblasStatus_t hipblasLtMatrixTransform(hipblasLtHandle_t lightHandle, hipblasLtMatrixTransformDesc_t transformDesc, const void* alpha, /* host or device pointer */ const void* A, hipblasLtMatrixLayout_t Adesc, const void* beta, /* host or device pointer */ const void* B, hipblasLtMatrixLayout_t Bdesc, void* C, hipblasLtMatrixLayout_t Cdesc, hipStream_t stream); #ifdef __cplusplus } #endif #endif // _HIPBLASLT_H_