TA的每日心情 | 怒 2025-9-22 22:19 |
|---|
签到天数: 1183 天 [LV.10]大乘
|
5#

楼主 |
发表于 2022-9-24 23:54:10
|
只看该作者
本帖最后由 雷达 于 2022-9-24 23:57 编辑 ' H$ R$ ~ G" s8 p
0 ] \# h, E* s) j
4 M9 T0 r. J' e. _) ]6 G$ r' d- h2 K
void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)& P! ^' l: j8 ` S; m+ i
{
* E) a+ r2 h& b, b" p4 g# [ comp temp, xtimesy;
8 S( r4 r+ {% q: @6 o v h1 ~ xtimesy.re = 0;/ j5 q3 @) D4 E8 A+ i& Z3 J+ X
xtimesy.im = 0;! d2 {( \4 c7 C, w4 h# @# V$ I1 O
int j0 = lenB - 1;
# _8 a9 O2 L7 L k! t3 d int i, j, i1, reali;
$ B/ U1 O" d b; m$ T if (lenA % 2 == 1)# P M5 |8 O# r0 g k/ H# L; H3 _
reali = lenA + 1;1 }: O4 e8 L; A7 N
else2 G m9 v) N5 p. W
reali = lenA;. B C0 J" \, I8 D- ^6 t
reali /= 2; y1 D7 E' c; S
$ B* l2 p' L, P! ~8 M- p {9 c int nconv = reali + lenB;
4 R& @9 g8 Y2 U- |9 ^! L //#pragma omp parallel for
3 W8 E$ ?0 E+ s: ? for (i = reali; i < nconv; i++)2 Y: S8 n1 w" u
{8 B s9 D- h& v- I) J; X4 f/ \
temp.re = 0;
1 K0 d4 O' f! i) q, ] p5 v temp.im = 0;0 |* u; e G; Q; ~0 ]# d
i1 = i;9 a9 x0 h2 {, S2 E! E |
for (j = j0; j >= 0; j--)
: w# R; V! v5 w- T/ F- h5 k {
9 s! D+ d3 `9 S /* floating date operation */
$ t* Q6 V' A$ g. b9 P( X }
6 j: g+ F7 S. p2 R) n" b4 J- ? }
" t" V$ V/ t5 C}+ h }$ V% g6 ~: N
" B }) j. u7 Y1 }) Pxcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样# @8 r2 X H' `0 U# f9 W
" @6 a, G! N4 ^* Z9 L \3 c红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。6 e' L6 l# F8 B& l0 |
现在call xcorr 100次,耗时78s.% L) I1 i8 y! t, b" ~
0 P0 v5 P1 @6 ?( J, d- y! M4 c# d. U如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s. / w3 Z% R, P8 a) D* q/ u
* _6 E2 d; Y8 o& l( y |
|