SetSysWorkSpace
功能说明
框架需要使用的workspace称之为系统workspace。Matmul等高阶API需要系统workspace,所以在使用该类API时,需要调用该接口,设置系统workspace的指针。采用工程化算子开发方式或者kernel直调方式(开启-DHAVE_WORKSPACE编译选项)时,不需要开发者手动设置,框架会自动设置。其他场景下,需要开发者调用SetSysWorkSpace进行设置。
在kernel侧调用该接口前,需要在host侧调用GetLibApiWorkSpaceSize获取系统workspace的大小,并在host侧设置workspacesize大小。样例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 用户自定义的tiling函数 static ge::graphStatus TilingFunc(gert::TilingContext* context) { AddApiTiling tiling; ... size_t usrSize = 256; // 设置用户需要使用的workspace大小。 // 如需要使用系统workspace需要调用GetLibApiWorkSpaceSize获取系统workspace的大小。 auto ascendcPlatform = platform_ascendc:: PlatformAscendC(context->GetPlatformInfo()); uint32_t sysWorkspaceSize = ascendcPlatform.GetLibApiWorkSpaceSize(); size_t *currentWorkspace = context->GetWorkspaceSizes(1); // 通过框架获取workspace的指针,GetWorkspaceSizes入参为所需workspace的块数。当前限制使用一块。 currentWorkspace[0] = usrSize + sysWorkspaceSize; // 设置总的workspace的数值大小,总的workspace空间由框架来申请并管理。 ... } |
函数原型
1
|
__aicore__ inline void SetSysWorkSpace(GM_ADDR workspace) |
参数说明
参数名称 |
输入/输出 |
描述 |
---|---|---|
workspace |
输入 |
核函数传入的workspace的指针,包括系统workspace和用户使用的workspace。 |
支持的型号
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas A2训练系列产品/Atlas 800I A2推理产品
注意事项
无
返回值
无
调用示例
1 2 3 4 5 6 7 8 9 10 11 |
template<typename aType, typename bType, typename cType, typename biasType> __aicore__ inline void MatmulLeakyKernel<aType, bType, cType, biasType>::Init( GM_ADDR a, GM_ADDR b, GM_ADDR bias, GM_ADDR c, GM_ADDR workspace, const TCubeTiling& tiling, float alpha) { // 融合算子的初始化操作 // ... AscendC::SetSysWorkspace(workspace); if (GetSysWorkSpacePtr() == nullptr) { return; } } |
父主题: workspace