设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2022-9-24 22:54:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    C++ 比 Octave 慢好多,怎么破?7 O6 ^# F' m) S+ m
    6 _$ P( ~, M/ p5 w% |% h' u
    自相关两层循环,内层循环涉及浮点数计算,试验了一下把内层循环内部全都 comment out 只留个壳子,  但空的内层循环本身就把速度拉下来了,看来问题并不在浮点计算。
    - D& {% D% [$ A
    / U7 Q" {1 u1 _# K6 K5 V% z速度优化问题真的很有意思啊。* N, I& L$ ~5 ]

    $ l* e0 h+ E+ {" S) a' o欢迎大家继续讨论

    评分

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

    查看全部评分

  • TA的每日心情
    开心
    2026-2-7 02:13
  • 签到天数: 1955 天

    [LV.Master]无

    沙发
    发表于 2022-9-24 23:04:16 | 只看该作者
    拉下来?拉多少?9 q# G; \: [" f3 B
    把代码贴上来看看?
    ! i. j# \0 ~, Y& W
    9 [: V+ Q1 i, Y0 t难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

  • TA的每日心情
    开心
    2026-2-24 07:04
  • 签到天数: 126 天

    [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 编辑
    6 H3 O) ]2 d* _9 ]5 z
    数值分析 发表于 2022-9-24 23:04
    1 N: |- y) _6 m- k( r5 i8 o拉下来?拉多少?" _# k! W  R  ^5 @  x) }6 V
    把代码贴上来看看?

    9 t; z- V/ l  y, g! C
    $ A9 m; r% W+ |/ tvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    3 ^' m  n5 r0 y{
    ) c# [- n, A' ^1 p. K! S        comp temp, xtimesy;
    % o% w. t3 M/ ^+ p8 N6 x. e        xtimesy.re = 0;
    4 E7 R6 R1 \! l5 Q        xtimesy.im = 0;2 X$ J. l* y  `, X. G% ^. e/ C% y
            int j0 = lenB - 1;
    0 D2 L( w7 R# l( j0 |4 \, H        int    i, j, i1, reali;
    : {- _& q& K: ]3 c+ I8 `        if (lenA % 2 == 1)9 H* ^% R3 q$ f* `
                    reali = lenA + 1;
    1 f' }% D( |1 |# X- O        else
    ' Y# J$ _% h4 h# I  N# K* \5 W                reali = lenA;
    " i; T& w0 Q" z8 m, g& T        reali /= 2;  W5 Z2 n! ^) ~1 R
    ' ~, Z; _$ \9 `0 [' @; d. f8 x
            int nconv = reali + lenB;
    2 B5 ]5 K4 p9 A, |# `        //#pragma omp parallel for! U  I! M$ L6 ]8 j" a( b  \
            for (i = reali; i < nconv; i++)* l# n7 B5 J5 Y9 e: O. v
            {
    9 \& k0 X% O4 P0 M' n- T                temp.re = 0;5 B& X1 ^; Z1 S# V7 V% q
                    temp.im = 0;
    # V2 t$ ^- D  D8 _% l, r6 X" W6 w                i1 = i;
    8 Q7 V9 a$ X! ?! o7 d7 w                for (j = j0; j >= 0; j--)& z' Q/ H# G3 V
                    {" I  J" V, K" y! e, V; k
                            /* floating date operation */
    % ^* ^8 M9 U# {/ X, _5 T& p  @                }

    ; ?; K8 t/ l# Q) S. J, f6 v0 B& n. x        }" `9 _. J% z/ c. L' W: `
    }
    ; O, l' g5 @& V0 j) g$ O
    / o# v6 [* g, q, x; w/ Kxcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样2 b: ~5 R2 N9 }& |
    ; i9 Y; H  b9 \+ t- Q
    红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。
    - A2 {8 Q0 {; W  S* o9 f现在call xcorr 100次,耗时78s.0 y  k. j- H* O: A

    ! B0 l5 }9 Q, h; _/ Q如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s. ! U' B) z; D4 ~2 Z: W$ q

    ; Q  p, X( |9 w/ b0 y$ Z
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    6#
     楼主| 发表于 2022-9-25 00:17:17 | 只看该作者
    风雨无阻 发表于 2022-9-24 23:339 e  N9 M* R  H2 a1 P
    Maybe Debug mode?

    2 A% c' c9 o! J3 u( ^9 ]% i* }
    不应该,看我上面的回复。' |% S8 H+ W( C& _
    + H2 i. I7 v; B
    我更怀疑是 VS 社区版的问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2026-2-7 02:13
  • 签到天数: 1955 天

    [LV.Master]无

    7#
    发表于 2022-9-25 00:20:10 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑 % u5 ~7 Q- n2 D8 }3 V
    雷达 发表于 2022-9-24 23:54$ |) t) F& C/ g5 Z- B
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)  E/ p( K& W1 F4 D
    {
    ) i5 }9 h' ?: x1 D, G6 u        comp temp, xtimesy;

    7 X5 u4 F' j% N1 T  J- R1 V. S, T0 X% E* A
    这个不是这么比的吧。。。
    * M' Q# u* F# C1 ]7 _: M( h9 Y; }# K, S
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。! D4 P& K$ N: P

    / R, i% g3 D2 p9 u2 `而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    8#
     楼主| 发表于 2022-9-25 00:46:56 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 01:09 编辑
    + o+ j3 b% k3 ^! K% `
    数值分析 发表于 2022-9-25 00:20
    - f. h8 U( W- ^, H这个不是这么比的吧。。。) A: U) w) S9 E7 g

    ! b/ o. W& o3 S5 n9 _& e7 b您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    ; k; J0 j# K8 x; n! S) f

    + t# Z; \) E8 S, }/ ~& S有道理。
    2 r$ g$ M4 s0 {) p( ~4 o! n所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,记得 numeric 库里有算向量内积的,我回头试试。: C1 c, ~0 J# A3 D

    # D7 \) z' T( e1 a3 t; Z8 v我先尝试尽量用标准库,一个小程序,不想搞得太复杂。多谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2022-9-25 01:27:53 | 只看该作者
    雷达 发表于 2022-9-25 00:46
    4 g: T7 W' ]0 c9 U% A' I( P  B有道理。
    , U+ B1 `2 {+ e( d0 q" L8 R. a' a$ X所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...
    + F, p2 C2 d9 s2 G9 v% D! [
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多1 N! |7 e5 P( C5 U
    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
    : O- V! v& V! T0 \% x( ]; v4 A# F这个不是这么比的吧。。。
    + Y% }/ c  T, r
    - B: w! d2 d* g/ U+ s; z0 N# ?您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    而加上内循环,光jmp和dec指令就至少多执行了6000个

    / t8 g# o. r. P3 ]* M8 n0 r+ }, ]6 O; m+ z7 ~
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果循环这样跑,花不了多少时间。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2026-2-7 02:13
  • 签到天数: 1955 天

    [LV.Master]无

    11#
    发表于 2022-9-25 02:06:44 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 02:16 编辑
    ) J! ]5 x& l1 `1 b* ?
    沉宝 发表于 2022-9-25 01:48
    9 u1 _& N2 i4 y' }3 {现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...
    % @$ p$ e+ \  x2 Y$ U/ M# f$ k

      ~% p. c  ]- d& U+ [2 g是的,兄台说的对。% p8 x" P+ Y9 K! z
    " h% }$ w! F  J( U& w
    其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。* e0 J9 D; h& T" X
    3 l7 i- ^1 ^0 |
    雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。! W7 z: s& |: i
    " r- @6 N8 ]0 y9 y' y9 ^$ V. ?
    比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。! q3 {1 X7 F; x. T  v

    0 M: [: N9 s4 m8 T& ~* d6 p$ h" s当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    12#
     楼主| 发表于 2022-9-25 04:47:43 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 04:49 编辑
    7 H. ?* r8 D; b6 Q  j
    沉宝 发表于 2022-9-25 01:27
    8 L7 k" l% B% e2 u你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子 ...

    3 I$ d8 q) C+ [; S' V
    8 w$ R1 V1 t5 X" Q( A又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差一倍,我上面这个差的太多了。
    : |* f1 Q. {- q# C- j! I7 I
    . b1 y' r$ z- q; ?我已经完全懵了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2022-9-25 05:51:23 | 只看该作者
    雷达 发表于 2022-9-25 04:47
    7 E) j! ]' U1 g' H4 K4 d又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    ) o" Z0 B% F; L( Q
    时间差一倍的结果可以接受。( ]/ c7 m9 J/ p2 J" q( X* Q+ B
    ' T6 a0 U; C& n, r& l
    你还是用profile工具看看吧。现在大家都主观瞎猜。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2026-2-7 02:13
  • 签到天数: 1955 天

    [LV.Master]无

    14#
    发表于 2022-9-25 14:58:59 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑 0 i. O4 _! b, Q) f1 d
    雷达 发表于 2022-9-25 04:47
    - S1 Y- ^7 N$ t; h) c. n3 B# X6 @又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

      ]9 v2 K+ \3 d8 Q) r* y5 p
    ) p7 E2 Y$ Z2 S' S
    % `  K0 G7 f: @2 [9 ]/ K. n' a8 b9 V- w1 u$ W; m8 r
    能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    15#
     楼主| 发表于 2022-9-26 01:30:03 | 只看该作者
    本帖最后由 雷达 于 2022-9-27 01:17 编辑
    9 {1 U0 d/ v" Y8 ]0 J
    数值分析 发表于 2022-9-25 14:58
    / ?! I! B" T$ J+ w: `+ V能不能把这个也贴上来,看看和上一个有什么不同?

    9 p5 w! U8 [! B3 l5 W0 r- @+ \- D理了理思路,重新做了一个测试。
    ; D# j1 v; K( J" z8 b  }做了两个 vector 和 两个 float *, 都长 1000009 V1 Y# N1 s0 Y4 N' g
    外循环 6000,里面先做随机数生成,模拟真实环境,避免数据的 cache.4 f7 k% {4 X1 j
    + d5 l1 J. e5 W7 J% ^% ~* P
    内循环试了4种方法,7 ?. S2 W3 j8 q
    1. 直接调用 vector inner_product 247s
    % g/ i5 ]4 D8 R4 Z4 l! K2. vector 循环点乘累加 237s0 u$ Y) g; o. j: q: `, b
    3. float * 循环点乘累加 204s, e* D! {' N" K+ p
    4. 空循环 100000 次 202s, t) R/ c5 p6 ^/ y! ]* j7 J- D  A
    * e. r3 J. I5 l6 z6 P$ _1 \8 i
    不做内循环 200s
    ) k8 Q" V' Q/ n- n/ F
    , ]4 K% h! s; B: y& G% P你昨天说的对,内循环本身占比是很小的,大头在其他处理。
    + V5 h8 ^0 P  Q! x( T另外可以看到, float * 循环点乘累加 并不差,比用vector 还更快。# F4 g4 N8 _( W7 a7 e$ J

    0 Z+ M3 f* [9 r3 S' ?2 {! j至于我那个原始程序,还有一些疑问,见5楼,其他都不变仅仅是有无空的内循环就有很大不同,这是不对的,也许有一些其他缺陷我没有看到。(也许可以改成 while 试试): [; H# T' f9 C5 \0 }# m9 b
    5 C* |# o2 ^( G
    (为什么下面我贴的  b1 加 方括号里的 i , 显示出来却是 b1 ?方括号 i 消失了。 LOL . 改成  jj 好了,原来 方括号里的 i 是斜体标志  LOL)
    . C) p& Z  X: P: y" @" ^& E$ c8 a/ c1 ?
            std::vector < float > vec1(N);. \" m+ Z2 v" ]( F
            std::vector < float > vec2(N);
    3 T- F% Z& p- j# _* r6 `        float* b1 = new float[N];# r; j3 [, n" h
            float* b2 = new float[N];
    * z2 F4 y8 k- x, f! ]
    - ]0 Z% `1 }6 j' q        for (int j = 0; j < 6000; j++)
    4 M: L2 ^: f$ d2 i6 M        {% f5 E+ A3 V& B" C5 J
                    std::generate(vec1.begin(), vec1.end(), []() {: z6 t' [) i( ?9 f6 M
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 23.23));;, P0 r9 z' a  w9 Q& p& t  ~5 }- ^
                            });
    7 @" Y6 ^* {( L4 ^8 T5 U! l6 e
    * x  t# p& i: c8 h, \                std::generate(vec2.begin(), vec2.end(), []() {
    9 o; V1 R5 U6 Z( |                        return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 24.31));;
    - }1 r* P- y1 G! A  s- p                        });
    9 k  K+ M1 O$ y; a/ O0 {4 |
    & e  j, [( U" Z! c                for (size_t jj = 0; jj < vec1.size(); jj++); h1 W. a6 Y8 q  I* w6 y
                    {
    ! @- n1 ]9 M( ?8 P                        b1[jj] = vec1[jj];$ t5 ?& _$ _: b
                    }0 f- Q% l4 h0 q4 m
    5 F7 u2 Q& ~4 z! I
                    for (size_t jj = 0; jj < vec2.size(); jj++)
    " {! B  g/ l! d0 H- n                {
      L" H# Q* R3 {4 z                        b2[jj] = vec2[jj];
    1 C5 `  j) Q, J                }
    * D2 `6 E( J: c) s$ O, c% z3 C9 R- g: y
    / B' I4 F' ^5 D" k# d3 H                //Method - 1  N=100000 247s  % m7 w& C6 a; ]$ S0 o
                    //fresult = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);
    ( B# K7 A5 a0 |  _' E  n+ s& t% E                                
    . E5 @- }1 i6 ]) L3 t                //Method - 2  N=100000  237s
    ; O, a5 j9 r' J                /*  t8 z' r. N3 i# L
                    for (int jj = 0; jj < N ; jj++)  n  b0 b$ }; ?2 X
                    {5 f6 _  s- k  u6 i9 ^1 y
                            fresult += vec1[jj] * vec2[jj];
    . i1 H8 D, `0 r6 l                }. r# _' J0 Z5 s8 l. v
                    */
    ; K  w  X' a, e% ^" r3 A! @- Z                                
    3 M# j. C) Q" F( |" H; w                //Method - 3  N=100000 204s
      H) Z0 H! t7 i7 K& g% j' N# Q                /*
    6 Y' g; K# S" f8 t                for (int jj = 0; jj < N; jj++)
    $ ?9 d7 C: k3 k  F- L4 O                {3 v0 \0 a+ a4 R- m. T1 P2 v
                            fresult += b1[jj] * b2[jj];
    9 q# w, V$ f/ u# m! e5 P& p                }6 n- C5 w0 `% r' n9 i
                    */5 _: ]. V& t7 V! c
    0 m6 Q& S5 O8 o. u- ?5 t) h
                    //Method - 4   202s2 D' {1 b: p& g% n7 d1 x
                    /*
    ; P2 X. Y+ D" j2 ]& F! H                for (int jj = 0; jj < N; jj++): ^! E4 g. x1 W. J1 E
                    {+ f! b1 V) G; t9 k6 `- I
                            
    7 S$ r) X0 p4 z# Q% Z' W0 u8 l. u8 ~                }
    ! T& T  p/ ]2 X, v' q5 s; V$ v& v                */$ ?+ ]7 N0 X: g7 D3 r
                    //comment out all methods, N=100000  202s                5 L/ A; C/ z* Y. \4 D3 G
            }4 G, ~! q9 y5 ]8 c

    1 K0 a' z& Z2 Q3 G# F        delete []b1;
    6 a& a9 f  v% U        delete []b2;

    * P% S. s+ ~& |0 F3 l
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    16#
    发表于 2022-9-27 00:15:38 | 只看该作者
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    " `! m, s1 G/ @- e0 @6 x$ Q( Y' l# H3 C( y- ]! C1 J* m9 P
    你第二个试验里面的j在循环里面又重新定义了啊,你确定真的跑了6000次?
    2 G/ ~( d% a; t: u  N! ~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    17#
     楼主| 发表于 2022-9-27 01:16:03 | 只看该作者
    机器猫 发表于 2022-9-27 00:15+ ~, T3 I1 K( H9 t" G( J
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    9 H3 h, j" d7 A2 c$ b0 o
    & g* c) J. h) f  i5 ]你第二个试验里面的j在循环里面又重新定义 ...
    3 `  Y) b7 C- |3 v" L+ U
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL  e6 O, G' I# H. W  J; ^

    % }* q$ A5 b8 I; x2 m) `% A( [不和它较劲了,瞎耽误工夫,我已经转到 ubuntu, 也准备顺便试试 avx2 向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    18#
    发表于 2022-9-27 02:06:58 | 只看该作者
    雷达 发表于 2022-9-27 01:16
    2 U7 `& l! S8 B内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL
    $ r  ~6 H( P+ n: g! J' n) q2 H0 A. u2 ~; a; }' K
    不和它 ...

    0 v9 P9 w9 U% N* _) M' J) v( V+ a' t% T  ~+ R
    不过可以试试我说的register变量。前一个试验j是混在一堆其它变量里一起定义的,很有可能是在stack上,这样内存读写会更多,要是再碰上每次都需要加载cache就更慢了。
      F, x, V9 F# H后面一个是在循环那里定义的,说不定编译器就把它优化成register变量了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    20#
    发表于 2022-9-27 20:29:50 | 只看该作者
    雷达 发表于 2022-9-24 23:54, F& X# V/ V" c' a: G+ T
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    8 F  e& S2 e/ f) z# M$ t/ D{5 w. U7 Y' V; m
            comp temp, xtimesy;
    * F( L) b+ o& h2 }! X2 I& h! b
    这个code里面如果Openmp没有被注释掉的话,那么temp那个变量应该是定义在循环里面,否则线程之间会存在争夺写入那个temp的风险。
    + R( }9 w, z3 e. K. `5 {内层for循环如果没有内部操作的话,编译时应该被优化掉了,和你完全注册掉整个循环是一回事。可能你的编译设置没有打开优化?: h, \% b% p& y; }
    VS社区版没有问题,我工作用的就是社区版,设置正常的话不会比商业版差。以前游说头头用Intel Compiler,他说不想花钱,而且差不了多少,就一直用到现在。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-10-12 08:54 , Processed in 0.085450 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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