设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2022-9-24 22:54:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    C++ 比 Octave 慢好多,怎么破?# E1 E4 R; t" c8 u$ ?
    ' _, u# G! s! ], p
    自相关两层循环,内层循环涉及浮点数计算,试验了一下把内层循环内部全都 comment out 只留个壳子,  但空的内层循环本身就把速度拉下来了,看来问题并不在浮点计算。
    1 I( L1 c2 g- r1 x. s8 Y; e7 ^0 K0 {) s( _" i
    速度优化问题真的很有意思啊。3 H4 q, n* B1 D2 ]

    . k, G/ {! J* h% v' _1 [欢迎大家继续讨论

    评分

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

    查看全部评分

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

    [LV.Master]无

    沙发
    发表于 2022-9-24 23:04:16 | 只看该作者
    拉下来?拉多少?
    # m# z' p% N: c' Q0 t, ^把代码贴上来看看?+ k5 c8 V; T1 e

    7 Y2 K! t, Z( b7 p1 E' `" A7 M7 |难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    板凳
    发表于 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 编辑
    4 T8 k( {3 X1 r
    数值分析 发表于 2022-9-24 23:04; g$ x; H9 S' e$ B0 l  {" m2 R
    拉下来?拉多少?. |' H& u) o: X+ y7 d
    把代码贴上来看看?
    ( R" B1 q8 f' S0 E# _

    - y5 H% o6 w! `( x7 ovoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    8 e& Z+ S- }  @; u/ S# q{
    5 ^$ r1 G, r8 y        comp temp, xtimesy;" \; R: A' n- s6 a& v7 F
            xtimesy.re = 0;; U9 s* r  u' `, n# B; `
            xtimesy.im = 0;: r  c9 f3 b- e( S6 E9 e( j/ i1 J
            int j0 = lenB - 1;0 W5 S4 X) A8 O) T( p1 j1 Z, k7 Z
            int    i, j, i1, reali;
    ( T! w- N9 g0 \- ~. n& i9 d" p/ \% U        if (lenA % 2 == 1)/ _0 X' X1 m% x; Y* l: l9 L, {" b
                    reali = lenA + 1;, r: C' W0 o; A- ^
            else- D# \' I- s: `1 K8 f
                    reali = lenA;
    & U' P9 i& k$ l! J& {/ i5 M        reali /= 2;
    * t* n  F- h( I4 {" Z
    0 r$ ~0 V0 y! {: B$ h        int nconv = reali + lenB;: L% z' s3 H9 o# y5 {
            //#pragma omp parallel for
    # D& P# t3 N& l& }7 y4 @        for (i = reali; i < nconv; i++)
    & T! r4 @  ~) K        {: ~, ?! Z8 h, I& I" N, X. N
                    temp.re = 0;2 L. y+ C1 L9 K" h' W% t4 Y+ e" a
                    temp.im = 0;; I; Q7 b1 n- i4 C& l5 D5 V
                    i1 = i;
    1 I7 O: i; u" i( w                for (j = j0; j >= 0; j--)5 J0 Y7 Q' m  b: i0 g& X
                    {" z3 C9 R& {4 g5 `% J
                            /* floating date operation */4 w, F4 a8 |7 I) A# w
                    }

    , S, W! o/ W* B4 U, z: O+ \, k        }
      s* R7 H( u: _1 I5 d( `}' Z6 ~8 g2 r% J- v) r
      c  E, [+ H3 B- D
    xcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样
    " g" P4 a. C6 |6 b+ c! @8 t  ?4 M6 E; _
    红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。2 Y- S& o8 C% j3 O% |
    现在call xcorr 100次,耗时78s.5 L4 j- O; O7 N! F
    4 a6 x- O( Y) d! U: U
    如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s. : U$ T, i1 d8 {6 e; ]. H# z/ Y" X  ]

    : p( e. x* Q) x1 U& b
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    6#
     楼主| 发表于 2022-9-25 00:17:17 | 只看该作者
    风雨无阻 发表于 2022-9-24 23:33
    / [/ Y* i' t, o: b- R' K5 oMaybe Debug mode?

    % v5 p# C5 M  T" w. Z7 ]' K5 Z+ D9 S8 A6 G2 R7 y5 T/ F- j- f$ N
    不应该,看我上面的回复。3 ?" M2 N( K! b4 f
    / s1 n7 C& _2 j
    我更怀疑是 VS 社区版的问题
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    7#
    发表于 2022-9-25 00:20:10 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑
    / `' d9 W. d" O1 }
    雷达 发表于 2022-9-24 23:54
    ' S8 r8 ?( I0 Tvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)$ g. K9 D  N# J) u: H
    {" H  d2 V8 [# X% t
            comp temp, xtimesy;
    6 r& h+ J( s. D: v. h

    : |0 W) U" S+ _& P/ M; T这个不是这么比的吧。。。
    : G; f+ C+ v* ^+ q
    $ p/ }: Y' U  U) @您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。+ L  ]# j8 g/ O6 w- r2 L

    6 e& }9 K$ J% G/ c而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    8#
     楼主| 发表于 2022-9-25 00:46:56 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 01:09 编辑
    . U# w. ^) w3 a
    数值分析 发表于 2022-9-25 00:20
    ; Q% t$ o1 W% c) ]. a9 o这个不是这么比的吧。。。+ q+ L6 w7 F' ~: U% B

    & k2 x2 T8 z4 @$ s9 x您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    - s1 F+ o# y, x

    4 w7 C9 K% S8 j9 k) ?有道理。. b9 }. g9 c- I/ x; Q  c2 }
    所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,记得 numeric 库里有算向量内积的,我回头试试。
    8 o7 Y* R% N1 o% D. G9 Q- V% u. h6 c4 Y! M8 C  M
    我先尝试尽量用标准库,一个小程序,不想搞得太复杂。多谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2022-9-25 01:27:53 | 只看该作者
    雷达 发表于 2022-9-25 00:46# Q" r* ~! J9 x! l: b: ^
    有道理。) }1 U8 y& r6 s! k6 h* i; p+ o2 L
    所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...

    & H8 Z$ U% J3 a0 z你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多
    / j2 i( F- }+ M, |. M$ s* XWhy is the loop instruction slow? Couldn't Intel have implemented it efficiently?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2022-9-25 01:48:51 | 只看该作者
    数值分析 发表于 2022-9-25 00:20! D7 E6 N; ]- U* v
    这个不是这么比的吧。。。
    2 m' v4 _/ q+ Y1 f. D. Z$ f7 c# `
      a* s6 h) k7 C1 k) L0 I6 \您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    而加上内循环,光jmp和dec指令就至少多执行了6000个

    + c9 x3 R7 m7 ^6 N  @6 A  Q7 }7 D* ~3 c( u3 F, A
    现在的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 编辑
      m, X: H3 Q2 u
    沉宝 发表于 2022-9-25 01:48
    0 ]2 x  ~, S$ q1 O& }现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...

    & L& S6 @# F: ^: ]
    $ g6 N+ Q& ]; r; ~是的,兄台说的对。- Z3 l3 @7 S" L& _4 G

    & P( J: L: ?+ }. H& L; T4 ?其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。1 c7 n$ o1 ~$ J; ?6 n

    9 z3 ^+ n+ N" f. C% x* _8 y: z$ }6 C/ H雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。6 _# P/ T& ~, W1 I6 V

      \: K3 X+ T1 X( N# t3 T比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。
    + G) F, u; R- ~
    ! @6 x* m/ s3 ^$ L* O: p当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    12#
     楼主| 发表于 2022-9-25 04:47:43 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 04:49 编辑 ' D& |+ d0 ]' ?% F5 Y& X3 q3 |
    沉宝 发表于 2022-9-25 01:275 E) X/ j+ v' U6 I# E. K7 n
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子 ...
    ( M9 O9 H$ c( n, z+ `' m
    - Y: u/ z: l! ^$ Y" p
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差一倍,我上面这个差的太多了。! N8 k6 `; U9 N2 }

    9 a8 e1 T4 _; X; A我已经完全懵了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2022-9-25 05:51:23 | 只看该作者
    雷达 发表于 2022-9-25 04:47
    7 L! p* S1 p, E  m又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    ) C- u" d" C6 P8 u4 {3 F2 Q
    时间差一倍的结果可以接受。
    4 N& a1 }* B9 Z/ z2 X' k0 h" ^0 ^2 {$ U
    你还是用profile工具看看吧。现在大家都主观瞎猜。
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    14#
    发表于 2022-9-25 14:58:59 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑
    % k5 y* P  I0 e& E) K0 v
    雷达 发表于 2022-9-25 04:47! n) f9 R3 a9 C1 s
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

    . r! S2 o3 M* W, C3 S  u9 o
    % d1 J6 F5 h! A9 D2 }+ @! R/ A4 a  |/ ~% E# P: {' \
    & X$ O. ?0 z1 J
    能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    15#
     楼主| 发表于 2022-9-26 01:30:03 | 只看该作者
    本帖最后由 雷达 于 2022-9-27 01:17 编辑 1 F* ?3 G2 ]- r4 \3 I8 z: Z
    数值分析 发表于 2022-9-25 14:58" m6 S5 l- t6 N
    能不能把这个也贴上来,看看和上一个有什么不同?
    ' S6 L0 {: W% x4 K1 A2 f3 n
    理了理思路,重新做了一个测试。2 Z% i8 v' }$ h/ c
    做了两个 vector 和 两个 float *, 都长 100000
    7 ~! T) n0 d5 ?) `( A外循环 6000,里面先做随机数生成,模拟真实环境,避免数据的 cache.
    8 o5 ?( n! Z: ?( G- r9 {3 B0 r2 {; q) U! M
    内循环试了4种方法,. ~2 H4 `7 I; R1 P  M0 m6 `
    1. 直接调用 vector inner_product 247s
    + N* y8 A& F7 b! ^: a1 m: Y0 O2. vector 循环点乘累加 237s
    " ^" }; M" s6 v4 C3. float * 循环点乘累加 204s
    % H" [' m% E2 S# K% F4 }4. 空循环 100000 次 202s5 n& D' G1 l7 @1 m; e

    # I( q8 P& [2 f不做内循环 200s
    - K3 u0 A" S2 L# }
      C- b$ b* s6 a/ l6 w) s你昨天说的对,内循环本身占比是很小的,大头在其他处理。
    % {8 f0 F: h% T- J/ H另外可以看到, float * 循环点乘累加 并不差,比用vector 还更快。
    ; x% r  \7 m* Z9 s% \% b% ]# |
    0 ^5 k7 {0 s7 e9 i6 v9 y# [至于我那个原始程序,还有一些疑问,见5楼,其他都不变仅仅是有无空的内循环就有很大不同,这是不对的,也许有一些其他缺陷我没有看到。(也许可以改成 while 试试)& q5 s, ?' p. W! ^' \8 k
    , ~  O/ |' f9 s* [' @
    (为什么下面我贴的  b1 加 方括号里的 i , 显示出来却是 b1 ?方括号 i 消失了。 LOL . 改成  jj 好了,原来 方括号里的 i 是斜体标志  LOL)- o/ m7 d( @/ L1 L
    . X. X, t% b4 {
            std::vector < float > vec1(N);
    ( u- b# [6 ?7 d) I; r6 [9 R        std::vector < float > vec2(N);& I" v4 M2 M* ?" d" L/ D# F2 ]% E
            float* b1 = new float[N];5 W# H3 J0 _$ X# Y# [( C/ X
            float* b2 = new float[N];0 R! ^! D  Q: P, h2 a

    ! Z3 G) o4 g8 A        for (int j = 0; j < 6000; j++)
    * S4 H- J" P8 U3 Q# q9 s- c2 |1 t        {! h0 a6 B% s: y! V$ o
                    std::generate(vec1.begin(), vec1.end(), []() {: Q8 I# D* p0 _( B
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 23.23));;
    0 [  d3 _5 L& P  z                        });. g! L/ `2 ^$ V/ @) f7 O0 c5 I- W
    # E9 z# [  I( \! O9 a7 u1 l
                    std::generate(vec2.begin(), vec2.end(), []() {. J2 y, }3 a; c( b
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 24.31));;
    : q/ A  L  D8 v, W3 }2 i/ v                        });+ [; B% b2 T2 |4 _6 j& W5 {+ q  b) `

    3 o: G, F) U% [) Y3 n: f                for (size_t jj = 0; jj < vec1.size(); jj++)0 K  x# n" _0 [
                    {, d$ i6 s7 l5 p& e
                            b1[jj] = vec1[jj];+ x4 |" i) d8 u! N
                    }+ D0 f' ]6 O* e1 R, |

    * n6 Q8 n' c* b                for (size_t jj = 0; jj < vec2.size(); jj++)* L* E+ x( n/ H) g& }
                    {
    2 \( \. L( R  c' d' K" B                        b2[jj] = vec2[jj];3 j! ]/ f5 b) K- G
                    }
    # [8 x8 H2 g5 Y" y+ Y9 A7 D- q7 `7 _3 f, R5 t
                    //Method - 1  N=100000 247s  
    4 c2 H6 }( |, p                //fresult = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);
    / W0 L: t& }. H                                7 i  o9 T6 j8 l# d4 ]
                    //Method - 2  N=100000  237s% k; X. G3 y$ W) o' N& w
                    /*% J9 O/ A) n% G$ B2 m" ^
                    for (int jj = 0; jj < N ; jj++)  Z% A: `/ `: y9 Q. K2 h7 B1 d
                    {, X( {* `  R, N
                            fresult += vec1[jj] * vec2[jj];
    ; j4 ^4 E3 m, h# v! H; u* l                }9 V- P( J1 o7 K/ P( g0 v6 }7 E- Z
                    */3 M; z. d, x" v- U# k9 K7 D" _
                                    
    5 E5 }3 X$ v- L' K8 D                //Method - 3  N=100000 204s
    ( c4 t) S3 _) ~2 }5 `- c; z6 o                /*
    1 q3 n# C" `( G5 R3 \: g+ R                for (int jj = 0; jj < N; jj++)& }/ J9 K8 F8 ~7 [  c; S  D
                    {! s3 ~+ i4 Z. N
                            fresult += b1[jj] * b2[jj];, T. }2 D3 h2 P, a; A
                    }
    % K& _/ R% f+ b& j2 Y2 G$ p$ m                */% x) b( \" F; L8 N/ m9 I

    ( w. d4 {6 _8 N2 d4 _                //Method - 4   202s6 g* z# l$ k" U! g3 B# @
                    /*: k( ?5 x# P1 }8 J! [
                    for (int jj = 0; jj < N; jj++)
    0 L8 ^# }: h- w& Z                {# M( H7 m; d$ H- E3 b  A, |
                            % m$ q+ J- a- c1 H4 s
                    }
    : R5 n& k) e8 \4 L                */
    2 ^( Z+ o) j4 q" d( R- E# d                //comment out all methods, N=100000  202s               
    0 _( W# Z0 g8 u3 D* a4 S        }
    - `9 S) I& _( J$ n9 t- L. H0 U" J+ M; T' `
            delete []b1;2 ?! B% o1 X% \, k9 T4 T
            delete []b2;

    , Z& F& R7 g, U8 T, r, u: v
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    16#
    发表于 2022-9-27 00:15:38 | 只看该作者
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?6 b# _: L: E! x) C1 @0 K  Z

    0 s2 |4 w$ @6 M$ F" r  b$ P& [你第二个试验里面的j在循环里面又重新定义了啊,你确定真的跑了6000次?4 g3 H( z) e6 K2 `- W  h
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    17#
     楼主| 发表于 2022-9-27 01:16:03 | 只看该作者
    机器猫 发表于 2022-9-27 00:15
    % _: l' j  C7 d. F# f' b3 q瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    + |' ?2 P) B5 `7 e3 G
    1 t7 U& D' q& b- U* q. E你第二个试验里面的j在循环里面又重新定义 ...

    9 A* s% e! g4 U) H内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL
    9 Z  {  R  Y3 U0 H+ \) Y- q; G; c# W( x- u' n8 Z
    不和它较劲了,瞎耽误工夫,我已经转到 ubuntu, 也准备顺便试试 avx2 向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    18#
    发表于 2022-9-27 02:06:58 | 只看该作者
    雷达 发表于 2022-9-27 01:16
    2 \3 z/ g0 n9 M% J" |& l' |内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL* J- I& ]0 C: b! f! j( x

    7 _. X9 m& t, @7 B不和它 ...
    - Y" `' p5 u7 X5 J2 O- v, d5 j
    * J3 f* i' P; C; s8 O
    不过可以试试我说的register变量。前一个试验j是混在一堆其它变量里一起定义的,很有可能是在stack上,这样内存读写会更多,要是再碰上每次都需要加载cache就更慢了。9 S! R1 g3 Z2 G' t$ F
    后面一个是在循环那里定义的,说不定编译器就把它优化成register变量了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

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

    GMT+8, 2026-3-18 11:46 , Processed in 0.066088 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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