CANN/asc-devkit矢量比较API
Compare结果存入寄存器【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品 AI Core支持Atlas 推理系列产品 Vector Core不支持Atlas 训练系列产品不支持功能说明头文件路径为basic_api/kernel_operator_vec_cmpsel_intf.h。逐元素比较两个tensor大小如果比较后的结果为真则输出结果的对应比特位为1否则为0。计算结果存入CmpMask 128bit寄存器中可用于后续Select计算也可使用GetCmpMask.md)接口获取寄存器保存的数据。接口支持多种比较模式LT小于less thanGT大于greater thanGE大于或等于greater than or equal toEQ等于equal toNE不等于not equal toLE小于或等于less than or equal to函数原型mask逐bit模式template typename T, bool isSetMask true __aicore__ inline void Compare(const LocalTensorT src0, const LocalTensorT src1, CMPMODE cmpMode, const uint64_t mask[], const BinaryRepeatParams repeatParams)mask连续模式template typename T, bool isSetMask true __aicore__ inline void Compare(const LocalTensorT src0, const LocalTensorT src1, CMPMODE cmpMode, const uint64_t mask, const BinaryRepeatParams repeatParams)参数说明表1模板参数说明参数名描述T源操作数数据类型。isSetMask是否在接口内部设置mask。• true表示在接口内部设置mask。• false表示在接口外部设置mask开发者需要使用SetVectorMask接口设置mask值。这种模式下接口入参中的mask值设置为占位符MASK_PLACEHOLDER用于占位无实际含义。表2接口参数说明参数名称输入/输出描述src0、src1输入源操作数。类型为LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32字节对齐。cmpMode输入CMPMODE类型表示比较模式包括EQNEGELEGTLT。• LTsrc0小于less thansrc1• GTsrc0大于greater thansrc1• GEsrc0大于或等于greater than or equal tosrc1• EQsrc0等于equal tosrc1• NEsrc0不等于not equal tosrc1• LEsrc0小于或等于less than or equal tosrc1mask/mask[]输入mask用于控制每次迭代内参与计算的元素。详细设置参考掩码。repeatParams输入控制操作数地址步长的参数。BinaryRepeatParams类型包含操作数相邻迭代间相同DataBlock的地址步长操作数同一迭代内不同DataBlock的地址步长等参数。相邻迭代间的地址步长参数说明请参考repeatStride同一迭代内DataBlock的地址步长参数说明请参考dataBlockStride。数据类型支持的数据类型为half、float。返回值说明无约束说明操作数地址对齐要求请参见通用地址对齐约束。本接口没有repeat输入repeat默认为1即一条指令计算256B的数据。本接口将结果写入128bit的CmpMask寄存器中可以用GetCmpMask.md)接口获取寄存器保存的数据。对UB空间的占用说明。针对Ascend 950PR/Ascend 950DT该接口占用8KB Unified Buffer临时空间。针对如下型号当参数count或repeatTime取值为0时不会执行计算操作不会对目的操作数进行写入该接口将被视为NOP空操作。Atlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品调用示例本样例中源操作数src0Local和src1Local各存储了64个float类型的数据。样例实现的功能为逐元素对src0Local和src1Local中的数据进行比较如果src0Local中的元素小于src1Local中的元素dstLocal结果中对应的比特位置1反之则置0。dstLocal结果使用uint8_t类型数据存储。本样中只展示部分关键代码。完整的调用样例可参考Compare类样例场景二。mask连续模式uint64_t mask 256 / sizeof(float); // 256为每个迭代处理的字节数 AscendC::BinaryRepeatParams repeatParams { 1, 1, 1, 8, 8, 8 }; // dstBlkStride, src0BlkStride, src1BlkStride 1, no gap between blocks in one repeat // dstRepStride, src0RepStride, src1RepStride 8, no gap between repeats AscendC::Compare(src0Local, src1Local, AscendC::CMPMODE::LT, mask, repeatParams);mask逐bit模式uint64_t mask[2] { UINT64_MAX, 0}; AscendC::BinaryRepeatParams repeatParams { 1, 1, 1, 8, 8, 8 }; // srcBlkStride, 1, no gap between blocks in one repeat // dstRepStride, srcRepStride 8, no gap between repeats AscendC::Compare(src0Local, src1Local, AscendC::CMPMODE::LT, mask, repeatParams);结果示例如下输入数据(src0Local): [ 86.72287 9.413112 17.033222 -64.10005 -66.2691 -65.57659 15.898049 94.61241 -68.920685 -36.16883 15.62852 68.078514 -59.724575 -9.4302225 -64.770935 66.55523 -84.60122 57.331 60.42026 -86.78856 37.25265 8.356797 -48.544407 16.73616 15.28083 -21.889254 -67.93181 -41.01825 -68.79465 20.169441 44.11346 -27.419518 30.452742 -89.30283 -18.590672 32.45831 8.392082 -57.198048 98.76846 -81.73067 -38.274437 -83.84363 64.30617 6.028703 -20.77164 93.71867 54.190437 94.98172 -47.447758 -65.77461 82.21715 59.953922 23.599781 -77.29708 26.963976 -63.468987 79.97712 -70.47842 39.00433 52.36555 -63.94925 -65.77033 26.17237 -71.904884 ] 输入数据(src1Local): [ 2.2989323 51.8879 -81.49718 41.189415 6.4081917 92.566666 53.205498 -94.47063 -75.38387 36.464787 85.60772 -28.70681 42.58504 -76.15293 38.723816 10.006577 74.53035 -78.38537 71.945404 -4.060528 -14.501523 28.229202 96.87876 41.558033 -92.623215 43.318684 35.387154 -16.029816 61.544827 3.3527017 55.806778 -93.242096 22.86275 -87.506584 35.29523 8.405956 91.03445 -85.29485 34.30078 -3.8019252 93.40503 15.459968 -57.99712 -74.39948 -59.900818 -43.132637 -13.123036 41.246174 -93.01083 75.476875 -45.437893 -99.19293 13.543604 76.23386 46.192528 -39.23934 75.9787 -38.38979 9.807722 -60.610104 -23.062874 48.1669 89.913376 73.78631 ] 输出数据(cmpMask寄存器): [122 86 237 94 150 3 226 242]【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考