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

楼主 |
发表于 2022-9-24 23:54:10
|
只看该作者
本帖最后由 雷达 于 2022-9-24 23:57 编辑
6 b6 r, s3 F7 j2 i+ L& Y; c3 p& z
x5 @! Z! b, x! x& C$ Q/ _1 O9 D% _3 c( y) X
void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)' n5 Y* c1 s3 D1 }) e$ U
{ N$ R; ^; F# u% ^$ T6 M5 c
comp temp, xtimesy;# P( s8 y+ k- j9 y, s: n
xtimesy.re = 0;
! Y9 w5 t+ s j& f; P0 F9 `9 s xtimesy.im = 0;0 j4 h8 ?" x u& G' H1 j
int j0 = lenB - 1;
7 q2 t. K5 _, L; N5 n2 X( @ int i, j, i1, reali;3 m7 z x5 k& R5 I! E" V
if (lenA % 2 == 1)2 W" p) o8 s2 U7 M7 U! S
reali = lenA + 1;
* j, ]( i, [9 j( J else |6 R" H& s. p6 D
reali = lenA;/ N7 o6 Y. y/ h# H& C$ m b6 j
reali /= 2;
. y5 {5 ?% W u( ^% H j0 B2 U; y
0 E( \$ ~5 d. ~) G" d$ D int nconv = reali + lenB;0 g! G+ Z; q+ E
//#pragma omp parallel for1 C5 p: c( j# m8 |$ K) |5 w5 \
for (i = reali; i < nconv; i++)3 Q4 |& l: ]7 I) n5 U4 G
{ @$ x- X4 E) u# ]3 t$ F$ t$ c8 k
temp.re = 0;3 J% C! {+ D- {3 ~, k" P
temp.im = 0;
' T% A+ O# |, p: c i1 = i;
( {' m, j, c' t$ O7 p- M for (j = j0; j >= 0; j--)1 U* [0 e! h5 x+ Q1 |
{
, [6 F0 Z8 ?# E7 E; R* v, ^# B /* floating date operation */9 F$ d9 a/ k) ~. a1 Q; D! h7 z
}0 s- m5 t- z# V/ p+ C( z p
}
2 e% z5 q( w. z1 \6 @}, a/ H' I4 g' \
. @! g/ A5 Q. B- l6 Zxcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样
8 M9 H& H+ u7 C* o! E: @; s: G, K1 K, Y5 q3 C5 m
红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。) W; O9 C8 h' B0 V" b/ W& W
现在call xcorr 100次,耗时78s. H9 d4 E+ M& u, K+ z+ X& J% n5 u
7 `9 R4 f& J) Z: ]1 T5 `如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s.
e+ w& c/ v5 x. ?. M' s
4 F, o. q' ~( K0 t7 y7 f' n |
|