设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 6871|回复: 25
打印 上一主题 下一主题

[信息技术] C++ 提速的新发现

[复制链接]
  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2022-9-24 22:54:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    C++ 比 Octave 慢好多,怎么破?. S& K5 e. L) i. P; }" o
    2 e- i$ M5 i! C$ J/ W' T$ X
    自相关两层循环,内层循环涉及浮点数计算,试验了一下把内层循环内部全都 comment out 只留个壳子,  但空的内层循环本身就把速度拉下来了,看来问题并不在浮点计算。
    . G5 ]* C9 Z* ^4 x
    * S( o) S! A- O# @速度优化问题真的很有意思啊。
    ' y' O! Q3 ]0 w! W$ E& l" M6 P- B: k
    4 A# H) J" i) y欢迎大家继续讨论

    评分

    参与人数 2爱元 +8 收起 理由
    helloworld + 4
    住在乡下 + 4 涨姿势

    查看全部评分

  • TA的每日心情
    开心
    2025-12-26 03:23
  • 签到天数: 1954 天

    [LV.Master]无

    沙发
    发表于 2022-9-24 23:04:16 | 只看该作者
    拉下来?拉多少?
    9 g: H& d! `2 j! m把代码贴上来看看?
    . c( A' P/ D2 _: ?6 `
    4 `9 g; T3 D0 B5 c" B: P' U: \难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    板凳
    发表于 2022-9-24 23:15:41 | 只看该作者
    会不会代码本身的缺陷阻止了自动优化?另外,硬件配置和开发环境可能也有关系。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-6-14 10:13
  • 签到天数: 124 天

    [LV.7]分神

    地板
    发表于 2022-9-24 23:33:02 | 只看该作者
    Maybe Debug mode?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    5#
     楼主| 发表于 2022-9-24 23:54:10 | 只看该作者
    本帖最后由 雷达 于 2022-9-24 23:57 编辑
    , Q, H4 X* r; @* H5 Y
    数值分析 发表于 2022-9-24 23:04* q7 P7 a1 f; _; g; p
    拉下来?拉多少?1 Q1 Q- J7 n. H3 f" \
    把代码贴上来看看?
    ! w; E$ P( F4 K* v( n

    0 K* D* p$ G) r* _) p3 c* gvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)( R3 I- M# {1 u9 r$ h  A5 ^
    {. s& |! c0 O6 a
            comp temp, xtimesy;' D% T& ^& q2 M0 O% X! G
            xtimesy.re = 0;
    $ W2 c: V& o0 l* j$ y        xtimesy.im = 0;
    3 {7 W' e8 C( J) ~5 J2 P& X        int j0 = lenB - 1;
    0 W8 F4 ^, d( j, a7 A        int    i, j, i1, reali;, R% C0 {7 L6 B( |8 m( x* ?( O* B
            if (lenA % 2 == 1)" T, }+ a0 ^$ l1 ~) i0 j- E
                    reali = lenA + 1;
    , [; o' ^/ m: U        else5 T6 f3 x, B: S" V2 E$ `
                    reali = lenA;
    $ R0 r5 g& [8 n2 t1 O        reali /= 2;
    ' S' C5 s5 F6 D( G/ ^  @- s
    , t) X: e1 G% F  F  q0 ^# i+ _        int nconv = reali + lenB;
    5 I. ]1 `. h/ P( F- O        //#pragma omp parallel for  b$ Z4 n" k2 g9 O
            for (i = reali; i < nconv; i++); |& {% `7 v  z' }; @5 d' ]
            {
    5 p% N- X. d9 ]* Y7 R: t6 v                temp.re = 0;. C- Z  ]; k' x! d. L
                    temp.im = 0;1 N. w2 G) K1 M
                    i1 = i;& g4 \7 o6 R7 k* R, z
                    for (j = j0; j >= 0; j--)
    2 L' r/ {& q& C, J! K                {/ t9 z; S3 v: y$ x6 S
                            /* floating date operation */
    2 ~. w6 I9 `, T1 j& b4 q                }

    9 E6 ^0 T6 I: n6 V0 i        }
    5 `2 ]6 {) w; A7 V8 \/ R5 G}. Q5 X1 y( E+ {$ c
    & h- W$ m, e& q* d) S/ o. P
    xcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样8 X' Y0 r1 l' R* M9 T" E7 a. ~
    # e5 k0 D8 y6 a. p) C
    红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。3 H. q" N9 R- V5 ]* c' g
    现在call xcorr 100次,耗时78s.% p, a8 F6 ]: D0 g1 X

    * f8 ?3 }; @" M如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s.
    % ?! \6 A4 Q7 P4 B* K, i7 |& _/ Z% x; W8 p0 V; {7 n: k
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    6#
     楼主| 发表于 2022-9-25 00:17:17 | 只看该作者
    风雨无阻 发表于 2022-9-24 23:33
    # E$ b9 ^( i& GMaybe Debug mode?
    , G- N4 t0 O8 p5 }+ P
    , ~# C$ r0 q- c; d, w& M
    不应该,看我上面的回复。
    * A1 W, b# G. I! O$ a
    $ `% \. [, D, S8 A& |7 U" e! N2 {# o我更怀疑是 VS 社区版的问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-26 03:23
  • 签到天数: 1954 天

    [LV.Master]无

    7#
    发表于 2022-9-25 00:20:10 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑
    + x* `3 t2 F, v3 s6 F1 W
    雷达 发表于 2022-9-24 23:54$ `& p+ I$ v) b( Q$ f
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB). A; {/ m9 _( x: t7 @1 Z
    {
    : h+ H9 T5 a0 \1 P        comp temp, xtimesy;
    6 k! {. t- I3 R' i

    , _8 F  L; ?& C" o5 [/ N这个不是这么比的吧。。。% H/ D8 i# |6 ^; d

    : p6 f4 b- Z3 @您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。4 @$ x% s" C1 s0 s8 R+ D2 S
    1 {' C5 [9 p% ^7 p0 `8 ]
    而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    8#
     楼主| 发表于 2022-9-25 00:46:56 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 01:09 编辑 ; s. d0 M! t  n7 u- i' Y- I1 X
    数值分析 发表于 2022-9-25 00:20
    % I8 {& [! z6 y% I! X这个不是这么比的吧。。。5 ?3 V( ?0 v; B4 l9 L2 N$ r7 M

    4 ?/ @, `+ j# ^- [5 p* H: B您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。

    - a, ]* z3 u7 O/ m2 A( o% c, ^% j6 n1 U
    有道理。' M' H9 d3 T- R: g3 c) j
    所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,记得 numeric 库里有算向量内积的,我回头试试。3 X% B2 B" M6 _3 [7 `3 J
    2 L8 d6 @. Q& P; K8 N3 {
    我先尝试尽量用标准库,一个小程序,不想搞得太复杂。多谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2022-9-25 01:27:53 | 只看该作者
    雷达 发表于 2022-9-25 00:46
    4 o0 L6 @" x! q7 h/ I/ L2 q有道理。
    , E/ N9 a* p$ H- I$ E$ F3 R所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...
    * S5 v, i* Y% t" [/ S
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多
    5 a& E, G+ h1 P7 C. R! X, AWhy is the loop instruction slow? Couldn't Intel have implemented it efficiently?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2022-9-25 01:48:51 | 只看该作者
    数值分析 发表于 2022-9-25 00:200 Y; R" Y* d2 s! M( e
    这个不是这么比的吧。。。
    6 I7 z) b- G9 X" P; T4 [% c1 x9 N8 }
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    而加上内循环,光jmp和dec指令就至少多执行了6000个
    & z1 a3 @4 j$ a! a- E

    . [4 i- q5 N+ ^" l1 R9 X现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果循环这样跑,花不了多少时间。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-26 03:23
  • 签到天数: 1954 天

    [LV.Master]无

    11#
    发表于 2022-9-25 02:06:44 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 02:16 编辑
    $ J: n" U: V; P4 ^* |
    沉宝 发表于 2022-9-25 01:48; r: ?, X4 z. ~1 O
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...
    + q1 E6 `6 y6 A7 u, o* V8 L7 v

    ) b  C; N6 u8 G是的,兄台说的对。2 d5 ~" Q( \  M' p
    - m$ t1 u9 l# G
    其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。
    # u8 U9 N) H7 e+ n$ ~& }0 U% N8 i0 y
    5 W* O5 C. k- M) i6 O  m# e! ~雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。# s# ^3 b: f& x4 n
      {, G. O6 m0 G
    比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。  u5 R0 \! ^0 _& t
    # I, A7 P% R( {: O- r: H# A+ H
    当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    12#
     楼主| 发表于 2022-9-25 04:47:43 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 04:49 编辑 - h: p; ]1 W% N$ h/ a% n
    沉宝 发表于 2022-9-25 01:27
    / n+ i- F' i; g  W你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子 ...

    $ j9 |' A, }8 F6 @; c% Y. q2 c7 a% h& ^
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差一倍,我上面这个差的太多了。# t6 b" n6 ^* }5 A0 }, c2 v

    2 b3 D; C9 r! u我已经完全懵了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2022-9-25 05:51:23 | 只看该作者
    雷达 发表于 2022-9-25 04:47
    : l- j9 H; X% l! B$ R3 [- G: @又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    # O, g8 g" r) ]- K
    时间差一倍的结果可以接受。6 q0 x' ?6 U- p+ G/ ]8 q
    * E0 \5 e" Q( Q/ g5 s+ D" H
    你还是用profile工具看看吧。现在大家都主观瞎猜。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-26 03:23
  • 签到天数: 1954 天

    [LV.Master]无

    14#
    发表于 2022-9-25 14:58:59 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑 " i1 f6 |1 c& t8 s9 O& o- p- j) A/ e; N
    雷达 发表于 2022-9-25 04:47
    $ j) B5 f" C5 b- x8 ^又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

    $ j+ }7 Z( U1 l# P0 t, f1 e& X0 n0 A0 M
    ' `. o  |) H4 k$ k3 L. F% f3 M

    3 X6 m6 f, \' J1 ]能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    15#
     楼主| 发表于 2022-9-26 01:30:03 | 只看该作者
    本帖最后由 雷达 于 2022-9-27 01:17 编辑   E! y, K7 o2 B- N4 D! r
    数值分析 发表于 2022-9-25 14:58) Q/ ~2 H4 e1 _2 h
    能不能把这个也贴上来,看看和上一个有什么不同?
    " c: N6 `5 f- A- f4 f- O( j) n- @: G
    理了理思路,重新做了一个测试。3 M7 c* U1 N$ L% z2 O6 M  R
    做了两个 vector 和 两个 float *, 都长 1000001 x" e% Q8 z- @2 k7 K! w+ z
    外循环 6000,里面先做随机数生成,模拟真实环境,避免数据的 cache.3 J* @4 U1 s7 a! |% ~3 }

    $ r% f9 }$ z9 i$ [" ?内循环试了4种方法,% r" J3 t6 j6 u/ H! U. E
    1. 直接调用 vector inner_product 247s 7 \0 C) C( P* d- y0 K) u
    2. vector 循环点乘累加 237s- f3 P# H" ]# j0 d: O
    3. float * 循环点乘累加 204s! V: }. h0 g& w( Q2 T8 G
    4. 空循环 100000 次 202s
    * Z4 u9 O0 c* {4 C( {0 b6 K0 I( Q+ I/ q0 O
    不做内循环 200s
    ! P1 f9 G# S& M/ f- j4 n2 k& Z+ `; S! L3 _) r. T
    你昨天说的对,内循环本身占比是很小的,大头在其他处理。
    8 t5 I5 Z4 Y8 e9 I( W2 x$ B% }另外可以看到, float * 循环点乘累加 并不差,比用vector 还更快。1 ~% p! [+ p/ \3 j& ?" r

    4 A$ u+ h; B$ _/ f+ K- {$ W至于我那个原始程序,还有一些疑问,见5楼,其他都不变仅仅是有无空的内循环就有很大不同,这是不对的,也许有一些其他缺陷我没有看到。(也许可以改成 while 试试)5 b- F* ^7 v- L1 O$ f9 V, g

    $ z. m3 ?9 U: u: A(为什么下面我贴的  b1 加 方括号里的 i , 显示出来却是 b1 ?方括号 i 消失了。 LOL . 改成  jj 好了,原来 方括号里的 i 是斜体标志  LOL)' b0 [1 v9 T) J! \0 d% R
    : a; d1 I6 M3 T1 B
            std::vector < float > vec1(N);: g5 H- F% c/ z9 V/ n, I
            std::vector < float > vec2(N);9 I' C# {: b& X# d- ~! P
            float* b1 = new float[N];1 J8 E% o8 n; _% z
            float* b2 = new float[N];4 w* `! p1 J: J+ P

    $ A5 {8 s* l$ l3 q5 g        for (int j = 0; j < 6000; j++)
    8 p3 p. v2 Q' K6 i        {- u$ f2 E0 k3 J5 H+ E3 _" x
                    std::generate(vec1.begin(), vec1.end(), []() {7 a  Q% @6 z  `! _5 L
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 23.23));;- c% S' t3 J/ Q* \1 f% W( e$ a
                            });
    0 a3 N" I- N5 Q: @8 s( d' J$ y- n
    9 j" E! m- R3 ~' b. k4 W' ?  B, G                std::generate(vec2.begin(), vec2.end(), []() {: L; |, v% M) w( \$ b4 r
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 24.31));;
    9 Z# Z0 k* _& p7 e/ e7 e                        });5 ]" ~- j# ]# A

    : f" x: e1 X1 {9 g/ X- }                for (size_t jj = 0; jj < vec1.size(); jj++): Y7 z6 i6 y" i# W
                    {6 {& _' n. A0 M
                            b1[jj] = vec1[jj];! l' ?& M( H; P% O
                    }
    ( ^* m/ f5 }0 {7 }4 x. j# j- q% ^' _5 e: _; @0 i
                    for (size_t jj = 0; jj < vec2.size(); jj++)
    2 x0 d2 D0 W5 Y6 m                {
    0 T1 C$ h5 F0 X. P/ u$ ?* p, u                        b2[jj] = vec2[jj];
    1 b' ~- I# V2 ]0 w                }
    ; M( B) L9 g4 @+ Z! V% y
    6 T6 E8 y9 u2 b# |# \$ u                //Method - 1  N=100000 247s  
    8 P4 n+ w. l8 X                //fresult = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);: v  E# I6 o2 |# a( m
                                    + p5 M2 M3 X* R/ |' C& d- r3 i  N
                    //Method - 2  N=100000  237s
    3 @0 I5 G. k  f3 {                /*
    7 k+ C: y2 U( W  c; s$ C& X5 x                for (int jj = 0; jj < N ; jj++), l  b6 |* F. R6 W
                    {1 X) \0 H9 Q0 J3 D, ^  n) S5 Y! o
                            fresult += vec1[jj] * vec2[jj];3 w! w! ?; k/ J8 |
                    }
    , a" G# @% s' k, `* g                */0 o5 T' A# j% q% C
                                    & G6 r- g$ y$ ]/ }4 a! _& s
                    //Method - 3  N=100000 204s0 X( h( h) Z8 x5 C" D( l3 h
                    /*. \7 v: d9 }5 F
                    for (int jj = 0; jj < N; jj++)
    ( O) R/ |2 R/ R4 R- ~                {
    $ P% H" G; l  ^' G* `! _                        fresult += b1[jj] * b2[jj];
    4 ^& Q# A6 |8 [2 G& s# E                }
    , F/ z6 G6 V7 o/ f$ E9 L3 Y                */! ^9 y( p+ L' v; t

    % x; E* E* _+ P1 C/ f* _9 i                //Method - 4   202s
    ( B! L$ W3 w, G% X5 q& k: T8 c                /*
    8 m+ e# i7 @! {* Y7 v6 j                for (int jj = 0; jj < N; jj++)  Z" l& \; H$ l7 d/ T  e
                    {
    3 s  I( f% h- j. |+ r# l/ a                        
    1 s" n, B  X" L) |0 q, c                }- W; k5 H$ D' X' I
                    */
    $ `  o& T- ~" ?: Z! y                //comment out all methods, N=100000  202s                8 H2 M" N1 y4 w  m" Q4 @
            }. {, O: E7 d( E
    " n5 i: ]2 t. C0 n/ x
            delete []b1;: k% @+ B, F. R5 R5 V7 W
            delete []b2;
    9 `' S+ u3 N# N' ?1 B. ~# y
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-2-8 10:08
  • 签到天数: 2 天

    [LV.1]炼气

    16#
    发表于 2022-9-27 00:15:38 | 只看该作者
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?0 w1 [& \. U3 H! G/ _( Y$ q: n; e
    8 ^1 M' q+ Z: j4 V% H
    你第二个试验里面的j在循环里面又重新定义了啊,你确定真的跑了6000次?9 }( h1 b. j5 ^: @2 B: b2 u
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    17#
     楼主| 发表于 2022-9-27 01:16:03 | 只看该作者
    机器猫 发表于 2022-9-27 00:15  t9 Q  g& I2 j: G" f% H% ]
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?" h; O- S/ Q& M! U& t  m" N+ M

    , E0 U. s2 F" g$ r3 O1 {你第二个试验里面的j在循环里面又重新定义 ...
    ! O; u/ b3 O. f& n7 Z
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL+ V1 r) ]& _* ?# Y# d" _9 \
    ' @" t9 i. q( @( A) _  P
    不和它较劲了,瞎耽误工夫,我已经转到 ubuntu, 也准备顺便试试 avx2 向量化。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-2-8 10:08
  • 签到天数: 2 天

    [LV.1]炼气

    18#
    发表于 2022-9-27 02:06:58 | 只看该作者
    雷达 发表于 2022-9-27 01:16* ~7 l. ?  e! b) ]3 ]* y7 b! ^
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL
    * y( T2 X1 F! u
    $ z0 c' U( ~6 a& L9 Q8 t不和它 ...

      s5 z4 t: y; v3 T( H, q8 k
    ; C: F  Q7 c4 T3 J$ M3 Y不过可以试试我说的register变量。前一个试验j是混在一堆其它变量里一起定义的,很有可能是在stack上,这样内存读写会更多,要是再碰上每次都需要加载cache就更慢了。
    3 l! J1 y- q/ h- f% o7 [后面一个是在循环那里定义的,说不定编译器就把它优化成register变量了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2022-9-27 07:25:57 | 只看该作者
    一个无关问题,为什么爱坛的帖子里在我这里有好些奇怪的东东在里面,是防拷贝措施吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2022-9-27 20:29:50 | 只看该作者
    雷达 发表于 2022-9-24 23:54
    ; n& f3 u5 S$ Q; d! S- ^9 Fvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    2 r$ }; P* P1 w1 G0 X{2 z" S' t8 D  i* {/ x( V
            comp temp, xtimesy;

    6 S0 I/ d$ x/ }; l+ N这个code里面如果Openmp没有被注释掉的话,那么temp那个变量应该是定义在循环里面,否则线程之间会存在争夺写入那个temp的风险。
    & S5 a/ Q% @0 T4 b0 j1 @/ S内层for循环如果没有内部操作的话,编译时应该被优化掉了,和你完全注册掉整个循环是一回事。可能你的编译设置没有打开优化?
    ( D* P0 A( n6 ?' ^5 AVS社区版没有问题,我工作用的就是社区版,设置正常的话不会比商业版差。以前游说头头用Intel Compiler,他说不想花钱,而且差不了多少,就一直用到现在。
    回复 支持 反对

    使用道具 举报

    手机版|小黑屋|Archiver|网站错误报告|爱吱声   

    GMT+8, 2026-1-18 17:40 , Processed in 0.039707 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表