TA的每日心情 | 擦汗 2024-12-25 23:22 |
---|
签到天数: 1182 天 [LV.10]大乘
|
5#

楼主 |
发表于 2022-9-24 23:54:10
|
只看该作者
本帖最后由 雷达 于 2022-9-24 23:57 编辑
0 n, u U4 F+ Q' f& e# e7 T' s7 r" n5 s
# R3 W5 F# j5 K9 Q: xvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
: M* F# e% t2 F2 E7 ?{4 G6 {! l- i- {7 ]$ `" y: T
comp temp, xtimesy;
) H8 q1 R W' |' z xtimesy.re = 0;4 D" P, S' ^$ j% _- [2 F$ u, X
xtimesy.im = 0;2 E5 s( e& M4 c, O0 Y. z* g4 Y
int j0 = lenB - 1;4 R2 m0 f9 I0 N4 m. N
int i, j, i1, reali;) C2 q& `: |9 L! C6 A; v0 {
if (lenA % 2 == 1)
) f' U; s8 F3 e* |! c# W reali = lenA + 1;, f3 `* l5 D5 N% g6 r& G
else1 q+ r- l2 F: }
reali = lenA;& g' R& N* `$ J; ?0 X
reali /= 2;# z" U6 @2 k" w! E: n
6 R! ]9 s& q8 X# _0 e$ c( S
int nconv = reali + lenB;5 d' \0 ~2 k# O+ u6 V6 d5 F4 w9 Y
//#pragma omp parallel for
" I0 j0 v: g6 L' g* B for (i = reali; i < nconv; i++). e, B$ R' _% R8 p
{
1 E8 u4 }7 ]% j% K: l7 z temp.re = 0;: C, [. x5 l/ B' e5 |& ]
temp.im = 0;
* N" Z( j; a0 W8 X4 i% U i1 = i;! J" H5 b z) y( O( ?
for (j = j0; j >= 0; j--)/ v6 S& [1 _" E9 w) h
{; d+ ^! O5 f8 K, T( D @1 {* m1 X
/* floating date operation */
, u$ J$ V9 z- B3 y, \* H9 o! l }
6 }- d. Q) @( G; q4 a }, r" `1 l' Q L, d) }! `% J
}
A {+ B4 t% t! L2 s; ~% Q8 }* B/ v+ S& b: ^( ]) U& V! V
xcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样
; ~* i k, H( ]" \
6 e+ I( g% U" H' }" N- e红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。# F/ B- A$ R& w: D- p
现在call xcorr 100次,耗时78s.7 z8 j) x F- F" J
& _1 z5 E& b& g8 q$ f
如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s. - Y: K J6 V2 L0 b2 r3 T
( H4 P7 i6 z6 G- k& v2 H$ @3 R
|
|