显示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; |