* This file is part of the MindStudio project.
* Copyright (c) 2025 Huawei Technologies Co.,Ltd.
*
* MindStudio is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* 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 FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* ------------------------------------------------------------------------- */
#pragma once
#include <functional>
#include "acl.h"
#include "core/HijackedFuncTemplate.h"
#include "runtime/inject_helpers/ArgsContext.h"
#include "runtime/inject_helpers/FuncContext.h"
#include "runtime/inject_helpers/LaunchContext.h"
#include "runtime/inject_helpers/ProfDataCollect.h"
#include "acl_rt_impl/AclRuntimeConfig.h"
#include "runtime/inject_helpers/ProfConfig.h"
#include "acl_rt_impl/AclLaunchKernelMixin.h"
#include "acl_rt_impl/AclLaunchKernelMixin.h"
class AclErrorTag;
template <> struct EmptyFuncError<TaggedType<aclError, AclErrorTag>> {
static constexpr aclError VALUE = ACL_ERROR_INTERNAL_ERROR;
};
template <typename ReturnType, typename... Args>
auto AscendclImpHijackedType(
ReturnType (*func)(Args...)) -> HijackedFunc<TaggedType<ReturnType, AclErrorTag>, Args...> {
return HijackedFuncHelperTagged<AclErrorTag>(func);
}
class HijackedFuncOfAclrtSetDeviceImpl : public decltype(AscendclImpHijackedType(&aclrtSetDeviceImpl)) {
public:
explicit HijackedFuncOfAclrtSetDeviceImpl();
void Pre(int32_t devId) override;
aclError Call(int32_t devId) override;
aclError Post(aclError ret) override;
private:
int32_t devId_{0};
};
class HijackedFuncOfAclrtResetDeviceImpl : public decltype(AscendclImpHijackedType(&aclrtResetDeviceImpl)) {
public:
explicit HijackedFuncOfAclrtResetDeviceImpl();
void Pre(int32_t devId) override;
aclError Call(int32_t devId) override;
aclError Post(aclError ret) override;
private:
int32_t devId_{0};
};
class HijackedFuncOfAclrtMallocImpl : public decltype(AscendclImpHijackedType(&aclrtMallocImpl)) {
public:
explicit HijackedFuncOfAclrtMallocImpl();
~HijackedFuncOfAclrtMallocImpl() override = default;
void Pre(void **devPtr, size_t size, aclrtMemMallocPolicy policy) override;
aclError Call(void **devPtr, size_t size, aclrtMemMallocPolicy policy) override;
aclError Post(aclError ret) override;
private:
void **devPtr_{nullptr};
size_t size_{0};
aclrtMemMallocPolicy policy_{aclrtMemMallocPolicy::ACL_MEM_MALLOC_HUGE_FIRST};
size_t actualSize_{0};
};
class HijackedFuncOfAclrtMallocWithCfgImpl : public decltype(AscendclImpHijackedType(&aclrtMallocWithCfgImpl)) {
public:
explicit HijackedFuncOfAclrtMallocWithCfgImpl();
~HijackedFuncOfAclrtMallocWithCfgImpl() override = default;
void Pre(void **devPtr, size_t size, aclrtMemMallocPolicy policy, aclrtMallocConfig *cfg) override;
aclError Call(void **devPtr, size_t size, aclrtMemMallocPolicy policy, aclrtMallocConfig *cfg) override;
aclError Post(aclError ret) override;
private:
void **devPtr_{nullptr};
size_t size_{0};
aclrtMemMallocPolicy policy_{aclrtMemMallocPolicy::ACL_MEM_MALLOC_HUGE_FIRST};
size_t actualSize_{0};
};
class HijackedFuncOfAclrtMallocCachedImpl : public decltype(AscendclImpHijackedType(&aclrtMallocCachedImpl)) {
public:
explicit HijackedFuncOfAclrtMallocCachedImpl();
~HijackedFuncOfAclrtMallocCachedImpl() override = default;
void Pre(void **devPtr, size_t size, aclrtMemMallocPolicy policy) override;
aclError Call(void **devPtr, size_t size, aclrtMemMallocPolicy policy) override;
aclError Post(aclError ret) override;
private:
void **devPtr_{nullptr};
size_t size_{0};
aclrtMemMallocPolicy policy_{aclrtMemMallocPolicy::ACL_MEM_MALLOC_HUGE_FIRST};
size_t actualSize_{0};
};
class HijackedFuncOfAclrtMallocHostImpl : public decltype(AscendclImpHijackedType(&aclrtMallocHostImpl)) {
public:
explicit HijackedFuncOfAclrtMallocHostImpl();
~HijackedFuncOfAclrtMallocHostImpl() override = default;
void Pre(void **hostPtr, size_t size) override;
aclError Post(aclError ret) override;
private:
void **hostPtr_{nullptr};
size_t size_{0};
};
class HijackedFuncOfAclrtMallocHostWithCfgImpl : public decltype(AscendclImpHijackedType(&aclrtMallocHostWithCfgImpl)) {
public:
explicit HijackedFuncOfAclrtMallocHostWithCfgImpl();
~HijackedFuncOfAclrtMallocHostWithCfgImpl() override = default;
void Pre(void **hostPtr, size_t size, aclrtMallocConfig *cfg) override;
aclError Post(aclError ret) override;
private:
void **hostPtr_{nullptr};
size_t size_{0};
};
class HijackedFuncOfAclrtFreeImpl : public decltype(AscendclImpHijackedType(&aclrtFreeImpl)) {
public:
explicit HijackedFuncOfAclrtFreeImpl();
~HijackedFuncOfAclrtFreeImpl() override = default;
void Pre(void *devPtr) override;
aclError Call(void *devPtr) override;
private:
void *devPtr_{nullptr};
void *actualPtr_{nullptr};
};
class HijackedFuncOfAclrtFreeHostImpl : public decltype(AscendclImpHijackedType(&aclrtFreeHostImpl)) {
public:
explicit HijackedFuncOfAclrtFreeHostImpl();
~HijackedFuncOfAclrtFreeHostImpl() override = default;
void Pre(void *hostPtr) override;
};
class HijackedFuncOfAclrtMemsetImpl : public decltype(AscendclImpHijackedType(&aclrtMemsetImpl)) {
public:
explicit HijackedFuncOfAclrtMemsetImpl();
~HijackedFuncOfAclrtMemsetImpl() override = default;
void Pre(void *devPtr, size_t maxCount, int32_t value, size_t count) override;
};
class HijackedFuncOfAclrtMemsetAsyncImpl : public decltype(AscendclImpHijackedType(&aclrtMemsetAsyncImpl)) {
public:
explicit HijackedFuncOfAclrtMemsetAsyncImpl();
~HijackedFuncOfAclrtMemsetAsyncImpl() override = default;
void Pre(void *devPtr, size_t maxCount, int32_t value, size_t count, aclrtStream stream) override;
};
class HijackedFuncOfAclrtMemcpyImpl : public decltype(AscendclImpHijackedType(&aclrtMemcpyImpl)) {
public:
explicit HijackedFuncOfAclrtMemcpyImpl();
~HijackedFuncOfAclrtMemcpyImpl() override = default;
void Pre(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind) override;
};
class HijackedFuncOfAclrtMemcpyAsyncImpl : public decltype(AscendclImpHijackedType(&aclrtMemcpyAsyncImpl)) {
public:
explicit HijackedFuncOfAclrtMemcpyAsyncImpl();
~HijackedFuncOfAclrtMemcpyAsyncImpl() override = default;
void Pre(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)
override;
};
class HijackedFuncOfAclrtMemcpy2dImpl : public decltype(AscendclImpHijackedType(&aclrtMemcpy2dImpl)) {
public:
explicit HijackedFuncOfAclrtMemcpy2dImpl();
~HijackedFuncOfAclrtMemcpy2dImpl() override = default;
void Pre(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height,
aclrtMemcpyKind kind) override;
};
class HijackedFuncOfAclrtMemcpy2dAsyncImpl : public decltype(AscendclImpHijackedType(&aclrtMemcpy2dAsyncImpl)) {
public:
explicit HijackedFuncOfAclrtMemcpy2dAsyncImpl();
~HijackedFuncOfAclrtMemcpy2dAsyncImpl() override = default;
void Pre(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height,
aclrtMemcpyKind kind, aclrtStream stream) override;
};
class HijackedFuncOfAclrtMapMemImpl : public decltype(AscendclImpHijackedType(&aclrtMapMemImpl)) {
public:
explicit HijackedFuncOfAclrtMapMemImpl();
~HijackedFuncOfAclrtMapMemImpl() override = default;
void Pre(void *virPtr, size_t size, size_t offset, aclrtDrvMemHandle handle, uint64_t flags) override;
aclError Post(aclError ret) override;
private:
void *virPtr_{nullptr};
uint64_t size_{0};
};
class HijackedFuncOfAclrtIpcMemGetExportKeyImpl
: public decltype(AscendclImpHijackedType(&aclrtIpcMemGetExportKeyImpl)) {
public:
explicit HijackedFuncOfAclrtIpcMemGetExportKeyImpl();
void Pre(void *devPtr, size_t size, char *key, size_t len, uint64_t flag) override;
aclError Call(void *devPtr, size_t size, char *key, size_t len, uint64_t flag) override;
aclError Post(aclError ret) override;
private:
void *devPtr_{};
size_t size_{};
char *key_{};
size_t len_{};
};
class HijackedFuncOfAclrtIpcMemImportByKeyImpl : public decltype(AscendclImpHijackedType(&aclrtIpcMemImportByKeyImpl)) {
public:
explicit HijackedFuncOfAclrtIpcMemImportByKeyImpl();
void Pre(void **devPtr, const char *key, uint64_t flag) override;
aclError Call(void **devPtr, const char *key, uint64_t flag) override;
aclError Post(aclError ret) override;
private:
void **devPtr_{};
const char *key_{};
};
class HijackedFuncOfAclrtIpcMemCloseImpl : public decltype(AscendclImpHijackedType(&aclrtIpcMemCloseImpl)) {
public:
explicit HijackedFuncOfAclrtIpcMemCloseImpl();
void Pre(const char *key) override;
aclError Post(aclError ret) override;
private:
const char *key_{};
};
class HijackedFuncOfAclrtUnmapMemImpl : public decltype(AscendclImpHijackedType(&aclrtUnmapMemImpl)) {
public:
explicit HijackedFuncOfAclrtUnmapMemImpl();
~HijackedFuncOfAclrtUnmapMemImpl() override = default;
void Pre(void *virPtr) override;
};
class HijackedFuncOfAclrtBinaryLoadFromFileImpl
: public decltype(AscendclImpHijackedType(&aclrtBinaryLoadFromFileImpl)) {
public:
explicit HijackedFuncOfAclrtBinaryLoadFromFileImpl();
void Pre(const char *binPath, aclrtBinaryLoadOptions *options, aclrtBinHandle *binHandle) override;
aclError Post(aclError ret) override;
private:
const char *binPath_{nullptr};
aclrtBinHandle *binHandle_{nullptr};
aclrtBinaryLoadOptions *options_{nullptr};
};
class HijackedFuncOfAclrtBinaryLoadImpl : public decltype(AscendclImpHijackedType(&aclrtBinaryLoadImpl)) {
public:
explicit HijackedFuncOfAclrtBinaryLoadImpl();
void Pre(const aclrtBinary binary, aclrtBinHandle *binHandle) override;
aclError Post(aclError ret) override;
private:
aclrtBinary bin_{nullptr};
aclrtBinHandle *binHandle_{nullptr};
};
class HijackedFuncOfAclrtBinaryLoadFromDataImpl
: public decltype(AscendclImpHijackedType(&aclrtBinaryLoadFromDataImpl)) {
public:
explicit HijackedFuncOfAclrtBinaryLoadFromDataImpl();
void Pre(const void *data, size_t length, const aclrtBinaryLoadOptions *options, aclrtBinHandle *binHandle)
override;
aclError Post(aclError ret) override;
private:
const void *bin_{nullptr};
aclrtBinHandle *binHandle_{nullptr};
aclrtBinaryLoadOptions *options_{nullptr};
size_t length_{0};
};
class HijackedFuncOfAclrtCreateBinaryImpl : public decltype(HijackedFuncHelper(&aclrtCreateBinaryImpl)) {
public:
explicit HijackedFuncOfAclrtCreateBinaryImpl();
void Pre(const void *data, size_t dataLen) override;
aclrtBinary Post(aclrtBinary bin) override;
private:
const char *data_{nullptr};
size_t dataLen_{0};
};
class HijackedFuncOfAclrtBinaryGetFunctionImpl : public decltype(AscendclImpHijackedType(&aclrtBinaryGetFunctionImpl)) {
public:
explicit HijackedFuncOfAclrtBinaryGetFunctionImpl();
void Pre(const aclrtBinHandle binHandle, const char *kernelName, aclrtFuncHandle *funcHandle) override;
aclError Post(aclError ret) override;
private:
const char *kernelName_{nullptr};
aclrtFuncHandle *funcHandle_{nullptr};
aclrtBinHandle binHandle_{nullptr};
};
class HijackedFuncOfAclrtBinaryGetFunctionByEntryImpl
: public decltype(AscendclImpHijackedType(&aclrtBinaryGetFunctionByEntryImpl)) {
public:
explicit HijackedFuncOfAclrtBinaryGetFunctionByEntryImpl();
void Pre(aclrtBinHandle binHandle, uint64_t funcEntry, aclrtFuncHandle * funcHandle) override;
aclError Post(aclError ret) override;
private:
uint64_t funcEntry_{0};
aclrtFuncHandle *funcHandle_{nullptr};
aclrtBinHandle binHandle_{nullptr};
};
class HijackedFuncOfAclrtRegisterCpuFuncImpl : public decltype(AscendclImpHijackedType(&aclrtRegisterCpuFuncImpl)) {
public:
explicit HijackedFuncOfAclrtRegisterCpuFuncImpl();
void Pre(const aclrtBinHandle binHandle, const char *funcName, const char *kernelName, aclrtFuncHandle *funcHandle)
override;
aclError Post(aclError ret) override;
private:
const char *funcName_{nullptr};
const char *kernelName_{nullptr};
aclrtFuncHandle *funcHandle_{nullptr};
aclrtBinHandle binHandle_{nullptr};
};
class HijackedFuncOfAclrtKernelArgsInitImpl : public decltype(AscendclImpHijackedType(&aclrtKernelArgsInitImpl)) {
public:
explicit HijackedFuncOfAclrtKernelArgsInitImpl();
void Pre(aclrtFuncHandle funcHandle, aclrtArgsHandle * argsHandle) override;
aclError Post(aclError ret) override;
private:
aclrtFuncHandle funcHandle_{nullptr};
aclrtArgsHandle *argsHandle_{nullptr};
};
class HijackedFuncOfAclrtKernelArgsAppendImpl : public decltype(AscendclImpHijackedType(&aclrtKernelArgsAppendImpl)) {
public:
explicit HijackedFuncOfAclrtKernelArgsAppendImpl();
void Pre(aclrtArgsHandle argsHandle, void *param, size_t paramSize, aclrtParamHandle *paramHandle) override;
aclError Post(aclError ret) override;
private:
aclrtArgsHandle argsHandle_{nullptr};
void *param_{nullptr};
size_t paramSize_{0};
aclrtParamHandle *paramHandle_{nullptr};
};
class HijackedFuncOfAclrtKernelArgsAppendPlaceHolderImpl
: public decltype(AscendclImpHijackedType(&aclrtKernelArgsAppendPlaceHolderImpl)) {
public:
explicit HijackedFuncOfAclrtKernelArgsAppendPlaceHolderImpl();
void Pre(aclrtArgsHandle argsHandle, aclrtParamHandle * paramHandle) override;
aclError Post(aclError ret) override;
private:
aclrtArgsHandle argsHandle_{nullptr};
aclrtParamHandle *paramHandle_{nullptr};
};
class HijackedFuncOfAclrtKernelArgsGetPlaceHolderBufferImpl
: public decltype(AscendclImpHijackedType(&aclrtKernelArgsGetPlaceHolderBufferImpl)) {
public:
explicit HijackedFuncOfAclrtKernelArgsGetPlaceHolderBufferImpl();
void Pre(aclrtArgsHandle argsHandle, aclrtParamHandle paramHandle, size_t dataSize, void **bufferAddr) override;
aclError Post(aclError ret) override;
private:
aclrtArgsHandle argsHandle_{nullptr};
aclrtParamHandle paramHandle_{nullptr};
void **bufferAddr_{nullptr};
size_t dataSize_{0};
};
class HijackedFuncOfAclrtKernelArgsParaUpdateImpl
: public decltype(AscendclImpHijackedType(&aclrtKernelArgsParaUpdateImpl)) {
public:
explicit HijackedFuncOfAclrtKernelArgsParaUpdateImpl();
void Pre(aclrtArgsHandle argsHandle, aclrtParamHandle paramHandle, void *param, size_t paramSize) override;
aclError Post(aclError ret) override;
private:
aclrtArgsHandle argsHandle_{nullptr};
aclrtParamHandle paramHandle_{nullptr};
void *param_{nullptr};
size_t paramSize_{0};
};
class HijackedFuncOfAclrtKernelArgsFinalizeImpl
: public decltype(AscendclImpHijackedType(&aclrtKernelArgsFinalizeImpl)) {
public:
explicit HijackedFuncOfAclrtKernelArgsFinalizeImpl();
void Pre(aclrtArgsHandle argsHandle) override;
aclError Post(aclError ret) override;
private:
aclrtArgsHandle argsHandle_{nullptr};
};
class HijackedFuncOfAclrtGetDeviceImpl : public decltype(AscendclImpHijackedType(&aclrtGetDeviceImpl)) {
public:
explicit HijackedFuncOfAclrtGetDeviceImpl();
aclError Call(int32_t * devId) override;
};
class HijackedFuncOfAclrtCreateContextImpl : public decltype(AscendclImpHijackedType(&aclrtCreateContextImpl)) {
public:
explicit HijackedFuncOfAclrtCreateContextImpl();
aclError Call(aclrtContext * context, int32_t deviceId) override;
};
class HijackedFuncOfAclrtQueryDeviceStatusImpl : public decltype(AscendclImpHijackedType(&aclrtQueryDeviceStatusImpl)) {
public:
explicit HijackedFuncOfAclrtQueryDeviceStatusImpl();
aclError Call(int32_t deviceId, aclrtDeviceStatus * deviceStatus) override;
};
class HijackedFuncOfAclrtGetDeviceCountImpl : public decltype(AscendclImpHijackedType(&aclrtGetDeviceCountImpl)) {
public:
explicit HijackedFuncOfAclrtGetDeviceCountImpl();
aclError Call(uint32_t * count) override;
};
class HijackedFuncOfAclrtGetDeviceInfoImpl : public decltype(AscendclImpHijackedType(&aclrtGetDeviceInfoImpl)) {
public:
explicit HijackedFuncOfAclrtGetDeviceInfoImpl();
aclError Call(uint32_t deviceId, aclrtDevAttr attr, int64_t * value) override;
};
class HijackedFuncOfAclrtGetSocNameImpl : public decltype(HijackedFuncHelper(&aclrtGetSocNameImpl)) {
public:
explicit HijackedFuncOfAclrtGetSocNameImpl();
const char *Call() override;
const char *EmptyFunc() override { return nullptr; }
};
class HijackedFuncOfAclrtLaunchKernelImpl : public decltype(AscendclImpHijackedType(&aclrtLaunchKernelImpl)),
protected AclLaunchKernelMixin {
public:
explicit HijackedFuncOfAclrtLaunchKernelImpl();
aclError Call(aclrtFuncHandle funcHandle, uint32_t blockDim, const void *argsData, size_t argsSize,
aclrtStream stream) override;
void Pre(aclrtFuncHandle funcHandle, uint32_t blockDim, const void *argsData, size_t argsSize, aclrtStream stream)
override;
aclError Post(aclError ret) override;
private:
bool InitParam(
aclrtFuncHandle funcHandle, uint32_t blockDim, const void *argsData, size_t argsSize, aclrtStream stream);
void ProfPre(const std::function<bool(void)> &func, const std::function<void(const std::string &)> &bbCountTask,
aclrtStream stm);
void ProfPost();
void ProfPreForInstrProf(const std::function<bool(void)> &func,
const std::function<void(const std::string &)> &bbCountTask, rtStream_t stream);
bool PrepareDbiTask(ProfDBIType mode, uint64_t memSize);
void RunDbiRecordTask(ProfDBIType mode, const char *failedLog);
void SanitizerPre();
void SanitizerPost();
private:
uint32_t blockDim_{0};
void *argsData_{nullptr};
size_t argsSize_{0};
ArgsContextSP argsCtx_{nullptr};
};
class HijackedFuncOfAclrtLaunchKernelV2Impl : public decltype(AscendclImpHijackedType(&aclrtLaunchKernelV2Impl)),
protected AclLaunchKernelMixin {
public:
explicit HijackedFuncOfAclrtLaunchKernelV2Impl();
aclError Call(aclrtFuncHandle funcHandle, uint32_t numBlocks, const void *argsData, size_t argsSize,
aclrtLaunchKernelCfg *cfg, aclrtStream stream) override;
void Pre(aclrtFuncHandle funcHandle, uint32_t numBlocks, const void *argsData, size_t argsSize,
aclrtLaunchKernelCfg *cfg, aclrtStream stream) override;
aclError Post(aclError ret) override;
private:
bool InitParam(aclrtFuncHandle funcHandle, uint32_t numBlocks, const void *argsData, size_t argsSize,
aclrtLaunchKernelCfg *cfg, aclrtStream stream);
void ProfPre(const std::function<bool(void)> &func, const std::function<void(const std::string &)> &bbCountTask,
aclrtStream stm);
void ProfPost();
void ProfPreForInstrProf(const std::function<bool(void)> &func,
const std::function<void(const std::string &)> &bbCountTask, rtStream_t stream);
bool PrepareDbiTask(ProfDBIType mode, uint64_t memSize);
void RunDbiRecordTask(ProfDBIType mode, const char *failedLog);
void SanitizerPre();
void SanitizerPost();
private:
uint32_t numBlocks_{0};
void *argsData_{nullptr};
size_t argsSize_{0};
aclrtLaunchKernelCfg *cfg_{nullptr};
ArgsContextSP argsCtx_{nullptr};
};
class HijackedFuncOfAclrtLaunchKernelWithHostArgsImpl
: public decltype(AscendclImpHijackedType(&aclrtLaunchKernelWithHostArgsImpl)),
protected AclLaunchKernelMixin {
public:
explicit HijackedFuncOfAclrtLaunchKernelWithHostArgsImpl();
aclError Call(aclrtFuncHandle funcHandle, uint32_t blockDim, aclrtStream stream, aclrtLaunchKernelCfg * cfg,
void *hostArgs, size_t argsSize, aclrtPlaceHolderInfo *placeHolderArray, size_t placeHolderNum) override;
void Pre(aclrtFuncHandle funcHandle, uint32_t blockDim, aclrtStream stream, aclrtLaunchKernelCfg * cfg,
void *hostArgs, size_t argsSize, aclrtPlaceHolderInfo *placeHolderArray, size_t placeHolderNum) override;
aclError Post(aclError ret) override;
private:
bool InitParam(aclrtFuncHandle funcHandle, uint32_t blockDim, aclrtStream stream, aclrtLaunchKernelCfg * cfg,
void *hostArgs, size_t argsSize, aclrtPlaceHolderInfo *placeHolderArray, size_t placeHolderNum);
void ProfPre(const std::function<bool(void)> &func, const std::function<void(const std::string &)> &bbCountTask,
aclrtStream stm);
void ProfPreForInstrProf(const std::function<bool(void)> &func,
const std::function<void(const std::string &)> &bbCountTask, rtStream_t stream);
bool PrepareDbiTask(ProfDBIType mode, uint64_t memSize);
void ProfPost();
void RunDbiRecordTask(ProfDBIType mode, const char *failedLog);
void SanitizerPre();
void SanitizerPost();
private:
uint32_t blockDim_{0};
void *hostArgs_{nullptr};
size_t argsSize_{0};
aclrtLaunchKernelCfg *cfg_{nullptr};
std::vector<aclrtPlaceHolderInfo> placeHolderArray_;
size_t placeHolderNum_{0};
ArgsContextSP argsCtx_{nullptr};
KernelType kernelType_{KernelType::INVALID};
};
class HijackedFuncOfAclrtLaunchKernelWithConfigImpl
: public decltype(AscendclImpHijackedType(&aclrtLaunchKernelWithConfigImpl)),
protected AclLaunchKernelMixin {
public:
explicit HijackedFuncOfAclrtLaunchKernelWithConfigImpl();
void Pre(aclrtFuncHandle funcHandle, uint32_t blockDim, aclrtStream stream, aclrtLaunchKernelCfg * cfg,
aclrtArgsHandle argsHandle, void *reserve) override;
aclError Call(aclrtFuncHandle funcHandle, uint32_t blockDim, aclrtStream stream, aclrtLaunchKernelCfg * cfg,
aclrtArgsHandle argsHandle, void *reserve) override;
aclError Post(aclError ret) override;
private:
bool InitParam(aclrtFuncHandle funcHandle, uint32_t blockDim, aclrtStream stream, aclrtLaunchKernelCfg * cfg,
aclrtArgsHandle argsHandle, void *reserve);
void ProfPost();
void ProfPre(const std::function<bool(void)> &func, const std::function<void(const std::string &)> &bbCountTask,
aclrtStream stm);
void ProfPreForInstrProf(const std::function<bool(void)> &func,
const std::function<void(const std::string &)> &bbCountTask, rtStream_t stream);
bool PrepareDbiTask(ProfDBIType mode, uint64_t memSize);
void RunDbiRecordTask(ProfDBIType mode, const char *failedLog);
void SanitizerPre();
void SanitizerPost();
private:
uint32_t blockDim_{0};
aclrtLaunchKernelCfg *cfg_{nullptr};
aclrtArgsHandle argsHandle_{nullptr};
void *reserve_{nullptr};
};
class HijackedFuncOfAclrtKernelArgsInitByUserMemImpl
: public decltype(AscendclImpHijackedType(&aclrtKernelArgsInitByUserMemImpl)) {
public:
explicit HijackedFuncOfAclrtKernelArgsInitByUserMemImpl();
void Pre(aclrtFuncHandle funcHandle, aclrtArgsHandle argsHandle, void *userHostMem, size_t actualArgsSize) override;
aclError Post(aclError ret) override;
private:
aclrtFuncHandle funcHandle_{nullptr};
aclrtArgsHandle argsHandle_{nullptr};
};
class HijackedFuncOfAclmdlRICaptureBeginImpl : public decltype(AscendclImpHijackedType(&aclmdlRICaptureBeginImpl)) {
public:
explicit HijackedFuncOfAclmdlRICaptureBeginImpl();
void Pre(aclrtStream stream, aclmdlRICaptureMode mode) override;
};
class HijackedFuncOfAclmdlRICaptureEndImpl : public decltype(AscendclImpHijackedType(&aclmdlRICaptureEndImpl)) {
public:
explicit HijackedFuncOfAclmdlRICaptureEndImpl();
void Pre(aclrtStream stream, aclmdlRI * modeRI) override;
};
class HijackedFuncOfAclmdlRIBindStreamImpl : public decltype(AscendclImpHijackedType(&aclmdlRIBindStreamImpl)) {
public:
explicit HijackedFuncOfAclmdlRIBindStreamImpl();
void Pre(aclmdlRI modelRI, aclrtStream stream, uint32_t flag) override;
};
class HijackedFuncOfAclmdlRIUnbindStreamImpl : public decltype(AscendclImpHijackedType(&aclmdlRIUnbindStreamImpl)) {
public:
explicit HijackedFuncOfAclmdlRIUnbindStreamImpl();
void Pre(aclmdlRI modelRI, aclrtStream stream) override;
};