* Copyright (c) 2026 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
#ifndef INC_EXTERNAL_ACL_ACL_RT_API_H_
#define INC_EXTERNAL_ACL_ACL_RT_API_H_
#include "acl_rt.h"
#ifdef __cplusplus
static inline aclError aclrtSynchronizeDevice(int32_t timeout)
{
return ::aclrtSynchronizeDeviceWithTimeout(timeout);
}
static inline aclError aclrtSynchronizeStream(aclrtStream stream, int32_t timeout)
{
return ::aclrtSynchronizeStreamWithTimeout(stream, timeout);
}
static inline aclError aclrtSynchronizeEvent(aclrtEvent event, int32_t timeout)
{
return ::aclrtSynchronizeEventWithTimeout(event, timeout);
}
static inline aclError aclrtStreamWaitEvent(aclrtStream stream, aclrtEvent event, int32_t timeout)
{
return ::aclrtStreamWaitEventWithTimeout(stream, event, timeout);
}
static inline aclError aclrtCreateStream(aclrtStream *stream, uint32_t priority, uint32_t flag)
{
return ::aclrtCreateStreamWithConfig(stream, priority, flag);
}
static inline aclError aclrtSetOpExecuteTimeOut(uint64_t timeout, uint64_t *actualTimeout)
{
return ::aclrtSetOpExecuteTimeOutV2(timeout, actualTimeout);
}
static inline aclError aclrtCreateEvent(aclrtEvent *event, uint32_t flag)
{
return ::aclrtCreateEventExWithFlag(event, flag);
}
template <typename T>
static inline aclError aclrtMalloc(T **devPtr, size_t size, aclrtMallocConfig *cfg = nullptr)
{
return ::aclrtMallocWithCfg(reinterpret_cast<void **>(devPtr), size, ACL_MEM_MALLOC_HUGE_FIRST, cfg);
}
template <typename T>
static inline aclError aclrtMalloc(T **devPtr, size_t size, aclrtMemMallocPolicy policy, aclrtMallocConfig *cfg = nullptr)
{
return ::aclrtMallocWithCfg(reinterpret_cast<void **>(devPtr), size, policy, cfg);
}
template <typename T>
static inline aclError aclrtMallocHost(T **hostPtr, size_t size, aclrtMallocConfig *cfg = nullptr)
{
return ::aclrtMallocHostWithCfg(reinterpret_cast<void **>(hostPtr), static_cast<uint64_t>(size), cfg);
}
template <typename T, typename U>
static inline aclError aclrtMemcpy(T *dst, size_t destMax, const U *src, size_t count, aclrtMemcpyKind kind)
{
return ::aclrtMemcpy(static_cast<void *>(dst), destMax, static_cast<const void *>(src), count, kind);
}
template <typename T, typename U>
static inline aclError aclrtMemcpyAsync(T *dst, size_t destMax, const U *src, size_t count,
aclrtMemcpyKind kind, aclrtStream stream)
{
return ::aclrtMemcpyAsync(static_cast<void *>(dst), destMax, static_cast<const void *>(src), count, kind, stream);
}
template <typename T, typename U>
static inline aclError aclrtMemcpy2d(T *dst, size_t dpitch, const U *src, size_t spitch,
size_t width, size_t height, aclrtMemcpyKind kind)
{
return ::aclrtMemcpy2d(static_cast<void *>(dst), dpitch, static_cast<const void *>(src),
spitch, width, height, kind);
}
template <typename T, typename U>
static inline aclError aclrtMemcpy2dAsync(T *dst, size_t dpitch, const U *src, size_t spitch,
size_t width, size_t height, aclrtMemcpyKind kind, aclrtStream stream)
{
return ::aclrtMemcpy2dAsync(static_cast<void *>(dst), dpitch, static_cast<const void *>(src),
spitch, width, height, kind, stream);
}
template <typename T, typename U>
static inline aclError aclrtMemcpyBatch(T **dsts, size_t *destMaxs, U **srcs, size_t *sizes,
size_t numBatches, aclrtMemcpyBatchAttr attr, size_t *failIndex = nullptr)
{
(void)failIndex;
aclrtMemcpyBatchAttr attrs[1] = {attr};
size_t attrsIndexes[1] = {0};
return ::aclrtMemcpyBatchV2(reinterpret_cast<void **>(dsts), destMaxs, reinterpret_cast<void **>(srcs),
sizes, numBatches, attrs, attrsIndexes, 1);
}
template <typename T, typename U>
static inline aclError aclrtMemcpyBatch(T **dsts, size_t *destMaxs, U **srcs, size_t *sizes,
size_t numBatches, aclrtMemcpyBatchAttr *attrs,
size_t *attrsIndexes, size_t numAttrs, size_t *failIndex = nullptr)
{
(void)failIndex;
return ::aclrtMemcpyBatchV2(reinterpret_cast<void **>(dsts), destMaxs, reinterpret_cast<void **>(srcs),
sizes, numBatches, attrs, attrsIndexes, numAttrs);
}
template <typename T, typename U>
static inline aclError aclrtMemcpyBatchAsync(T **dsts, size_t *destMaxs, U **srcs, size_t *sizes,
size_t numBatches, aclrtMemcpyBatchAttr attr, aclrtStream stream)
{
aclrtMemcpyBatchAttr attrs[1] = {attr};
size_t attrsIndexes[1] = {0};
return ::aclrtMemcpyBatchAsyncV2(reinterpret_cast<void **>(dsts), destMaxs, reinterpret_cast<void **>(srcs),
sizes, numBatches, attrs, attrsIndexes, 1, stream);
}
template <typename T, typename U>
static inline aclError aclrtMemcpyBatchAsync(T **dsts, size_t *destMaxs, U **srcs, size_t *sizes,
size_t numBatches, aclrtMemcpyBatchAttr *attrs,
size_t *attrsIndexes, size_t numAttrs, aclrtStream stream)
{
return ::aclrtMemcpyBatchAsyncV2(reinterpret_cast<void **>(dsts), destMaxs, reinterpret_cast<void **>(srcs),
sizes, numBatches, attrs, attrsIndexes, numAttrs, stream);
}
template <typename T, typename U>
static inline aclError aclrtMemcpyBatchAsync(T **dsts, size_t *destMaxs, U **srcs, size_t *sizes,
size_t numBatches, aclrtMemcpyBatchAttr attr,
size_t *failIndex, aclrtStream stream)
{
aclrtMemcpyBatchAttr attrs[1] = {attr};
size_t attrsIndexes[1] = {0};
return ::aclrtMemcpyBatchAsync(reinterpret_cast<void **>(dsts), destMaxs, reinterpret_cast<void **>(srcs),
sizes, numBatches, attrs, attrsIndexes, 1, failIndex, stream);
}
template <typename T, typename U>
static inline aclError aclrtMemcpyBatchAsync(T **dsts, size_t *destMaxs, U **srcs, size_t *sizes,
size_t numBatches, aclrtMemcpyBatchAttr *attrs,
size_t *attrsIndexes, size_t numAttrs, size_t *failIndex, aclrtStream stream)
{
return ::aclrtMemcpyBatchAsync(reinterpret_cast<void **>(dsts), destMaxs, reinterpret_cast<void **>(srcs),
sizes, numBatches, attrs, attrsIndexes, numAttrs, failIndex, stream);
}
template <typename T>
static inline aclError aclrtPointerGetAttributes(const T *ptr, aclrtPtrAttributes *attributes)
{
return ::aclrtPointerGetAttributes(static_cast<const void *>(ptr), attributes);
}
template <typename T>
static inline aclError aclrtHostRegister(T *ptr, uint64_t size, aclrtHostRegisterType type, T **devPtr)
{
return ::aclrtHostRegister(static_cast<void *>(ptr), size, type, reinterpret_cast<void **>(devPtr));
}
template <typename T>
static inline aclError aclrtHostRegister(T *ptr, uint64_t size, uint32_t flag)
{
return ::aclrtHostRegisterV2(static_cast<void *>(ptr), size, flag);
}
template <typename T>
static inline aclError aclrtHostGetDevicePointer(T *pHost, T **pDevice, uint32_t flag)
{
return ::aclrtHostGetDevicePointer(static_cast<void *>(pHost), reinterpret_cast<void **>(pDevice), flag);
}
template <typename T>
static inline aclError aclrtHostUnregister(T *ptr)
{
return ::aclrtHostUnregister(static_cast<void *>(ptr));
}
template <typename T>
static inline aclError aclrtMemAllocManaged(T **devPtr, size_t size, uint32_t flags = ACL_RT_MEM_ATTACH_GLOBAL)
{
return ::aclrtMemAllocManaged(reinterpret_cast<void **>(devPtr), static_cast<uint64_t>(size), flags);
}
template <typename T>
static inline aclError aclrtMemManagedPrefetchAsync(const T *ptr, size_t size,
aclrtMemManagedLocation location, uint32_t flags, aclrtStream stream)
{
return ::aclrtMemManagedPrefetchAsync(static_cast<const void *>(ptr), size, location, flags, stream);
}
template <typename T>
static inline aclError aclrtMemManagedPrefetchBatchAsync(const T **ptrs, size_t *sizes, size_t count,
aclrtMemManagedLocation prefetchLoc,
uint64_t flags, aclrtStream stream)
{
aclrtMemManagedLocation prefetchLocs[1] = {prefetchLoc};
size_t prefetchLocIdxs[1] = {0};
return ::aclrtMemManagedPrefetchBatchAsync(reinterpret_cast<const void **>(ptrs), sizes, count,
prefetchLocs, prefetchLocIdxs, 1, flags, stream);
}
template <typename T>
static inline aclError aclrtMemManagedPrefetchBatchAsync(const T **ptrs, size_t *sizes, size_t count,
aclrtMemManagedLocation *prefetchLocs,
size_t *prefetchLocIdxs, size_t numPrefetchLocs,
uint64_t flags, aclrtStream stream)
{
return ::aclrtMemManagedPrefetchBatchAsync(reinterpret_cast<const void **>(ptrs), sizes, count,
prefetchLocs, prefetchLocIdxs, numPrefetchLocs, flags, stream);
}
template <typename T>
static inline aclError aclrtGetSymbolAddress(const T &symbol, void **devPtr)
{
return ::aclrtGetSymbolAddress(static_cast<const void*>(&symbol), devPtr);
}
template <typename T>
static inline aclError aclrtGetSymbolSize(const T &symbol, size_t *size)
{
return ::aclrtGetSymbolSize(static_cast<const void*>(&symbol), size);
}
template <typename T>
static inline aclError aclrtMemcpyFromSymbol(void *dst, size_t dstMax, const T &symbol,
size_t count, size_t offset, aclrtMemcpyKind kind)
{
return ::aclrtMemcpyFromSymbol(dst, dstMax, static_cast<const void*>(&symbol), count, offset, kind);
}
template <typename T>
static inline aclError aclrtMemcpyFromSymbolAsync(void *dst, size_t dstMax, const T &symbol,
size_t count, size_t offset, aclrtMemcpyKind kind,
aclrtStream stream)
{
return ::aclrtMemcpyFromSymbolAsync(dst, dstMax, static_cast<const void*>(&symbol), count, offset, kind, stream);
}
template <typename T>
static inline aclError aclrtMemcpyToSymbol(const T &symbol, const void *src,
size_t count, size_t offset, aclrtMemcpyKind kind)
{
return ::aclrtMemcpyToSymbol(static_cast<const void*>(&symbol), src, count, offset, kind);
}
template <typename T>
static inline aclError aclrtMemcpyToSymbolAsync(const T &symbol, const void *src,
size_t count, size_t offset, aclrtMemcpyKind kind,
aclrtStream stream)
{
return ::aclrtMemcpyToSymbolAsync(static_cast<const void*>(&symbol), src, count, offset, kind, stream);
}
#endif
#endif