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

楼主 |
发表于 2022-9-24 23:54:10
|
只看该作者
本帖最后由 雷达 于 2022-9-24 23:57 编辑
5 E/ Y, N* [# i4 _4 `; Y
# W! h) J$ ~+ K {# ^9 {! E( q e# w- \6 x5 x' c, l4 ^
void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
( C$ f, N o! F+ O- {. W. C3 y2 \{
6 z4 Q7 m- v" R comp temp, xtimesy;& g. ~6 O$ R- Y- ~; e
xtimesy.re = 0;7 y5 v0 F1 ~) i3 [9 ?3 h2 r
xtimesy.im = 0;
/ [4 c/ J1 Z4 H$ [1 L7 L* C int j0 = lenB - 1;, J4 Y$ R% @4 }' \; F
int i, j, i1, reali;, j$ B7 i# e$ |8 D, {6 V
if (lenA % 2 == 1)
8 ?4 Z0 E, k6 J7 ]. V: \: e reali = lenA + 1;" s, F, s6 n' s6 _
else$ g H+ h9 S( ]7 y( y6 H
reali = lenA;: @0 E; @1 H; i8 |. R) Y
reali /= 2;
, }4 @( \! c3 v' Y% d, v) I
9 r2 R8 S/ h+ e( P W" a: [ int nconv = reali + lenB;3 N% b/ F4 }/ Z. ]( Y; l" s. `( [2 {
//#pragma omp parallel for
% _, r% q0 ~' j* J% q- A for (i = reali; i < nconv; i++)% |1 R j, O, V, \4 v# H5 k+ T8 e7 H
{
( `! l$ v& v' f( ~$ { temp.re = 0;
6 H! F" i. N$ }) Z" k! Z: d temp.im = 0;
; u5 L2 b+ W' U( K4 c6 n; S2 e: y i1 = i;
Y4 T8 F8 ?( @ for (j = j0; j >= 0; j--)0 F; o8 D3 ^% |$ q
{' j8 _/ k3 r) b# r
/* floating date operation */8 A+ Q8 I7 b$ ?0 f4 j1 N
}
* ~: L4 [0 H) d3 M. p2 |4 W, d* l5 P- H }
. _( _2 B, l9 U& s) U/ n0 c" `}
2 @" i3 l3 T+ O; t/ T* r+ Q1 U8 v5 v7 A3 Y7 ]1 o8 C
xcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样
; T# @- [; u' H$ t
& k& N# v" T( h+ _, A, N红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。* C4 k' w' L* n* d
现在call xcorr 100次,耗时78s.
3 V* I4 f# L9 V. ]6 c$ q* Q0 P/ R# E6 y& g0 f! Q0 q, w, E+ P
如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s.
4 b* j& O- D9 X9 ^5 C+ o/ U4 z. o
/ D0 {% i! w3 {# B" V( ]9 O: y1 g% K |
|