前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一段NEON代码

一段NEON代码

作者头像
轻舞飞扬SR
发布2021-09-23 14:37:18
1K0
发布2021-09-23 14:37:18
举报
文章被收录于专栏:Visual CodexVisual Codex
代码语言:javascript
复制
#include <iostream>
#include <arm_neon.h> //需包含的头文件
using namespace std;

float sum_array(float *arr, int len)
{
    if (NULL == arr || len < 1)
    {
        cout << "input error\n";
        return 0;
    }

    int dim4 = len >> 2;                    // 数组长度除4整数
    int left4 = len & 3;                    // 数组长度除4余数
    float32x4_t sum_vec = vdupq_n_f32(0.0); // 定义用于暂存累加结果的寄存器且初始化为0
    for (; dim4 > 0; dim4--, arr += 4)      // 每次同时访问4个数组元素
    {
        float32x4_t data_vec = vld1q_f32(arr);  //依次取4个元素存入寄存器vec
        sum_vec = vaddq_f32(sum_vec, data_vec); //ri = ai + bi 计算两组寄存器对应元素之和并存放到相应结果
    }
    float sum = vgetq_lane_f32(sum_vec, 0) + vgetq_lane_f32(sum_vec, 1) + vgetq_lane_f32(sum_vec, 2) + vgetq_lane_f32(sum_vec, 3); //将累加结果寄存器中的所有元素相加得到最终累加值
    for (; left4 > 0; left4--, arr++)
        sum += (*arr); //对于剩下的少于4的数字,依次计算累加即可
    return sum;
}

void av_clip_pixel()
{
    int height = 100;
    int width = 200;
    int16x8_t result_16x8;
    int16x8_t offset_16x8 = vmovq_n_s16(offset);
    int16x8_t minusshift_16x8 = vmovq_n_s16(-1 * shift);
    int16x8_t min_16x8 = vmovq_n_s16(0);
    int16x8_t max_16x8 = vmovq_n_s16(255);

    for (y = 0; y < height; y++)
    {
        for (x = 0; x < width; x += 8)
        {
            result_16x8 = vshlq_n_s16(vreinterpretq_s16_u16(vmovl_u8(vld1_u8(&src[x]))), 6);
            result_16x8 = vshlq_s16(vqaddq_s16(vqaddq_s16(result_16x8, vld1q_s16(&src2[x])), offset_16x8), minusshift_16x8);
            vst1_u8(&dst[x], vqmovn_u16(vreinterpretq_u16_s16(vmaxq_s16(vminq_s16(result_16x8, max_16x8), min_16x8))));
        }
        src += srcstride;
        dst += dststride;
        src2 += MAX_PB_SIZE;
    }
}

int main()
{
    float arr[10] = {1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0};
    cout << "sum_array result: " << sum_array(arr, 10) << endl;
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档