CANN asc-devkit LogicalXor缓冲区大小接口文档
GetLogicalXorTmpBufferFactorSize
【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
功能说明
该接口用于获取maxLivedNodeCount和extraBuf,在固定空间大小的情况下,通过maxLivedNodeCount和extraBuf可以推算算子单次最大计算元素数量。maxLivedNodeCount表示临时空间是单次计算数据量所占空间的多少倍;extraBuf表示使用的额外临时空间大小。
推算示例如下:
算子实现需要调用LogicalXor接口,开发者为其预留currBuff大小的空间,利用GetLogicalXorTmpBufferFactorSize接口得到maxLivedNodeCount、extraBuf输出值,可推导算子单次最大计算元素数量为:
currentShapeSize = (currBuff - extraBuf) / maxLivedNodeCount / typeSize
算子实现需要调用两个kernel侧API KernelIntf1、KernelIntf2,利用两个GetXxxTmpBufferFactorSize(其中Xxx为需要调用的两个高阶API)接口的两组输出值(maxLivedNodeCount、extraBuf)以及当前现有的临时空间,推导单次最大计算元素数量currentShapeSize为:
currentShapeSize1 = (currBuff - extraBuf1) / maxLivedNodeCount1 / typeSize
currentShapeSize2 = (currBuff - extraBuf2) / maxLivedNodeCount2 / typeSize
currentShapeSize = min(currentShapeSize1, currentShapeSize2)
注意上文中的currBuff表示接口计算可用的空间,需要去除用户输入输出等空间;另外,接口获取的maxLivedNodeCount值可能为0,计算时需要判断该值非0,避免除零错误。
函数原型
void GetLogicalXorTmpBufferFactorSize(const platform_ascendc::PlatformAscendC& ascendcPlatform,const uint32_t typeSize, uint32_t& maxLivedNodeCount, uint32_t& extraBuf)参数说明
表1参数列表
| 参数名 | 输入/输出 | 功能 |
|---|---|---|
| ascendcPlatform | 输入 | 输入的平台信息。PlatformAscendC的定义请参见构造及析构函数。 |
| typeSize | 输入 | 输入的数据类型大小,单位为字节。比如输入的数据类型为half,此处应传入2。 |
| maxLivedNodeCount | 输出 | 最大存活节点数,表示临时空间是单次计算数据量所占空间的多少倍。 |
| extraBuf | 输出 | 使用的额外临时空间大小,单位为字节。 |
返回值说明
无
约束说明
当利用maxLivedNodeCount、extraBuf反推出的currentShapeSize * typeSize < 256B时,currentShapeSize按照256B/typeSize的值向上取整。
调用示例
完整的调用样例请参考更多样例。
uint32_t maxLivedNodeCount = 0; uint32_t extraBuf = 0; auto plat = platform_ascendc::PlatformAscendC(context->GetPlatformInfo()); AscendC::GetLogicalXorTmpBufferFactorSize(plat, typeSize, maxLivedNodeCount, extraBuf);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
