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

楼主 |
发表于 2022-9-24 23:54:10
|
只看该作者
本帖最后由 雷达 于 2022-9-24 23:57 编辑
7 [- `6 _( k1 y1 B3 `
1 A k$ P8 F; x6 g ]7 ^; T' j9 o- b7 O3 T" @! T
void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
5 c9 d2 ^5 E8 e{
% z- A3 S) N3 H comp temp, xtimesy;) p3 [; L3 Q/ h
xtimesy.re = 0;. D9 z2 r7 F2 F+ L
xtimesy.im = 0;
4 a; V6 b8 G, R, a, T {: L$ X, ~8 x int j0 = lenB - 1;
3 c* g! ] S5 ^' C! a int i, j, i1, reali;
1 T4 ^5 G: [ P, d; ` if (lenA % 2 == 1)
) V4 M" O: o4 W1 F reali = lenA + 1;
$ t) K* T# J2 l! X, b else
n7 a% N# d. V1 x) a' h4 R reali = lenA;/ Z! ^; V1 h" Y( G, m; Q9 J& e) W' r
reali /= 2;% f* _. f9 C9 ^: I% z* _1 v
% b) n1 ?+ Z. E* N% v int nconv = reali + lenB;
( b) v& i' A" l: l7 k //#pragma omp parallel for" u H9 h: j8 r+ F$ R% {6 P# b
for (i = reali; i < nconv; i++)5 ?9 O" e" T) A$ z% o
{$ w, M" k$ F+ B+ z* {2 z
temp.re = 0;
$ {# |- m k) o/ [5 C, a J7 ^ temp.im = 0;4 V/ n" p3 J$ h; e, L) N
i1 = i;3 Y+ a9 ^, q: o, X$ l
for (j = j0; j >= 0; j--)- B2 O! c e, t ^/ |5 H
{
' U6 ~6 v( h( X( o. b /* floating date operation */
# z8 ~$ R2 W+ W" m( Q, c$ ` }$ f; L! ~9 ~2 y) a" n5 w& {; q
}
4 F: M1 |: k8 D}* a: q D! W5 c6 J6 \) e
F% [% Z* O3 T* Xxcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样 Q+ o [- s* R; ?2 S! F/ M, G' x, k3 H8 H
6 l& Z5 [; B8 y
红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。4 e# Z9 `# O& H% \6 R& s
现在call xcorr 100次,耗时78s.
- G: B k y( Q$ x' m- B6 u [8 X( Z# c2 H1 h+ r" j
如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s. 0 ^( F* h+ Q1 A
; r% }' q, L% y& J3 \
|
|