msDebug工具断点设置在核函数内,命中断点后执行continue命令,算子运行失败

现象描述

显示Synchronize stream failed. error code is 507035,查看plog显示aic error code=0x8000000000000000,并且在命中断点时使用ascend info cores命令可以看到当前核的PC值与预期不符。

原因分析

kernel函数中workspace入参的空间大小在Tiling函数中被设置为0,经过单算子API调用后变成一个非法地址。虽然workspace入参在kernel函数未被使用,调试器展示kernel入参时也会对workspace指针进行解引用,导致算子运行错误。

解决措施

参考Host侧Tiling实现将WorkspaceSize从0设置成预留内存大小。API在计算过程需要一些workspace内存作为缓存,因此算子Tiling函数需要为API预留workspace内存,预留内存大小通过GetLibApiWorkSpaceSize接口获取。参考如下代码:

1
2
3
4
5
#include "tiling/platform/platform_ascendc.h"
auto ascendcPlatform = platform_ascendc::PlatformAscendC(context->GetPlatformInfo());
size_t systemWorkspaceSize = ascendcPlatform.GetLibApiWorkSpaceSize();
size_t*currentWorkspace = context->GetWorkspaceSizes(1); //只使用1块workspace
currentWorkspace[0]= systemWorkspaceSize;