27. API Hook
本章节描述CANN Runtime的API Hook接口,用于支持性能分析工具(如Profiling)通过注入Hook函数的方式拦截部分Runtime接口(这里指aclrt、aclmdlRI开头的接口,但不包含本章中的接口)。
aclError aclrtApiInjectionSetFunc(const char* name, aclrtApiFunc func):将指定名称的Runtime接口的当前实现函数指针设置为指定的Hook函数。aclError aclrtApiInjectionGetFunc(const char* name, aclrtApiFunc* originFunc, aclrtApiFunc* currentFunc):获取指定名称的Runtime接口的原始实现函数指针和当前实现函数指针。
aclrtApiInjectionSetFunc
aclError aclrtApiInjectionSetFunc(const char* name, aclrtApiFunc func)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
将指定名称的Runtime接口指向对应的Hook函数实现。设置后,调用该Runtime接口时将跳转到Hook函数执行。
可通过本接口注入Hook函数,实现对Runtime接口调用的拦截和统计。若需恢复原始行为,可调用本接口并传入原始函数指针。原始函数指针可通过aclrtApiInjectionGetFunc获取。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| name | 输入 | Runtime接口名称,需与Runtime接口名称完全匹配,例如"aclrtMemcpy"。 |
| func | 输入 | Hook函数指针。类型定义请参见aclrtApiFunc。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 本接口建议在调用对应的Runtime接口之前调用,需由用户保证接口调用的时序。
- 调用aclrtApiInjectionSetFunc接口和aclrtApiInjectionGetFunc接口时,需由用户保证多线程调用时序。
- 当前支持Hook的接口范围为aclrt接口和aclmdlRI开头的接口,不支持aclInit、aclFinalize等接口。
- 对于不支持Hook功能的产品型号,本接口返回
ACL_ERROR_FEATURE_UNSUPPORTED。
aclrtApiInjectionGetFunc
aclError aclrtApiInjectionGetFunc(const char* name, aclrtApiFunc* originFunc, aclrtApiFunc* currentFunc)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
获取指定名称的Runtime接口的原始实现函数指针和当前实现函数指针。
在运行时初始化阶段,原始实现指针(originFunc)与当前实现指针(currentFunc)相等。当调用aclrtApiInjectionSetFunc注入Hook函数后,currentFunc指向Hook函数,originFunc保持不变。当查询originFunc和currentFunc不一致时,表示该接口实现已被Hook函数替换。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| name | 输入 | Runtime接口名称,需与Runtime接口名称完全匹配,例如"aclrtMemcpy"。 |
| originFunc | 输出 | 原始函数指针。若不需要可传nullptr。类型定义请参见aclrtApiFunc。 |
| currentFunc | 输出 | 当前函数指针。若不需要可传nullptr。类型定义请参见aclrtApiFunc。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 对于不支持Hook功能的产品型号,本接口返回
ACL_ERROR_FEATURE_UNSUPPORTED。 - 调用aclrtApiInjectionSetFunc接口和aclrtApiInjectionGetFunc接口时,需由用户保证多线程调用时序。