CANN/asc-devkit Async函数API文档
Async
【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
产品支持情况
功能说明
Async提供了一个统一的接口,用于在不同模式下(AIC或AIV)执行特定函数,从而避免代码中直接的硬件条件判断(如使用ASCEND_IS_AIV或ASCEND_IS_AIC)。
函数原型
template <EngineType engine, auto funPtr, class... Args> __aicore__ void Async(Args... args)参数说明
表 1模板参数说明
enum class EngineType : int32_t { AIC = 1, // 仅AIC AIV = 2 // 仅AIV }; | |
表 2参数说明
返回值说明
无
约束说明
无
调用示例
extern "C" __global__ __aicore__ void baremix_custom(GM_ADDR a, GM_ADDR b, GM_ADDR bias, GM_ADDR c, GM_ADDR workspace, GM_ADDR tilingGm) { KERNEL_TASK_TYPE_DEFAULT(KERNEL_TYPE_MIX_AIC_1_2); AscendC::TPipe pipe; TCubeTiling tiling; CopyTiling(&tiling, tilingGm); // 避免代码中直接的硬件条件判断(如使用ASCEND_IS_AIV或ASCEND_IS_AIC) Async<EngineType::AIC, aicOperation>(a, b, bias, c, workspace, tiling, &pipe); Async<EngineType::AIV, aivOperation>(c, tiling, &pipe); } __aicore__ inline void aicOperation(GM_ADDR a, GM_ADDR b, GM_ADDR bias, GM_ADDR c, GM_ADDR workspace, const TCubeTiling &tiling, AscendC::TPipe *pipe) { MatmulLeakyKernel<half, half, float, float> matmulLeakyKernel; matmulLeakyKernel.Init(a, b, bias, c, workspace, tiling, pipe); REGIST_MATMUL_OBJ(pipe, GetSysWorkSpacePtr(), matmulLeakyKernel.matmulObj, &matmulLeakyKernel.tiling); matmulLeakyKernel.Process(pipe); } __aicore__ inline void aivOperation(GM_ADDR c, const TCubeTiling &tiling, AscendC::TPipe *pipe) { LeakyReluKernel<float> leakyReluKernel; leakyReluKernel.Init(c, tiling, pipe); leakyReluKernel.Process(pipe); }【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
