设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2022-9-24 22:54:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    C++ 比 Octave 慢好多,怎么破?
    6 c" ^0 G, y4 M/ R+ w8 C% {
    - E# C; m+ Y: J" a, n; [自相关两层循环,内层循环涉及浮点数计算,试验了一下把内层循环内部全都 comment out 只留个壳子,  但空的内层循环本身就把速度拉下来了,看来问题并不在浮点计算。, e. z# h( i9 E$ _2 Y' g
    ( h% J: Y# n- ^' w8 ?
    速度优化问题真的很有意思啊。
    3 ~1 X8 H; K! A" `& P% i: G: H
    % N( [! A# V2 Y% U, _欢迎大家继续讨论

    评分

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

    查看全部评分

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1949 天

    [LV.Master]无

    沙发
    发表于 2022-9-24 23:04:16 | 只看该作者
    拉下来?拉多少?; r: a4 k& a5 }4 k
    把代码贴上来看看?7 K& V* G3 h2 O; @" i3 c

    5 {( P5 L; e" V3 h难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    板凳
    发表于 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 编辑 2 X. E/ r' O; M/ d4 I3 G
    数值分析 发表于 2022-9-24 23:04& Y6 i7 r5 ?1 l# Q3 A4 |
    拉下来?拉多少?
    & j5 U+ B$ u$ y! u6 x: Z把代码贴上来看看?

    . r0 J' o# |" ]1 R
    - A: |' H3 r/ E6 n5 lvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB), d8 D7 {2 u9 r  B! E# [
    {' s/ K) y1 v" ^! Y, `
            comp temp, xtimesy;, ]2 V' c/ V- A
            xtimesy.re = 0;
    5 f. e$ e2 a6 R        xtimesy.im = 0;: O# P' q9 B& r- o7 I
            int j0 = lenB - 1;
    9 I+ z2 U& `" e+ u2 p        int    i, j, i1, reali;
    , i, _- Y$ j3 p; t6 Z  e        if (lenA % 2 == 1)( g8 {1 [+ w/ J; w, Y% x9 x
                    reali = lenA + 1;
    3 Q6 E$ a( A6 R7 R  C        else) j* |9 i+ p, d0 `0 |9 X
                    reali = lenA;1 L" m& G! C/ s2 {% t" E0 M
            reali /= 2;  x4 ^9 i% j+ \4 g5 U0 t7 ~7 A
    ( j: M0 S) a' i7 X! Z
            int nconv = reali + lenB;4 Z3 W: N5 y7 p- U8 J$ I) C3 l( |) H
            //#pragma omp parallel for
    ! S; n9 ?  J# ?3 ]6 w0 _8 T' ?( o' W        for (i = reali; i < nconv; i++)
      B. m% u% ~, \7 T# a0 T( B        {
    + N0 \/ Z/ K, @0 h, i$ M; s6 P                temp.re = 0;
    ' K) z# ^4 {4 u. z7 n* _0 Z                temp.im = 0;' C6 X7 f  v6 B1 }$ u7 m6 m
                    i1 = i;( o: ]) q3 t6 ~9 W) e5 A7 J! Y
                    for (j = j0; j >= 0; j--)* [: i7 s- ?( w- x
                    {
    3 ~+ I+ d* z  ]2 k5 ]                        /* floating date operation */
    6 h3 N! B. I- Q/ z                }
    + _* W. K$ j3 ?4 l
            }: @7 h+ D9 e4 `, l/ m
    }8 Y3 o; l1 x9 T- t: I, C
    5 w! V  k* p' r5 a
    xcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样
      C- O) n$ g3 F; b0 r( Q2 A: X9 e+ t* y! F! n; ~" h$ H/ ~
    红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。. k: Q+ l5 j+ d% |
    现在call xcorr 100次,耗时78s.2 S. y8 I  }) m3 V, \- s) W8 w
    ! ^& P$ \4 P  x0 r+ `
    如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s. 3 @/ _* y9 T( d5 j; L
    - ~. S" `# `; W1 R
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    6#
     楼主| 发表于 2022-9-25 00:17:17 | 只看该作者
    风雨无阻 发表于 2022-9-24 23:33; B8 N0 W2 {8 h0 J- S! E
    Maybe Debug mode?
    / F& Z: C) E9 }. Q
    ( N/ x, j* I! g& S! w  b
    不应该,看我上面的回复。  N5 P6 L$ t2 a5 |$ ?/ I$ B
    8 r+ Y4 i: J/ T# i
    我更怀疑是 VS 社区版的问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1949 天

    [LV.Master]无

    7#
    发表于 2022-9-25 00:20:10 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑
    / z: [( r# I3 d
    雷达 发表于 2022-9-24 23:54
    # }) N. j0 a1 ~% avoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)" y0 t7 Q; u* _% d; l
    {
    % ?* ?) d+ p# V* @  X        comp temp, xtimesy;
    4 p; `, T0 K* M; J  N4 Y3 V5 @4 L

    + p. s4 X! O. V这个不是这么比的吧。。。
    ' w' m% O) T5 X% y/ U; `7 u
    4 [3 y  g9 w% V- f* Y% U您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    % E9 I- L$ W. l5 u3 |/ [9 g
    ; J" k7 \6 X1 j而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    8#
     楼主| 发表于 2022-9-25 00:46:56 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 01:09 编辑 8 k  I0 X' p+ V
    数值分析 发表于 2022-9-25 00:206 v( n$ K$ v4 V9 X! }
    这个不是这么比的吧。。。# {6 A+ g4 L6 ~7 s

    ! K$ U* g$ u/ J. ^' R  C8 ~您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。

    ( r6 x" R' j2 h
    3 f- f) V3 z% b# ^; O7 b有道理。
    + ~! p) e# e$ c- r所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,记得 numeric 库里有算向量内积的,我回头试试。6 g( l  D+ u* P+ C0 ^
    5 p; u6 n8 A2 w
    我先尝试尽量用标准库,一个小程序,不想搞得太复杂。多谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2022-9-25 01:27:53 | 只看该作者
    雷达 发表于 2022-9-25 00:46
    , M$ {$ _# N! Q0 T1 l, D- s' ^有道理。$ \- I0 \0 Z8 ?# X: Z2 X3 k, e
    所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...

    9 g. S* t% o4 B4 s4 q! F. d你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多4 W) Y; h, c. z0 u1 b( q3 h$ p
    Why is the loop instruction slow? Couldn't Intel have implemented it efficiently?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2022-9-25 01:48:51 | 只看该作者
    数值分析 发表于 2022-9-25 00:20
    " O1 e9 C# X$ M/ f# w这个不是这么比的吧。。。
    % Z; T4 m' [' i  Q4 J! N: g8 c5 z: t% K& i; S
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    而加上内循环,光jmp和dec指令就至少多执行了6000个

    4 g: a0 \' J9 W% ?. L4 A* |6 S5 A  j. i
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果循环这样跑,花不了多少时间。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1949 天

    [LV.Master]无

    11#
    发表于 2022-9-25 02:06:44 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 02:16 编辑
    ' M3 `% I$ X5 ?; i5 m- j
    沉宝 发表于 2022-9-25 01:48& e* c8 b( p6 \
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...

    - w$ k6 Y$ H4 Q' _: q* p2 [$ i4 i3 X7 z
    是的,兄台说的对。
    $ e' C; a% B/ z& R0 k0 ~% p* {6 H5 |& w" n, _# h
    其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。  U" k! Z% F' F2 {. D( ^* N2 P
    / z4 E5 G  H9 g
    雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。
    ) \" o0 r) V9 P+ `
    " l- ^0 ^% B3 J8 B+ W9 s! R: Y# A比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。( M1 b2 W( Z% m+ ^$ w8 P% g+ u5 h5 Z" d
    / P* u& i  t! T8 d* I
    当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    12#
     楼主| 发表于 2022-9-25 04:47:43 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 04:49 编辑
    7 t6 A! p) A, J/ F3 v
    沉宝 发表于 2022-9-25 01:27
    ! Z4 k0 u( Q" o; N6 B/ ]6 X你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子 ...
    . p" L6 v3 M6 K# x- s/ k% {
    ! b$ z* l7 n# P" v+ z
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差一倍,我上面这个差的太多了。
    2 \& X, N- R( x$ x6 \& q
    . F& |: h" _" F我已经完全懵了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2022-9-25 05:51:23 | 只看该作者
    雷达 发表于 2022-9-25 04:47
    0 [4 ~2 S- }8 [又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    1 {; Q$ _3 n% l, e
    时间差一倍的结果可以接受。
    / r- b& `- A. \9 A1 `5 b1 b3 D3 [$ b+ k+ y. Y# [3 v
    你还是用profile工具看看吧。现在大家都主观瞎猜。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1949 天

    [LV.Master]无

    14#
    发表于 2022-9-25 14:58:59 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑
    1 Y, ]3 P2 b4 i) l( ?
    雷达 发表于 2022-9-25 04:47# r2 R) ~) Q3 V8 d1 m
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

    % v* i9 Y9 |  T: z  F7 |( `* w
    ' x) ]8 W& P; |: r* N+ K" E  U  C) T. D

    8 `( T- F# c" F: \$ Z5 h$ \能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    15#
     楼主| 发表于 2022-9-26 01:30:03 | 只看该作者
    本帖最后由 雷达 于 2022-9-27 01:17 编辑 * o4 h! g6 N, C2 d. X$ c* g
    数值分析 发表于 2022-9-25 14:589 k  V2 C0 d4 ^, X0 m- }6 y) n
    能不能把这个也贴上来,看看和上一个有什么不同?
    " S6 m7 f% `' M8 m1 g2 p9 K
    理了理思路,重新做了一个测试。5 }0 j% X4 C" ^
    做了两个 vector 和 两个 float *, 都长 100000
    9 Q% y6 T6 Z3 X' a2 t8 o# k& S9 C外循环 6000,里面先做随机数生成,模拟真实环境,避免数据的 cache.3 L8 B  I2 L4 n) y, M( U$ U

    & X$ Z# l+ P% p* {) l* B内循环试了4种方法,
    & K% P  R3 m# A( Y: c+ B7 a1. 直接调用 vector inner_product 247s
    . N1 _3 U5 ^' f( A& |. h! T, V2. vector 循环点乘累加 237s
    - _8 [* w* Y, q3. float * 循环点乘累加 204s
    ' c4 K% i% ~( T  ?7 X7 h+ I4. 空循环 100000 次 202s
    * w, \$ `3 E5 H& g2 [; T. q, e, s' x: Z7 e4 A2 E3 [3 X( ]; k; b
    不做内循环 200s
    & @% L! Y1 p4 l2 F2 A5 S' g+ r1 ~% W) W1 }/ q
    你昨天说的对,内循环本身占比是很小的,大头在其他处理。& i, W! ?! G6 T8 c5 W  k- b
    另外可以看到, float * 循环点乘累加 并不差,比用vector 还更快。
    8 p4 n/ g6 S! ^, z/ O
    7 [. n2 ~+ [2 L5 K至于我那个原始程序,还有一些疑问,见5楼,其他都不变仅仅是有无空的内循环就有很大不同,这是不对的,也许有一些其他缺陷我没有看到。(也许可以改成 while 试试)4 ~' Y  g/ h/ G6 U: W

    , f# s  H. _& i* e, j1 l$ D/ Q(为什么下面我贴的  b1 加 方括号里的 i , 显示出来却是 b1 ?方括号 i 消失了。 LOL . 改成  jj 好了,原来 方括号里的 i 是斜体标志  LOL)
    ) P9 A/ J& U( I" x+ I: B5 ~* g' I/ ~+ w
            std::vector < float > vec1(N);
    - [. |& a9 t( f) x& `1 E        std::vector < float > vec2(N);0 c$ b# S0 p7 A* E( R, [5 V
            float* b1 = new float[N];3 `9 u( W7 |0 V: C! [
            float* b2 = new float[N];: Z' V, `  I9 D% Q6 v$ x8 N6 W

    4 B& ]3 S. i& v1 M& t4 k& W        for (int j = 0; j < 6000; j++)7 \+ g; u- Z- k# N& @( G  A
            {
    & B. \, S& |0 r& r- z                std::generate(vec1.begin(), vec1.end(), []() {
    ' \2 {$ f4 n. s/ I0 A9 {                        return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 23.23));;8 y( l& E( ^% `/ p( R
                            });9 r: U) z) K' a( X) r0 p
    ( I/ L* T1 C' u: J. f
                    std::generate(vec2.begin(), vec2.end(), []() {  V, W) Y. V( n9 F% y
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 24.31));;9 w$ V; J+ s- y0 U2 p5 Q+ n1 K
                            });
      z! m' V0 A8 v" M( P' F. P" L0 C4 |' Q+ ~9 z/ E% U
                    for (size_t jj = 0; jj < vec1.size(); jj++)& m6 x4 x$ P% d$ }$ \
                    {
    9 c6 T6 i9 l1 \- T                        b1[jj] = vec1[jj];$ o1 V: B0 t9 z) u8 J
                    }
    % @7 w$ V- q, M; x5 r2 L4 G* t
    # z7 w$ g( I! q! b( S                for (size_t jj = 0; jj < vec2.size(); jj++). |+ l2 P2 e$ [$ q1 k/ K4 l7 B
                    {
    0 q9 p2 P$ \; n) b$ f9 O: [, M                        b2[jj] = vec2[jj];
    8 f$ B  W# g% s0 j                }# ?9 i) I" j; o# N
    8 ~6 J3 q9 [" N0 W
                    //Method - 1  N=100000 247s  
    ; p! q0 h  X. R5 ]                //fresult = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);
    6 {7 X" c5 i3 p9 D                                
    & D1 }# @6 E- `  A2 v! C1 G                //Method - 2  N=100000  237s- Z/ L/ T1 O  s& k4 Z1 @/ j
                    /*
    $ g+ y8 S- L9 v, F3 N6 ?                for (int jj = 0; jj < N ; jj++): Y* C% ^7 K5 e2 w6 r5 z
                    {
    8 y, U' W+ M: g/ N                        fresult += vec1[jj] * vec2[jj];
    ) l+ a9 b3 e3 L                }4 ~( ~0 ^/ h4 t/ J
                    */& M) ]  r8 z0 v
                                    
    2 r' ~1 h7 j" J4 ^6 R, e4 \5 s                //Method - 3  N=100000 204s  B7 C4 l9 r, Z8 F0 n
                    /*# q4 g, B7 {) I% H. @
                    for (int jj = 0; jj < N; jj++)4 A6 V, _$ L& C
                    {% E+ d: _2 H, E9 \
                            fresult += b1[jj] * b2[jj];* |) V) p8 H/ a( J$ I3 u
                    }
    ( E. ^* _7 \! b. B$ F1 ]/ G4 V                */: U/ d$ _/ N& C, M0 i- ~

    + C8 }" H6 ~- b) o. j- P                //Method - 4   202s
    $ s6 z8 I9 q9 ]: @                /*
    , y* f0 O' ^7 @                for (int jj = 0; jj < N; jj++)
    % Q% ?: R) T4 B; J- @                {
    : l7 Y# U  T8 h                        
    7 w) ]- j. o  u  {4 L( i# s- t; Y' f                }
    7 ?: y- i( F1 p                */
    $ N$ y4 Z5 ~& S; A0 t                //comment out all methods, N=100000  202s                % o7 i( `8 I( N. P; J
            }
    . V  e6 N% W3 c/ w
    4 c  h- ^! b3 T7 a        delete []b1;) A8 s' K! s7 |
            delete []b2;

    3 e# Y9 e0 _" o4 {: u' h! n4 `0 U
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    16#
    发表于 2022-9-27 00:15:38 | 只看该作者
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    / R; I8 r) N* u
    , t$ U9 {2 H* W! N! ?; A2 A你第二个试验里面的j在循环里面又重新定义了啊,你确定真的跑了6000次?
    ; t- q1 d+ L: R- Q2 X5 ^* ^. J8 t
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    17#
     楼主| 发表于 2022-9-27 01:16:03 | 只看该作者
    机器猫 发表于 2022-9-27 00:15
    6 w' J9 C" d" s; x% `  [; s, r' B  ~瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    , {. x( k0 X" f3 \$ e
    - Y& Z8 `* T/ Q4 ^$ l, H2 S+ C你第二个试验里面的j在循环里面又重新定义 ...

    ( L+ P  }) |6 ?  E! X8 X$ b! e9 S内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL8 e! y4 {8 Z& h9 @) \
    # N" p- H  q: J  q
    不和它较劲了,瞎耽误工夫,我已经转到 ubuntu, 也准备顺便试试 avx2 向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    18#
    发表于 2022-9-27 02:06:58 | 只看该作者
    雷达 发表于 2022-9-27 01:16+ A% A5 ^* z8 _5 \
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL5 u, Z6 h# e% c% z: K! v6 s

    9 U& l& ], i2 c/ A: D; A  I不和它 ...
    # m4 o& b% o% O& @

    7 y, v3 b. H: s" |不过可以试试我说的register变量。前一个试验j是混在一堆其它变量里一起定义的,很有可能是在stack上,这样内存读写会更多,要是再碰上每次都需要加载cache就更慢了。
    0 ]$ R9 X) _# W, g$ P后面一个是在循环那里定义的,说不定编译器就把它优化成register变量了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    20#
    发表于 2022-9-27 20:29:50 | 只看该作者
    雷达 发表于 2022-9-24 23:54
    9 D9 r- c" M) _void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    - R1 R! [9 I( j! f+ R7 H  D{5 q& Q* B5 i$ i* D
            comp temp, xtimesy;
      L. l6 }: I0 ^
    这个code里面如果Openmp没有被注释掉的话,那么temp那个变量应该是定义在循环里面,否则线程之间会存在争夺写入那个temp的风险。
    7 y( f2 @: Y8 R内层for循环如果没有内部操作的话,编译时应该被优化掉了,和你完全注册掉整个循环是一回事。可能你的编译设置没有打开优化?7 F1 U) P8 ^- }( f9 b1 t
    VS社区版没有问题,我工作用的就是社区版,设置正常的话不会比商业版差。以前游说头头用Intel Compiler,他说不想花钱,而且差不了多少,就一直用到现在。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-10-21 19:21 , Processed in 0.038780 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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