簡體   English   中英

具有復數的霓虹內在函數

[英]Neon intrinsics with complex numbers

我有很多使用復數的計算(通常是一個包含由兩個浮點數組成的結構的數組,分別表示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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM