昇腾C掩码操作API使用指南
如何使用掩码操作API【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkitMask用于控制矢量计算中参与计算的元素个数支持以下工作模式及配置方式表1Mask工作模式工作模式说明Normal模式默认模式支持单次迭代内的Mask能力需要开发者配置迭代次数额外进行尾块的计算。Normal模式下Mask用来控制单次迭代内参与计算的元素个数。通过调用SetMaskNorm设置Normal模式。Counter模式简化模式直接传入计算数据量自动推断迭代次数不需要开发者去感知迭代次数、处理非对齐尾块的操作但是不具备单次迭代内的Mask能力。Counter模式下Mask表示整个矢量计算参与计算的元素个数。通过调用SetMaskCount设置Counter模式。表2Mask配置方式配置方式说明接口传参默认通过矢量计算API的入参直接传递Mask值。矢量计算API的模板参数isSetMask仅部分API支持用于控制接口传参还是外部API配置默认值为true表示接口传参。Mask对应于高维切分计算API中的mask/mask[]参数或者tensor前n个数据计算API中的calCount参数。外部API配置调用SetVectorMask接口设置Mask值矢量计算API的模板参数isSetMask设置为false接口入参中的Mask参数对应于高维切分计算API中的mask/mask[]参数或者tensor前n个数据计算API中的calCount参数不生效。适用于Mask参数相同多次重复使用的场景无需在矢量计算API内部反复设置会有一定的性能优势。Mask操作的使用方式如下表3Mask操作的使用方式配置方式工作模式前n个数据计算API高维切分计算API接口传参Normal模式不涉及。isSetMask模板参数设置为true通过接口入参传入Mask根据使用场景配置dataBlockStride、repeatStride、repeatTime参数。Counter模式isSetMask模板参数设置为true通过接口入参传入Mask。isSetMask模板参数设置为true通过接口入参传入Mask。根据使用场景配置dataBlockStride、repeatStride参数。repeatTime传入固定值即可建议统一设置为1该值不生效。外部API配置Normal模式不涉及。调用SetVectorMask设置Mask之后调用高维切分计算API。isSetMask模板参数设置为false接口入参中的mask值设置为占位符MASK_PLACEHOLDER用于占位无实际含义。根据使用场景配置repeatTime、dataBlockStride、repeatStride参数。Counter模式调用SetVectorMask设置Mask之后调用前n个数据计算APIisSetMask模板参数设置为false接口入参中的calCount建议设置成1。调用SetVectorMask设置Mask之后调用高维切分计算API。isSetMask模板参数设置为false接口入参中的mask值设置为MASK_PLACEHOLDER用于占位无实际含义。根据使用场景配置dataBlockStride、repeatStride参数。repeatTime传入固定值即可建议统一设置为1该值不生效。典型场景的使用示例如下场景1Normal模式 外部API配置 高维切分计算APIAscendC::LocalTensorhalf dstLocal; AscendC::LocalTensorhalf src0Local; AscendC::LocalTensorhalf src1Local; // 1、设置Normal模式 AscendC::SetMaskNorm(); // 2、设置Mask AscendC::SetVectorMaskhalf, AscendC::MaskMode::NORMAL(0xffffffffffffffff, 0xffffffffffffffff); // 逐bit模式 // SetVectorMaskhalf, MaskMode::NORMAL(128); // 连续模式 // 3、多次调用矢量计算API, isSetMask模板参数设置为false接口入参中的mask值设置为占位符MASK_PLACEHOLDER用于占位无实际含义 // 根据使用场景配置repeatTime、dataBlockStride、repeatStride参数 // dstBlkStride, src0BlkStride, src1BlkStride 1,单次迭代内数据连续读取和写入 // dstRepStride, src0RepStride, src1RepStride 8,相邻迭代间数据连续读取和写入 AscendC::Addhalf, false(dstLocal, src0Local, src1Local, AscendC::MASK_PLACEHOLDER, 1, { 2, 2, 2, 8, 8, 8 }); AscendC::Subhalf, false(src0Local, dstLocal, src1Local, AscendC::MASK_PLACEHOLDER, 1, { 2, 2, 2, 8, 8, 8 }); AscendC::Mulhalf, false(src1Local, dstLocal, src0Local, AscendC::MASK_PLACEHOLDER, 1, { 2, 2, 2, 8, 8, 8 }); // 4、恢复Mask值为默认值 AscendC::ResetMask();场景2Counter模式 外部API配置 高维切分计算APIAscendC::LocalTensorhalf dstLocal; AscendC::LocalTensorhalf src0Local; AscendC::LocalTensorhalf src1Local; int32_t len 128; // 参与计算的元素个数 // 1、设置Counter模式 AscendC::SetMaskCount(); // 2、设置Mask AscendC::SetVectorMaskhalf, AscendC::MaskMode::COUNTER(len); // 3、多次调用矢量计算API, isSetMask模板参数设置为false接口入参中的mask值设置为MASK_PLACEHOLDER用于占位无实际含义 // 根据使用场景正确配置dataBlockStride、repeatStride参数。repeatTime传入固定值即可建议统一设置为1该值不生效 AscendC::Addhalf, false(dstLocal, src0Local, src1Local, AscendC::MASK_PLACEHOLDER, 1, { 1, 1, 1, 8, 8, 8 }); AscendC::Subhalf, false(src0Local, dstLocal, src1Local, AscendC::MASK_PLACEHOLDER, 1, { 1, 1, 1, 8, 8, 8 }); AscendC::Mulhalf, false(src1Local, dstLocal, src0Local, AscendC::MASK_PLACEHOLDER, 1, { 1, 1, 1, 8, 8, 8 }); // 4、恢复工作模式 AscendC::SetMaskNorm(); // 5、恢复Mask值为默认值 AscendC::ResetMask();场景3Counter模式 外部API配置 前n个数据计算接口配合使用AscendC::LocalTensorhalf dstLocal; AscendC::LocalTensorhalf src0Local; half num 2; // 1、设置Mask AscendC::SetVectorMaskhalf, AscendC::MaskMode::COUNTER(128); // 参与计算的元素个数为128 // 2、调用前n个数据计算APIisSetMask模板参数设置为false接口入参中的calCount建议设置成1。 AscendC::Addshalf, false(dstLocal, src0Local, num, 1); AscendC::Mulshalf, false(dstLocal, src0Local, num, 1); // 3、恢复工作模式 AscendC::SetMaskNorm(); // 4、恢复Mask值为默认值 AscendC::ResetMask();[!NOTE]说明前n个数据计算API接口内部会设置工作模式为Counter模式所以如果前n个数据计算API配合Counter模式使用时无需手动调用SetMaskCount设置Counter模式。所有手动使用Counter模式的场景使用完毕后需要调用SetMaskNorm恢复工作模式。调用SetVectorMask设置Mask使用完毕后需要调用ResetMask恢复Mask值为默认值。使用高维切分计算API配套Counter模式使用时比前n个数据计算API增加了可间隔的计算支持dataBlockStride、repeatStride参数。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考