gpt4 book ai didi

c - 具有复数的 Neon 内在函数

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:19 25 4
gpt4 key购买 nike

我有很多复数计算(通常是一个包含一个结构的数组,该结构由两个 float 组成,代表 im 和 re;见下文)并希望使用 NEON C 内在函数加速它们。如果你能给我一个如何加速这样的事情的例子,那就太棒了:

for(n = 0;n < 1024;n++,p++,ptemp++){  // get cir_abs, also find the biggest point (value and location).
abs_squared = (Uns32)(((Int32)(p->re)) * ((Int32)(p->re))
+ ((Int32)(p->im)) * ((Int32)(p->im)));
// ...
}

p 是这样的数组:

typedef struct {
Int16 re;
Int16 im;
} Complex;

我已经通读了“ARM C 语言扩展”的第 12 章,但在理解如何在此处加载和存储我的构造以对其进行计算时仍然存在问题。

最佳答案

使用vld2* 内在函数将reim 加载到不同的寄存器中,然后分别处理它们,例如

Complex array[16];

const int16x8x2_t vec_complex = vld2q_s16((const int16_t*)array);
const int16x8_t vec_re = vec_complex.val[0];
const int16x8_t vec_im = vec_complex.val[1];
const int16x8_t vec_abssq = vmlaq_s16(vmulq_s16(vec_re, vec_re), vec_im, vec_im);

对于上面的代码clang 3.3生成

vld2.16 {d18, d19, d20, d21}, [r0]
vmul.i16 q8, q10, q10
vmla.i16 q8, q9, q9

关于c - 具有复数的 Neon 内在函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21867623/

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