asc_frequency_histogram
【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
功能说明
头文件路径:"c_api/reg_compute/reg_vector.h"。
对输入数据进行频率统计,生成直方图。统计结果在dst原有数据基础上累加。
工作原理:
- 统计src中每个数值的出现频率
- dst的第n个元素存储数值n在src中出现的次数
- 结果累加到dst原有数据中,支持多次统计的累加计算
分区间统计:由于src数据类型为uint8_t(取值范围0~255),而dst每个元素为uint16_t,且一个Vector Length可存储128个数据,因此将统计范围分为两个区间:
- 低位模式(BIN0):统计src中数值在[0, 127]范围内的出现频率
- 高位模式(BIN1):统计src中数值在[128, 255]范围内的出现频率,统计时将数值减去128,映射到dst的索引位置
统计方式如下图所示:
- dst0:低位模式统计结果,dst0[0]表示数值0的出现次数,dst0[127]表示数值127的出现次数
- dst1:高位模式统计结果,dst1[0]表示数值128的出现次数,dst1[127]表示数值255的出现次数
函数原型
// 低位模式 __simd_callee__ inline void asc_frequency_histogram_bin0(vector_uint16_t& dst, vector_uint8_t src, vector_bool mask) // 高位模式 __simd_callee__ inline void asc_frequency_histogram_bin1(vector_uint16_t& dst, vector_uint8_t src, vector_bool mask)参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| dst | 输出 | 目的操作数(矢量数据寄存器)。 |
| src | 输入 | 源操作数(矢量数据寄存器)。 |
| mask | 输入 | 源操作数掩码(掩码寄存器),用于指示在计算过程中哪些元素参与计算。对应位置为1时参与计算,为0时不参与计算。mask未筛选的元素在输出中置零。 |
矢量数据寄存器和掩码寄存器的详细说明请参见data_type_definition.md。
返回值说明
无
流水类型
PIPE_V
约束说明
- 当mask位数为0时,源操作数src对应位置的数数值将被忽略,dst对应位置数值为忽略该位置src后计算得到的值。
- dst的数据类型为uint16_t,最大值为65535,使用时需注意累加溢出问题。
调用示例
// 示例1:完整的频率统计流程 vector_uint16_t dst0, dst1; // dst0用于低位统计,dst1用于高位统计 vector_uint8_t src; vector_bool mask = asc_create_mask_b8(PAT_ALL); // 初始化dst为0 asc_duplicate_scalar(dst0, (uint16_t)0, mask); asc_duplicate_scalar(dst1, (uint16_t)0, mask); // 加载待统计的数据 asc_loadalign(src, src_addr); // src_addr是外部输入的UB内存空间地址 // 分别统计低位和高位区间 asc_frequency_histogram_bin0(dst0, src, mask); // 统计[0,127] asc_frequency_histogram_bin1(dst1, src, mask); // 统计[128,255] // dst0[0]表示数值0的出现次数,dst0[127]表示数值127的出现次数 // dst1[0]表示数值128的出现次数,dst1[127]表示数值255的出现次数 // 示例2:多次累加统计 // 支持对多批数据进行累加统计 asc_loadalign(src, src_addr2); // 加载第二批数据, src_addr2是外部输入的UB内存空间地址 asc_frequency_histogram_bin0(dst0, src, mask); // 累加到dst0 asc_frequency_histogram_bin1(dst1, src, mask); // 累加到dst1 // 此时dst0和dst1包含两批数据的累积统计结果【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考