设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2022-9-24 22:54:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    C++ 比 Octave 慢好多,怎么破?
    # X% h0 Z6 E: p4 J* O2 j0 P
    $ g1 V* m  b- u$ L8 e+ r8 T- D- D自相关两层循环,内层循环涉及浮点数计算,试验了一下把内层循环内部全都 comment out 只留个壳子,  但空的内层循环本身就把速度拉下来了,看来问题并不在浮点计算。, X1 z4 O# ~+ E$ n; D6 A

    7 C2 ^7 w& ~% C, k$ v  c  w! v: j3 U速度优化问题真的很有意思啊。% \, ~( m( A7 J8 A* [- m; r; X  W

    : x3 @& n8 I) u* T& D( f- M; |2 i欢迎大家继续讨论

    评分

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

    查看全部评分

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

    [LV.Master]无

    沙发
    发表于 2022-9-24 23:04:16 | 只看该作者
    拉下来?拉多少?1 t2 h4 w9 Z9 w
    把代码贴上来看看?5 b5 M/ \' v  t
    5 m1 p4 s3 e* H$ X* {4 I
    难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    板凳
    发表于 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 编辑
    . [# F/ M: F+ V
    数值分析 发表于 2022-9-24 23:046 V! p1 @8 B+ {# b& H5 Z
    拉下来?拉多少?- s- M  V2 q& d7 b
    把代码贴上来看看?
    : a. E5 z9 v  j

    7 V) M, ^6 P& j  b1 avoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)0 m5 z+ V+ i+ Y* N1 p) a& k5 u8 _
    {
    7 U; F; |8 n6 i+ [% f* `5 Z        comp temp, xtimesy;% t4 b8 @" v+ L% {' z" x" ?5 @
            xtimesy.re = 0;
    & g0 _' T1 _! o! }        xtimesy.im = 0;( `- I& d) S  \6 G) i. M
            int j0 = lenB - 1;2 v0 g* U7 k! A: j
            int    i, j, i1, reali;# z3 }8 H9 E6 K0 r" h
            if (lenA % 2 == 1)0 p1 d: z+ b, }9 w1 |: |7 y
                    reali = lenA + 1;+ F+ @5 `) r: t
            else
    , N+ N; Y  U) R3 E3 J  ~0 o( I                reali = lenA;
    # P- C& c: C# D        reali /= 2;
    $ f; @: D; G2 l3 B! @
    0 Z$ m: i" T( R1 @        int nconv = reali + lenB;# ~0 |) |1 N" {( ~  b% T
            //#pragma omp parallel for
    8 J" C: u. E' e6 O2 u6 ~  v6 p        for (i = reali; i < nconv; i++)
      d3 h: b: E8 F: t! w        {& C% Z9 k) w% ?( Q, i! q* |( G
                    temp.re = 0;# E) z$ S6 ]+ k
                    temp.im = 0;1 j1 V6 U+ M6 j
                    i1 = i;
    5 i! t4 X" y) ?  P; A& V                for (j = j0; j >= 0; j--)
    ( j6 c5 Q- n# u( E& T                {
    ' {/ r1 B% n' n                        /* floating date operation */
    $ U) [& v$ h  }/ ?: k1 R1 z$ `                }
    * e4 K6 N1 G: M0 L! o
            }
    ( Z3 C) K: U- w; ?& m& W% G1 c1 L/ |}" G5 K3 M& E, T5 _
      X6 H: g1 l9 s! l4 N
    xcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样1 j5 p% y/ |5 \) Z3 R

      A3 a0 Y+ Z8 l( P9 p红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。
    % H! ]; H4 h" Q# @现在call xcorr 100次,耗时78s.
    ) Y7 c! f, |' Z/ b' |: |; t
    - t) r+ B! t. c8 ]. A, t如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s. 7 z( T8 R3 l# T0 N

    ' g6 d5 u8 F6 |  E& Q3 t
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    6#
     楼主| 发表于 2022-9-25 00:17:17 | 只看该作者
    风雨无阻 发表于 2022-9-24 23:33
    2 }& ?4 n$ W  pMaybe Debug mode?

    & l+ }2 J: K3 E, {+ ?( p: |5 h/ N4 K/ E. R. X# t7 X. |6 O
    不应该,看我上面的回复。( k! v/ h8 h0 B5 W* @/ y
    5 D$ ^& J4 r5 v) E/ d' [
    我更怀疑是 VS 社区版的问题
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    7#
    发表于 2022-9-25 00:20:10 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑 / W: ~" m! `8 g# [. T8 D# R; L
    雷达 发表于 2022-9-24 23:54
    ; |: q" S) H: w, K0 O) ?void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB), u" f  D( B& [$ o
    {$ W0 h" R% p3 k# p+ _
            comp temp, xtimesy;

    7 s# ?. C6 Z2 h; `+ g* m/ k5 u, d% j; X4 d2 [) S9 X" ~: S
    这个不是这么比的吧。。。
    0 y9 W. O' e7 [4 \0 _
    + ?2 K8 ~# t2 y$ w您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。( a/ N/ h' ?' a1 Y1 k6 U
    : }! \$ N  r) V( O# w
    而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    8#
     楼主| 发表于 2022-9-25 00:46:56 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 01:09 编辑
      D# l. i" v, i! J
    数值分析 发表于 2022-9-25 00:20
    2 W1 w2 @& r4 y/ v) ~这个不是这么比的吧。。。
    & A, l4 [1 k  j# z. L3 o+ \. d1 e5 o+ J
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    ( X/ q  Y: B; }

    6 S( S) J/ w! G0 P  w, X# b2 c有道理。
    " {  Z7 a9 Y1 }所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,记得 numeric 库里有算向量内积的,我回头试试。4 {& n6 D+ o9 f0 k( {/ m" ^2 T
    5 L; q& c+ b& @- i, o" u2 T' O5 i
    我先尝试尽量用标准库,一个小程序,不想搞得太复杂。多谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2022-9-25 01:27:53 | 只看该作者
    雷达 发表于 2022-9-25 00:46
    1 B2 @$ F% I9 h8 J有道理。% w0 Y8 O1 P) n  i
    所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...
    ' Y3 `- b- ]* m
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多/ Q7 n3 U3 w7 s, x
    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
    ( y) \+ T0 P- n2 G- f7 x; R5 ?这个不是这么比的吧。。。
    . B) l7 t9 h6 x/ U- @' _$ R% Q& g* n- b* M' w1 ~: R. a
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    而加上内循环,光jmp和dec指令就至少多执行了6000个
    7 ?, S$ N6 Y, k7 u* G& l! E1 J
    ' J& Q! X, S' a' m- P7 n
    现在的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 编辑
    $ t4 t6 ]) N5 n+ @
    沉宝 发表于 2022-9-25 01:48$ u1 `6 v" Z- z9 `" A& |# E) `
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...

    7 g" ~) G! N+ N8 V2 @
    & V3 `# Y! X2 g/ S是的,兄台说的对。- @! ^: C# L* H3 d' B

    6 s9 n5 P: N* N4 [. X其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。/ r4 P# y$ L& @, v/ M

    . Z) j: g4 J7 e( y' ?雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。
    & }: C0 E$ ^* n. l; a0 \0 o
    - _, M* w: l4 E! T0 z' Y4 G比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。
    ) z% k5 S& [: b  l$ K3 @4 R- {) O
    ' Q+ \" G( P- L2 Q' A( a当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    12#
     楼主| 发表于 2022-9-25 04:47:43 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 04:49 编辑
    2 r4 G6 n3 d0 j- i# Z6 p
    沉宝 发表于 2022-9-25 01:27' T/ L* {$ C3 w- f
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子 ...

    ; u# |6 `; a7 W6 g2 r
    8 W% x  F9 o3 [6 W% a' v9 @又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差一倍,我上面这个差的太多了。
    3 h3 v+ k3 m7 ]+ \8 _# l' k
    + m: W* s9 [& D8 z我已经完全懵了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2022-9-25 05:51:23 | 只看该作者
    雷达 发表于 2022-9-25 04:47' P0 ^" Y1 q3 O$ O
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

    % T  n" M5 Y' @+ O- ]! ?8 }* U时间差一倍的结果可以接受。0 {: S2 z+ V& ^1 x

    0 e# S& \7 M( R. \( }你还是用profile工具看看吧。现在大家都主观瞎猜。
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    14#
    发表于 2022-9-25 14:58:59 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑 6 g1 L- ^$ {. G; W/ u- J
    雷达 发表于 2022-9-25 04:47, B& H- W' c; {# c$ M+ w8 e( p
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

    & R, j1 C2 F/ F- W
    6 v+ y5 b2 n" R  Z5 N
    - a1 u7 g( P' P
    ! L% P, U: ]7 e! J) ~3 i能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    15#
     楼主| 发表于 2022-9-26 01:30:03 | 只看该作者
    本帖最后由 雷达 于 2022-9-27 01:17 编辑 " Y0 @3 `# M$ _+ P" ]. \3 B. f
    数值分析 发表于 2022-9-25 14:58. P, m9 k/ C! m: J" g: C3 E& j0 U
    能不能把这个也贴上来,看看和上一个有什么不同?

    ( O, e  i; q) c: r# D. Z7 P理了理思路,重新做了一个测试。# Z0 m$ a# W1 \. q0 z# B) E
    做了两个 vector 和 两个 float *, 都长 100000/ Q) R, J' \, R
    外循环 6000,里面先做随机数生成,模拟真实环境,避免数据的 cache.
    + G" i( O* w7 Q# M* |( `- h4 U) N7 |' q9 Y
    内循环试了4种方法,+ w& u* s$ L5 ?6 n8 m: T( [
    1. 直接调用 vector inner_product 247s
    . l# Q& A" P  k& q, ^0 x2. vector 循环点乘累加 237s
      O% r2 S4 a! B7 b0 K, g3. float * 循环点乘累加 204s
    / d4 E5 z6 X) Q1 B, b5 ^7 ]4 B4. 空循环 100000 次 202s4 G) N; {9 R0 e7 B; a6 W" f

    ) R8 m  S9 E- @- C" G0 u不做内循环 200s
    2 l! G7 Q7 L4 X' h1 B6 A1 D$ ]. l$ K( u
    你昨天说的对,内循环本身占比是很小的,大头在其他处理。
    8 `' a9 G0 ]- a% f7 H% @另外可以看到, float * 循环点乘累加 并不差,比用vector 还更快。# `4 X! M7 h: l5 M1 P7 d2 G6 k
    3 k) N  u  L# @) R4 S
    至于我那个原始程序,还有一些疑问,见5楼,其他都不变仅仅是有无空的内循环就有很大不同,这是不对的,也许有一些其他缺陷我没有看到。(也许可以改成 while 试试)$ {& r: ?1 l3 ]4 q
    - b/ I" |6 x% s+ o6 R, Q  g& U
    (为什么下面我贴的  b1 加 方括号里的 i , 显示出来却是 b1 ?方括号 i 消失了。 LOL . 改成  jj 好了,原来 方括号里的 i 是斜体标志  LOL)
    7 W7 @* R4 ^, `* v# A! |( H: V" J) b
            std::vector < float > vec1(N);
    8 U" W4 `5 _3 F  U# \6 N        std::vector < float > vec2(N);
    1 H" N/ k( K6 j$ A4 Z) D        float* b1 = new float[N];9 S1 H/ ?# B% A( {
            float* b2 = new float[N];) F- l6 A# j2 |! e% v
    0 \7 \/ V5 f; s2 b- [( U
            for (int j = 0; j < 6000; j++)
    & a# `4 S$ K( B/ K% D4 c. ~8 R$ {        {
    ) c6 N7 _1 Q$ r" n                std::generate(vec1.begin(), vec1.end(), []() {2 ]  d* M$ o4 K( A! D
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 23.23));;
    ' _: L! K& F1 V" v$ G9 l; c7 \  b' y                        });* J% J) ~9 H: Y8 z6 l- x4 s
    3 ~- ?/ `" \% C
                    std::generate(vec2.begin(), vec2.end(), []() {2 P% v' ?  B* f2 g# P# R% H
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 24.31));;
    ! K, K: b7 m7 z9 b! P* ~. X                        });; E$ Z+ V0 \. i( g% P* @; O5 D
      u0 e8 a' b7 N& v$ R
                    for (size_t jj = 0; jj < vec1.size(); jj++), s9 \7 P6 L* M, U2 a- C
                    {0 X8 |5 E  ~; F/ {# j, {( K
                            b1[jj] = vec1[jj];
    # a% E1 M& |+ ]( {0 M+ {- D                }
    7 m( ~7 S7 N' }9 ]- T: U; w. Q% s! V0 E
                    for (size_t jj = 0; jj < vec2.size(); jj++): \/ W, v& q- c2 l
                    {
    ; u# R4 H2 Z- i# e/ ]; o                        b2[jj] = vec2[jj];
    0 Q3 q9 B0 k$ w  Y6 B& l  R! ]                }( n; ~6 Q5 @. H  V: s; w- G* q
    : |- R: J& `, ?( c& C
                    //Method - 1  N=100000 247s  
    & I: |, V: N1 V; U3 I                //fresult = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);. I% N0 R% o& x
                                    , ]8 o& ~& I4 x0 L, \6 V; S$ P
                    //Method - 2  N=100000  237s/ D) c; F* V: |
                    /*+ @+ D1 S; Z  R% Y
                    for (int jj = 0; jj < N ; jj++)
    ! y  \, ^$ d# w, p+ u$ @5 }3 _                {
    5 g2 @4 u: L  V7 ^1 O; i# _                        fresult += vec1[jj] * vec2[jj];- S! @- N9 i7 L% h2 F, o
                    }) t  K4 p/ n; m
                    */
    # c. t5 @- Y% h, |# o' D/ V                                
    / i! e5 S' I1 G9 X1 b                //Method - 3  N=100000 204s7 k" \) n; H. [  `
                    /*2 v& ^/ ~: L) V. ?( d
                    for (int jj = 0; jj < N; jj++). e" ~0 Q' ], V- F8 ^' d
                    {& @( i! I3 p! I$ T: k* w
                            fresult += b1[jj] * b2[jj];
    , s) _, k* F9 j( J! V4 D                }
    ' I! M) G7 Y* A5 `/ @: l  L! G! Z                */; i3 E! B/ y, Q* @+ a: D4 ?

    $ H( s) ^" y8 U                //Method - 4   202s
      s  _6 S3 b- f" f                /*; X9 j1 \0 T* U
                    for (int jj = 0; jj < N; jj++)1 G4 H) {& I$ h! Q
                    {
    # H" [( d8 F, N' H" O0 \9 i# o                        1 ^; f- ^) B+ q; s/ ~  @0 q
                    }1 @: h, k# A7 x3 v# U& y4 k% N
                    */7 v0 h) P' `# i4 I5 `+ J: k
                    //comment out all methods, N=100000  202s               
    8 g/ J: k5 z/ y5 A        }
    ! K( I2 S. `% T( l
    0 S- v3 i$ g, ^        delete []b1;8 Z4 V) X( Z; M! F) `* L& K
            delete []b2;

    $ E' C: T* k6 K& F+ ^& R- K# H
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    16#
    发表于 2022-9-27 00:15:38 | 只看该作者
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?- J' g" S; n7 F9 A, J# o
    7 C/ G6 E2 j8 y' E7 J! n
    你第二个试验里面的j在循环里面又重新定义了啊,你确定真的跑了6000次?! N; a& o. f5 p
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    17#
     楼主| 发表于 2022-9-27 01:16:03 | 只看该作者
    机器猫 发表于 2022-9-27 00:15
    9 z% C/ X  a# T0 T: P瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    * l1 f& F; B8 x% ]8 z
    9 G' l: D* f9 W0 d5 y2 w' [4 |. P你第二个试验里面的j在循环里面又重新定义 ...
    5 x* k* c% z9 ~6 X
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL
      }5 k5 I) Q, u% o2 s& i; p
    ; h2 L6 g! i: |4 `不和它较劲了,瞎耽误工夫,我已经转到 ubuntu, 也准备顺便试试 avx2 向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    18#
    发表于 2022-9-27 02:06:58 | 只看该作者
    雷达 发表于 2022-9-27 01:16" @- ]) r  i8 D  k
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL
    ( t+ J; M; L, e# k% b: b' T, `3 e8 o( V
    不和它 ...
    ) {6 E9 e8 g  `) y
    7 j1 N& r) o. m( u0 B
    不过可以试试我说的register变量。前一个试验j是混在一堆其它变量里一起定义的,很有可能是在stack上,这样内存读写会更多,要是再碰上每次都需要加载cache就更慢了。
    ' K" g4 x+ f! z6 i后面一个是在循环那里定义的,说不定编译器就把它优化成register变量了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    20#
    发表于 2022-9-27 20:29:50 | 只看该作者
    雷达 发表于 2022-9-24 23:54
    . X! m3 g3 h5 ^( ?. ]; Y' J+ kvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    $ _' ]& S& l$ N{
    . A: f" z' y2 O8 Y        comp temp, xtimesy;
    3 \; Y7 |; r* ]8 P0 h$ T8 n
    这个code里面如果Openmp没有被注释掉的话,那么temp那个变量应该是定义在循环里面,否则线程之间会存在争夺写入那个temp的风险。
    . w; ^/ R( W% Q9 w) }, M7 P' n: ?内层for循环如果没有内部操作的话,编译时应该被优化掉了,和你完全注册掉整个循环是一回事。可能你的编译设置没有打开优化?
    0 X$ ~0 T7 p! u: cVS社区版没有问题,我工作用的就是社区版,设置正常的话不会比商业版差。以前游说头头用Intel Compiler,他说不想花钱,而且差不了多少,就一直用到现在。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-19 09:00 , Processed in 0.073560 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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