gpt4 book ai didi

c - 添加泳道中的所有元素

转载 作者:太空狗 更新时间:2023-10-29 15:02:42 25 4
gpt4 key购买 nike

是否存在允许在 channel 中添加所有元素的内在函数?我正在使用 Neon 将 8 个数字相乘,我需要对结果求和。下面是一些解释代码来显示我当前正在做的事情(这可能会被优化):

int16_t p[8], q[8], r[8];
int32_t sum;
int16x8_t pneon, qneon, result;

p[0] = some_number;
p[1] = some_other_number;
//etc etc
pneon = vld1q_s16(p);

q[0] = some_other_other_number;
q[1] = some_other_other_other_number;
//etc etc
qneon = vld1q_s16(q);
result = vmulq_s16(p,q);
vst1q_s16(r,result);
sum = ((int32_t) r[0] + (int32_t) r[1] + ... //etc );

有没有“更好”的方法来做到这一点?

最佳答案

如果您的目标是较新的 arm 64 位架构,那么 ADDV 就是适合您的指令。

下面是您的代码使用它后的样子。

qneon = vld1q_s16(q);
result = vmulq_s16(p,q);
sum = vaddvq_s16(result);

就是这样。只需一条指令即可汇总 vector 寄存器中的所有 channel 。

遗憾的是,该指令在较旧的 32 位 arm 架构中不具备。

关于c - 添加泳道中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12171117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com