首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有复数的Neon本质

具有复数的Neon本质
EN

Stack Overflow用户
提问于 2014-02-18 23:16:34
回答 1查看 1.8K关注 0票数 0

我有很多复数的计算(通常是一个数组,包含一个由两个浮点数组成的结构来表示im和re;见下文),并希望用NEON C的本质来加快它们的速度。如果你能给我举个例子来加速这样的事情,那就太棒了:

代码语言:javascript
复制
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是这类数组:

代码语言:javascript
复制
typedef struct {
    Int16 re;
    Int16 im;
} Complex;

我已经读过了"ARM C语言扩展“的第12章,但在理解如何在这里加载和存储我的构造以进行计算方面仍然存在问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-18 23:58:41

使用vld2*本质,在加载时将reim拆分成不同的寄存器,然后分别处理。

代码语言:javascript
复制
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);

对于上面的代码clang3.3生成

代码语言:javascript
复制
vld2.16 {d18, d19, d20, d21}, [r0]
vmul.i16 q8, q10, q10
vmla.i16 q8, q9, q9
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21867623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档