设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2022-9-24 22:54:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    C++ 比 Octave 慢好多,怎么破?
    ) ]1 [) M# m- U% d
    8 C2 G+ }7 f# @! {! x! b8 @: l( i自相关两层循环,内层循环涉及浮点数计算,试验了一下把内层循环内部全都 comment out 只留个壳子,  但空的内层循环本身就把速度拉下来了,看来问题并不在浮点计算。# G9 f2 M3 O' r0 b- [

    ( z6 O; s. B( P# U+ b速度优化问题真的很有意思啊。! V* ~9 z1 |( [' n6 @
    ) G& w/ S+ ?, P" Q  i6 ^
    欢迎大家继续讨论

    评分

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

    查看全部评分

  • TA的每日心情
    开心
    昨天 00:37
  • 签到天数: 1909 天

    [LV.Master]无

    沙发
    发表于 2022-9-24 23:04:16 | 只看该作者
    拉下来?拉多少?
    % i! ~! y0 a  f- j把代码贴上来看看?# V; ~- [4 [. {, g2 M
    ! _% K: D% Y0 R# U
    难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 00:52
  • 签到天数: 123 天

    [LV.7]分神

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

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    5#
     楼主| 发表于 2022-9-24 23:54:10 | 只看该作者
    本帖最后由 雷达 于 2022-9-24 23:57 编辑 ) I( ^) c/ K5 [: F5 a
    数值分析 发表于 2022-9-24 23:04
    : j0 ?" `0 c. Q* h拉下来?拉多少?0 ?. D! J* U. ~8 ~) p% ]
    把代码贴上来看看?

    & z5 K7 R& x6 w2 Y" a1 Y) {7 V6 S! b$ n9 D$ F; o! K5 v
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    + J1 Q" V9 N& Z: x{
    & z/ ~, Q1 e5 q7 ^8 x* v, z/ [5 V$ x        comp temp, xtimesy;9 E/ O' y& H  X
            xtimesy.re = 0;
    2 W6 E8 X4 g8 O" o$ e+ A        xtimesy.im = 0;7 R4 }' \3 D$ f: G" b+ a+ F
            int j0 = lenB - 1;  U5 j* x/ ^, g* R) Q
            int    i, j, i1, reali;# h* C; b3 A3 k
            if (lenA % 2 == 1)$ I% Y) f9 V4 h9 m
                    reali = lenA + 1;
    6 n, a! U3 l4 O8 a4 Z7 O        else
    4 h9 K! [; e3 g! @8 I' ?                reali = lenA;; H& i2 @/ Y8 y6 H. v. d5 @& J' j0 ]
            reali /= 2;
    $ p0 r. D# E: {) q: W2 q1 ^4 z& N; w
            int nconv = reali + lenB;
    7 ^$ f3 i( e6 t        //#pragma omp parallel for1 d1 b( H2 E/ z
            for (i = reali; i < nconv; i++)2 O5 n) j; x0 \
            {' B% x& I" _9 l; X& o
                    temp.re = 0;: Q0 L, N( X& z# z
                    temp.im = 0;
    0 l( s# S7 `! R4 D                i1 = i;7 A' n! g: H$ o* f% J* b
                    for (j = j0; j >= 0; j--)( y+ G0 X% |+ d9 A% ^5 z
                    {
    5 o- C+ B, P4 G& R) S2 q7 P                        /* floating date operation */  S/ L0 q/ D# ^3 ]* _2 J
                    }

    ' ^4 ]% i! d. I( Y  l8 ^) c        }: y5 p' D/ z. X( i# T
    }
    4 l$ z, t( Z) q9 \$ n) ^$ x, r3 j& m+ z2 L; Z$ ^% |! Z
    xcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样& r7 m. h- F: M( `* l
    / p: n& o1 x. ~3 a
    红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。
    " @3 z5 l# R  i/ C现在call xcorr 100次,耗时78s.
    7 }' K- V4 z) w. D% D
    9 g7 s: o! l8 ]/ J* w, r6 k如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s.
    9 S( c2 F, E5 c% ^! }
    . w: U; p( y9 `  X# l' ~* \
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    6#
     楼主| 发表于 2022-9-25 00:17:17 | 只看该作者
    风雨无阻 发表于 2022-9-24 23:33
    7 w, [5 {  Y/ _Maybe Debug mode?

    0 b  P& O. n1 y$ [; t9 }9 c" A# z. u; T
    * `$ A! z8 i+ Z% S  L5 d不应该,看我上面的回复。7 N: \& g3 \# ~7 M7 S
    - z0 l& I, y5 p' i9 X; Z: z
    我更怀疑是 VS 社区版的问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:37
  • 签到天数: 1909 天

    [LV.Master]无

    7#
    发表于 2022-9-25 00:20:10 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑 0 z3 T$ I# Y% j  q3 o
    雷达 发表于 2022-9-24 23:54. \! C# w- J5 @0 p0 [4 ]  F8 ?
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB), @% ?& e' z6 X) E) O
    {9 }' }: J) h6 ]  R
            comp temp, xtimesy;

      J' R" N  t4 T+ d# e7 o( p
    5 ]9 U( p2 q2 k+ b这个不是这么比的吧。。。; A" e6 V( J: u, b2 Z7 H  L$ Q* ?
    ! j$ w) p% n% v$ C
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。: o0 {( f; i& K
    & E2 S- W' B  h0 L) B& n3 ]
    而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    8#
     楼主| 发表于 2022-9-25 00:46:56 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 01:09 编辑
    ( t/ S' ?7 ?! L* E
    数值分析 发表于 2022-9-25 00:20% w# G; O# E, [+ v* m
    这个不是这么比的吧。。。. n" \0 z$ X. O- B
    & Y, l  O  ~4 R! k
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    6 E" j; D' J6 c7 P0 v8 n
    % b+ M4 b+ ~: ?: I: N0 o
    有道理。
    , K! w6 w$ i5 F/ \8 v( `4 y所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,记得 numeric 库里有算向量内积的,我回头试试。) _* F$ o% E6 }7 G4 N+ R  u0 b* x8 H

    3 B2 I. K0 c6 C1 }3 e# q; S& o我先尝试尽量用标准库,一个小程序,不想搞得太复杂。多谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2022-9-25 01:27:53 | 只看该作者
    雷达 发表于 2022-9-25 00:46
    9 r8 ~# [( e6 e! ^( v有道理。
    2 ^, I0 z3 T8 I所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...
    9 h" S+ O3 g! y' q
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多
    $ k2 x+ T8 S) h9 B0 W3 f/ J, N& yWhy is the loop instruction slow? Couldn't Intel have implemented it efficiently?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2022-9-25 01:48:51 | 只看该作者
    数值分析 发表于 2022-9-25 00:20) ^' j- t- g% V7 v
    这个不是这么比的吧。。。* o0 L' h  i$ _; i& P6 A7 t
      i1 E4 x& G' j: @
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    而加上内循环,光jmp和dec指令就至少多执行了6000个
    0 a/ p  L" U' D  I" h, f  e. A
    0 Q3 Y8 `# T7 l
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果循环这样跑,花不了多少时间。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:37
  • 签到天数: 1909 天

    [LV.Master]无

    11#
    发表于 2022-9-25 02:06:44 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 02:16 编辑 ) v9 C! i9 J8 s& ^( q8 N9 `1 t3 S
    沉宝 发表于 2022-9-25 01:485 D/ N* h  m+ h1 j! n: \
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...
    ' |+ L1 z; I0 J1 q
    0 m1 e- ]' L/ \5 E: f1 [" w# w
    是的,兄台说的对。# ?8 N: ]  w, T" b  l; s# ?

    % z' N4 g3 x8 u( V( i7 J" Q其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。5 t4 l' S% j$ p2 p5 o( x
    ! s. l- c, c, i! s
    雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。
    ( I. u/ c( R1 C2 C5 k* |1 O& ?9 P4 E1 a, U
    比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。0 S' \+ i8 J& }6 Q$ n6 e

    . C5 Z' N- }7 G" G4 p# B当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    12#
     楼主| 发表于 2022-9-25 04:47:43 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 04:49 编辑 ( }7 R) a, \2 _1 Y% r
    沉宝 发表于 2022-9-25 01:278 |( z, O4 L0 S
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子 ...
    ) t7 d  Z& E* Q- ?

    1 E5 C% s: F7 Q' j又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差一倍,我上面这个差的太多了。
    / s! s5 A# J$ d! u. W$ _
    # m7 V* ]* x) q我已经完全懵了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2022-9-25 05:51:23 | 只看该作者
    雷达 发表于 2022-9-25 04:47
    . z/ i9 s( ~7 f9 a: a: \$ g# Q又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    # b, e  K* J. i) d5 C3 O
    时间差一倍的结果可以接受。; g; I7 P# y0 U6 M1 e" l
    9 v1 I* J' p* y0 {0 W% Q
    你还是用profile工具看看吧。现在大家都主观瞎猜。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:37
  • 签到天数: 1909 天

    [LV.Master]无

    14#
    发表于 2022-9-25 14:58:59 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑
      ^8 h4 t: z  @+ M$ c
    雷达 发表于 2022-9-25 04:47: |% n( g6 @5 m' D
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    / Z( z$ Z0 j- B# G3 h/ ?9 M

    1 C( m# b/ t# i; P
    - x$ q, P( t. C) T
    2 Z- N8 x' l3 E* I6 U& f能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    15#
     楼主| 发表于 2022-9-26 01:30:03 | 只看该作者
    本帖最后由 雷达 于 2022-9-27 01:17 编辑
    + g8 d4 B+ j* k" ~# ~) n+ D
    数值分析 发表于 2022-9-25 14:58! z  [- ^& u0 _) U4 @
    能不能把这个也贴上来,看看和上一个有什么不同?
    # e2 \7 d( g0 z) i
    理了理思路,重新做了一个测试。! D5 M' |  A: M
    做了两个 vector 和 两个 float *, 都长 100000- t) U; `9 f1 |6 |: C1 m& B6 E
    外循环 6000,里面先做随机数生成,模拟真实环境,避免数据的 cache.
    ; D* _& J7 P9 }- L. u/ Q
    . h2 }% n  i. A$ a0 r内循环试了4种方法,* v) g0 s8 m$ Y9 J& E) P
    1. 直接调用 vector inner_product 247s 5 Z2 P7 b3 c6 C* d4 f+ }0 K
    2. vector 循环点乘累加 237s7 t& a: k# G# G% y
    3. float * 循环点乘累加 204s3 v/ m* k5 f* q& r
    4. 空循环 100000 次 202s! ~6 {* M$ l' ?8 p; `

    4 {6 @7 E' M+ w! r5 o不做内循环 200s
    7 z, \4 K. q" r  n1 q- N% l- Y  e2 _  M. _5 `+ ?- S
    你昨天说的对,内循环本身占比是很小的,大头在其他处理。$ e' m1 @2 k4 `4 z  P
    另外可以看到, float * 循环点乘累加 并不差,比用vector 还更快。& K. t7 t; j! ^- s% _

    ' h* m% w0 i, m$ ?8 g至于我那个原始程序,还有一些疑问,见5楼,其他都不变仅仅是有无空的内循环就有很大不同,这是不对的,也许有一些其他缺陷我没有看到。(也许可以改成 while 试试)
    4 w1 e2 R' q" F7 A. q
      @2 R6 _  Q/ C2 x1 c6 R$ p. q(为什么下面我贴的  b1 加 方括号里的 i , 显示出来却是 b1 ?方括号 i 消失了。 LOL . 改成  jj 好了,原来 方括号里的 i 是斜体标志  LOL)
    3 y, q8 q4 j& h* P9 r3 `0 O8 G" S/ s6 s% t
            std::vector < float > vec1(N);
    ( {' V4 q! d2 g        std::vector < float > vec2(N);2 U* D& ]. q- r5 ~2 w6 |
            float* b1 = new float[N];
    # {: p0 A( |; L        float* b2 = new float[N];
    : \9 z& a+ h5 m" Q; T; A; A+ l; O. f
            for (int j = 0; j < 6000; j++)4 m6 Y: y& w1 [; R) f8 K( u( a
            {) P  d% A+ y% z1 B# Y
                    std::generate(vec1.begin(), vec1.end(), []() {2 E( X6 W8 [: f
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 23.23));;4 J# ~( d" s* z1 a& Y. G; w( A
                            });
    4 v& h( ~. C  d9 q" b' F1 N4 Y
    * b7 S! m- ]' N: ~, M0 Y: [8 }                std::generate(vec2.begin(), vec2.end(), []() {0 W$ n8 i: i: i8 |; Z& i8 C; B
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 24.31));;$ ?; d! z; J6 r" |- g
                            });
    % F9 T# ~4 ^: q. L+ P( l+ o: X% L5 `- j3 d# r2 L3 c& J
                    for (size_t jj = 0; jj < vec1.size(); jj++)7 Y# b5 y1 r: r1 c- j
                    {
    - A( E1 ?0 Y* N6 b- r                        b1[jj] = vec1[jj];
    5 ^: e' c: W/ u" r! \" e                }
    3 ?: r+ O5 G5 d6 u+ P3 \! G$ O3 k$ g7 C& H
                    for (size_t jj = 0; jj < vec2.size(); jj++)
    6 j9 f/ s3 d3 i4 O                {( J# }0 z! Y8 _# d& E, u  r
                            b2[jj] = vec2[jj];/ A4 i3 K: {& D  f0 s7 M3 T
                    }5 m1 m7 Z, L4 P) o' W" R7 \

    5 y; b! j9 r$ [% h                //Method - 1  N=100000 247s  ) K2 e; x% Y* i8 v9 y2 V; `# K
                    //fresult = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);
    - U& \; J' j' L( |" b                                
    $ |/ F  {. ^( y- r5 ^                //Method - 2  N=100000  237s
    3 x  x  U+ n4 S2 C& N# E0 C                /*5 ]: P3 E6 i* |# o) a2 g0 \% a
                    for (int jj = 0; jj < N ; jj++)
    0 s$ ^6 R# t) o8 O. z2 e                {2 E& X8 s' s" [6 M3 i
                            fresult += vec1[jj] * vec2[jj];
    , \) r& o9 D& ]* y) X                }
    & Y. q+ t+ H) U0 P                */
    ( C- ~) x$ F( M  L                                  z! b4 R0 t3 B
                    //Method - 3  N=100000 204s
    - f" `8 o) B2 l3 ~0 _( S. w) s) D                /*
    & S% c9 B) q4 G) @. p                for (int jj = 0; jj < N; jj++)2 [  Y# }& ]6 o0 z
                    {: i0 E) w  g; U, _) l. ]/ r
                            fresult += b1[jj] * b2[jj];' c9 z( C! _' v, o. x& S) _
                    }
    # r8 {9 N! w' o: k  u9 W1 Q                */% L" Q4 Q3 `7 a# f
    $ G" S7 _! \; K, K3 Z. }7 x9 H7 y2 T
                    //Method - 4   202s
    . N- i! P0 Z5 S. X                /*1 u/ U' p& ^2 K1 C+ e! L$ I0 B
                    for (int jj = 0; jj < N; jj++)9 B& J8 U4 I0 _* @# J
                    {6 _4 ~" J4 l  F% F& v
                            
    7 m5 Z6 k. b! K* G# a! f6 J                }
    # r6 s- O; p! X# i2 U* m' U                */
    , T6 c8 I# G; ^8 R                //comment out all methods, N=100000  202s                4 _/ ?# W7 |& C+ }& ^$ d
            }& ^. w6 H. H, Q

    ; D; e1 B; K9 s/ C; d        delete []b1;
    $ e1 R- `: z( V( X+ a  b        delete []b2;
    & s( N* g1 |! u- M
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    16#
    发表于 2022-9-27 00:15:38 | 只看该作者
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?. t, }( y1 ~  s4 O/ o
    ' ?2 ~! M% u( a: L3 H2 H. l/ H2 B
    你第二个试验里面的j在循环里面又重新定义了啊,你确定真的跑了6000次?7 L$ F6 T6 O) v" S! `
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    17#
     楼主| 发表于 2022-9-27 01:16:03 | 只看该作者
    机器猫 发表于 2022-9-27 00:158 h4 \) s1 z9 v; U/ K
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?- Z( W) n: `; ^. @  f, x( y, S

    ) q( u+ {, ?/ J* Y, c你第二个试验里面的j在循环里面又重新定义 ...
    $ G% G% L5 |$ ^  g
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL) u) T2 \7 O! |' ]: N+ Z
    ; a: }3 d# M& [
    不和它较劲了,瞎耽误工夫,我已经转到 ubuntu, 也准备顺便试试 avx2 向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    18#
    发表于 2022-9-27 02:06:58 | 只看该作者
    雷达 发表于 2022-9-27 01:166 z; x6 m) f) I2 ], B
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL
    5 z' b3 y, w% Q3 |  J# J9 A8 X: Z( d$ o+ ^
    不和它 ...
    % N6 `7 W4 \9 S! p
    7 p' c9 h0 V" M) u8 ]' b# D0 o& o
    不过可以试试我说的register变量。前一个试验j是混在一堆其它变量里一起定义的,很有可能是在stack上,这样内存读写会更多,要是再碰上每次都需要加载cache就更慢了。4 R# Z! D$ m# Q+ G! K+ A8 s+ H' D1 c
    后面一个是在循环那里定义的,说不定编译器就把它优化成register变量了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    20#
    发表于 2022-9-27 20:29:50 | 只看该作者
    雷达 发表于 2022-9-24 23:54
    4 y# _% b: v4 L, x0 f4 f" w( }6 zvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
      J$ |3 i% M0 ]7 E( k{% d, ?+ B* ^! g/ c8 Z0 \
            comp temp, xtimesy;

    : N6 y* T8 W8 k4 Z" T, u/ W这个code里面如果Openmp没有被注释掉的话,那么temp那个变量应该是定义在循环里面,否则线程之间会存在争夺写入那个temp的风险。- `- e2 B) \3 @
    内层for循环如果没有内部操作的话,编译时应该被优化掉了,和你完全注册掉整个循环是一回事。可能你的编译设置没有打开优化?6 E' e$ V/ Q* _( ?1 g1 V
    VS社区版没有问题,我工作用的就是社区版,设置正常的话不会比商业版差。以前游说头头用Intel Compiler,他说不想花钱,而且差不了多少,就一直用到现在。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-6-12 08:23 , Processed in 0.049985 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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