设为首页收藏本站

爱吱声

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2022-9-24 22:54:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    C++ 比 Octave 慢好多,怎么破?
    / {( S# k: v( |7 m
    , V: _2 u* {$ A) k8 E/ i自相关两层循环,内层循环涉及浮点数计算,试验了一下把内层循环内部全都 comment out 只留个壳子,  但空的内层循环本身就把速度拉下来了,看来问题并不在浮点计算。
    , N; v5 X  |7 e( u4 T, d8 ]9 Q6 O3 I" E# [
    速度优化问题真的很有意思啊。
    ' \" W! G* g- Y( M$ r7 H  H
    5 f6 w( h; \# B7 a5 Q欢迎大家继续讨论

    评分

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

    查看全部评分

  • TA的每日心情

    9 小时前
  • 签到天数: 1813 天

    [LV.Master]无

    沙发
    发表于 2022-9-24 23:04:16 | 只看该作者
    拉下来?拉多少?" |: u3 H: t9 ~4 _
    把代码贴上来看看?& K$ C0 @3 s: Y+ F* D
    6 {, z6 t0 F: ^* l( W  a+ f
    难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-22 03:36
  • 签到天数: 120 天

    [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 编辑
    9 z) _$ Y5 q, x+ Z( a# ]
    数值分析 发表于 2022-9-24 23:04. f4 J7 q% v/ F' y
    拉下来?拉多少?8 u5 o4 W/ p; z$ k& {9 b
    把代码贴上来看看?
    2 F7 X8 [! M- T% H" S' g( e; Q+ W

    ( k- T5 W( ~% l, \/ `! V7 d0 p9 pvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    " V& t# _! T) l! E, `2 u{! k! O6 x3 |* ]8 j! ]
            comp temp, xtimesy;
    0 T! w0 ~# g, v8 R2 I9 l$ j0 O+ M# T        xtimesy.re = 0;0 d: @9 }0 M! H
            xtimesy.im = 0;
    : n0 a( X- [& ^        int j0 = lenB - 1;
    + c& f& D# H+ D- j6 u9 t        int    i, j, i1, reali;
    & V6 s. K: }5 o/ B& H: p% f1 N) n6 Y        if (lenA % 2 == 1)  a5 ~  t& v" R" Q2 v5 s
                    reali = lenA + 1;7 k6 ~4 \' f3 o9 V  s: h! W
            else
    0 G1 E( f9 Q$ w  D4 `                reali = lenA;
    ; f7 b' r9 W& V. E& ^- e4 k        reali /= 2;
    / @3 a( Z+ |& W6 Y. ^& C, c7 I6 p6 a
            int nconv = reali + lenB;
    * p9 P' i: Q" J6 t$ {        //#pragma omp parallel for
    - `. e" m8 ?6 K6 Q& V( Z        for (i = reali; i < nconv; i++)* F! [4 i: x1 D3 L! y/ k5 C) t
            {
    . e& _- m6 e( B% j% }                temp.re = 0;
    3 G! A6 e6 s  N4 |) f7 x3 Y                temp.im = 0;9 p/ g" W6 J: Z+ `; t* o
                    i1 = i;
    5 O8 ]9 z' E4 t; F- b! o5 X                for (j = j0; j >= 0; j--)
    , `  U* C4 s6 _' `( y                {
      x% q, y4 ?+ l) C                        /* floating date operation */' g; X. Q) |8 e% F4 N
                    }

    1 L  r  B- s  I5 Z7 ]9 Y        }
    . o" r3 \7 ^3 {$ X+ y3 r3 B6 i}
    ; q# r2 L1 n5 ^+ N! e' W! ~6 q
    : G( Q2 C) m9 T2 vxcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样
    & W! r( D. @4 i! j
    7 I0 O. `; f& F红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。
    $ a, V  \1 s/ g* z现在call xcorr 100次,耗时78s.
    0 Y% m6 d5 ?+ d  q8 J
    ' O! y) v3 d* ^如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s.
    & w9 y- E8 w: V8 z2 e- \+ b; V& S6 \2 l  c
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    6#
     楼主| 发表于 2022-9-25 00:17:17 | 只看该作者
    风雨无阻 发表于 2022-9-24 23:33, W0 k# E* v* x
    Maybe Debug mode?

    " z/ a- E5 P) E/ I1 j' |
    8 s5 ^3 V. J" F) z; G, w# j2 z$ x不应该,看我上面的回复。. E, j% K6 a0 t

    1 [( D! c# K4 `/ f6 R2 M我更怀疑是 VS 社区版的问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    9 小时前
  • 签到天数: 1813 天

    [LV.Master]无

    7#
    发表于 2022-9-25 00:20:10 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑
    6 a2 E& e1 g. @- D4 ?+ A
    雷达 发表于 2022-9-24 23:541 M& j+ W2 a" D& s- I$ G$ y
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)2 R$ v; q$ a" g& d4 j, F: `4 @3 O
    {5 u% @: M" V: z3 ^& c
            comp temp, xtimesy;

    9 q; z% j! G, x& N/ {7 E3 O  P! p# l) n  s# X
    这个不是这么比的吧。。。
      s- Z* t/ l% D: ?9 R2 Q. N, Z- ~. c1 \4 o: f! j* J
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    4 ?, _3 D* P( k1 r, J, j$ k- ~- g. W- b, F
    而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    8#
     楼主| 发表于 2022-9-25 00:46:56 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 01:09 编辑
    : u' [# P4 p' c/ m. t4 O' t
    数值分析 发表于 2022-9-25 00:20$ \; M" L8 V# P6 X7 N) @
    这个不是这么比的吧。。。3 K$ J1 C/ |6 Z" {  E

    . J) j$ |1 m3 m: A# l" f" p您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    ! U3 }8 u* C/ [2 {4 M- I" q3 a
    5 \+ h/ m# t: o1 A$ e
    有道理。1 v  U! }$ m( U" c' v
    所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,记得 numeric 库里有算向量内积的,我回头试试。" B3 j1 T# R# T  H2 m

    : b8 b* j) X) V" h我先尝试尽量用标准库,一个小程序,不想搞得太复杂。多谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2022-9-25 01:27:53 | 只看该作者
    雷达 发表于 2022-9-25 00:46
    ( Y" W7 h( K3 Q) R; y" l6 v# y有道理。
    ( ~& J% m. y# {: t. [3 v5 a所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...
    6 N& n+ R) G- Q  }% j
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多
    5 q4 e" n/ I* }9 IWhy is the loop instruction slow? Couldn't Intel have implemented it efficiently?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2022-9-25 01:48:51 | 只看该作者
    数值分析 发表于 2022-9-25 00:20
    2 x! p- z6 z$ I9 v4 ?这个不是这么比的吧。。。
    ) I! M) ^5 k" v' O7 m2 ?* }
    2 ~! i5 _- f8 u  }您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    而加上内循环,光jmp和dec指令就至少多执行了6000个
    * \( l2 v+ ^& X* I
    0 t) ^5 G4 y8 A0 n% I& b! L
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果循环这样跑,花不了多少时间。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    9 小时前
  • 签到天数: 1813 天

    [LV.Master]无

    11#
    发表于 2022-9-25 02:06:44 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 02:16 编辑 1 k: u. p1 f' d; H; t( t
    沉宝 发表于 2022-9-25 01:48" v1 |  I: e+ t7 Z& `  {- U- q# A$ i
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...
    $ l6 j, }, N) l$ ^

    7 {% T; d1 S: q1 V( a4 x! m是的,兄台说的对。
    6 L! P: Y% U6 h+ f0 E: H9 O* u9 P) M& @/ U
    其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。
    ) b7 @9 f$ P1 K* u8 w) `$ B
    $ K% P5 E+ Q+ E' f5 b雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。
      f1 q( z* e1 L4 U3 y1 ~( |% g; o; k) \0 S6 F, O6 O
    比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。
    # E, U, k/ X+ Z& @4 v4 G9 Y6 O/ c2 r8 R! }
    当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    12#
     楼主| 发表于 2022-9-25 04:47:43 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 04:49 编辑
    . U5 [% B( z: a3 @) o( ^
    沉宝 发表于 2022-9-25 01:27
    5 J7 ^+ F7 r" B4 E) m/ _你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子 ...

    3 K% Z6 X9 N: g  v5 W" D+ y% E( ]& d' N
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差一倍,我上面这个差的太多了。9 W8 Z7 k8 c) k

    2 R6 x- n7 d3 F+ m* ?- T我已经完全懵了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2022-9-25 05:51:23 | 只看该作者
    雷达 发表于 2022-9-25 04:47  ]9 B5 i) k5 c
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    & S9 L  }5 S5 U
    时间差一倍的结果可以接受。/ ]7 T) k, p- {( ]# l( {

    4 e' [) _" m2 d9 P8 _5 i2 x7 E你还是用profile工具看看吧。现在大家都主观瞎猜。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    9 小时前
  • 签到天数: 1813 天

    [LV.Master]无

    14#
    发表于 2022-9-25 14:58:59 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑
    2 F' R& f- v1 g- C8 ]1 P; _% a
    雷达 发表于 2022-9-25 04:47
    . }+ B& ^9 o+ b3 W" m- R( p" q又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    : N3 ~# [4 c  w' e1 R
    3 r; s) T. r( a  x# `8 G
    6 j3 I+ c, O& a* B, @
    % a6 B3 z% u# A" a- N; H* z7 M: K
    能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    15#
     楼主| 发表于 2022-9-26 01:30:03 | 只看该作者
    本帖最后由 雷达 于 2022-9-27 01:17 编辑
    1 G  z; M7 S7 E. q& B- ~
    数值分析 发表于 2022-9-25 14:58
    9 t  I4 A4 r) N" T5 r能不能把这个也贴上来,看看和上一个有什么不同?
    # c: _% p* z; h1 O. o
    理了理思路,重新做了一个测试。3 ?( h/ C7 q, w0 ?: B+ S# Z
    做了两个 vector 和 两个 float *, 都长 100000/ h7 x& X8 s0 `2 d: V, ?
    外循环 6000,里面先做随机数生成,模拟真实环境,避免数据的 cache.9 b, H. H. M  q8 J
    1 `( D1 u3 v; K! ^, [3 t
    内循环试了4种方法,
    7 q1 c8 V9 s% p. V! R1. 直接调用 vector inner_product 247s , t( M) [! H# F1 t' u
    2. vector 循环点乘累加 237s6 p4 l6 R5 a' e# {
    3. float * 循环点乘累加 204s" t  P. `: A0 q0 Z3 i
    4. 空循环 100000 次 202s0 O; {, `1 `1 T) F

    : v' N1 {% i  `" E3 i7 g不做内循环 200s2 z- U- Z' ]. G7 {
    - b+ i9 c- q& ^1 ~: z+ n
    你昨天说的对,内循环本身占比是很小的,大头在其他处理。6 d( g, Y4 \" _+ X( S: c
    另外可以看到, float * 循环点乘累加 并不差,比用vector 还更快。. D$ T6 l3 D; R. C( w& \
    ) T+ I8 O! ^! ^$ E2 z9 |4 A
    至于我那个原始程序,还有一些疑问,见5楼,其他都不变仅仅是有无空的内循环就有很大不同,这是不对的,也许有一些其他缺陷我没有看到。(也许可以改成 while 试试)
    / ?- \; L* E9 ~
    " T& a# W1 z. p% I/ L% h(为什么下面我贴的  b1 加 方括号里的 i , 显示出来却是 b1 ?方括号 i 消失了。 LOL . 改成  jj 好了,原来 方括号里的 i 是斜体标志  LOL)! E6 p  |' O# E
    4 t, g# a5 q5 p0 y
            std::vector < float > vec1(N);
    1 |4 d' c' Z* y        std::vector < float > vec2(N);+ ?9 T) e& f5 `' u, E& \% w
            float* b1 = new float[N];
    0 r( t; H: b, L$ E        float* b2 = new float[N];7 I- w. c+ r& o
    # r% {3 \8 e; a, ]7 }
            for (int j = 0; j < 6000; j++)
    - n! _4 Q1 f2 v, m+ C9 ~9 [        {
    . V: |" V3 ~$ K( p7 Z                std::generate(vec1.begin(), vec1.end(), []() {/ c$ K( B8 c6 i
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 23.23));;+ a7 \/ Y* e: T$ v
                            });
    ( N8 D% x. J6 i& V7 @& W+ P9 L$ p* o4 L5 U. E
                    std::generate(vec2.begin(), vec2.end(), []() {
    . |& j; t8 ]/ Q5 J/ G9 J                        return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 24.31));;
      r7 Q6 {  D) w, G                        });
    3 U: n5 k) h+ y* }$ H( V1 T
    & S4 o/ J, B& N2 E% F                for (size_t jj = 0; jj < vec1.size(); jj++): \3 i) S! q5 l. t1 K: T
                    {3 i* p2 n4 O; d) o9 Y; w- G5 v
                            b1[jj] = vec1[jj];
    ( a. [. B' N) g; F% n! J                }# B/ r9 \( S3 n5 j
    9 B  e( w: {2 k0 Z0 G  D2 _- L* \
                    for (size_t jj = 0; jj < vec2.size(); jj++)2 |; j2 u+ q8 v1 I% X
                    {! U6 C# F: r4 R' {* g/ G% }7 e
                            b2[jj] = vec2[jj];7 b) P" f7 Z9 o8 N) a- m! [0 o0 H
                    }) V. G& E1 B2 y4 V  q+ g
    # s/ W) a# n" }/ c7 _( H0 a9 J( v! F
                    //Method - 1  N=100000 247s  
    $ }- R, x* e0 T% y) ?( h1 o                //fresult = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);
    6 Z* ]& b+ d& s) x  \                                
    3 i3 Y& ^# ^: K# q" t                //Method - 2  N=100000  237s3 u5 ?8 e! z; m
                    /*" E% T: u; k8 c6 s) H
                    for (int jj = 0; jj < N ; jj++)
    $ @5 f5 U) V5 T' I) I                {% Z) ]% }5 X+ Y
                            fresult += vec1[jj] * vec2[jj];
    ) U( h3 t3 y4 c, M2 Y+ j) `# \                }% r- ~: A) b* E1 `
                    */! S3 r/ o% J# `6 i
                                    
    + y) R2 X) {/ H% F                //Method - 3  N=100000 204s% y- z4 U( v7 z; `
                    /*
    - g2 a' q( B* N* J! V4 F8 ?4 u                for (int jj = 0; jj < N; jj++)
    5 w9 k0 k3 f& X; [  S                {! U" z# [0 K; ~
                            fresult += b1[jj] * b2[jj];& E  H: @$ y9 [1 c+ d: M  q( i+ c4 p( x  ]
                    }
    6 s3 m; ]; j& g7 J; r5 e" G7 D6 W' K                */
    - I) x7 Y7 R8 b$ M* ~, p/ {. N
    ( [. {# w$ K7 x$ g                //Method - 4   202s1 L# G/ C8 v/ C. b1 X0 `
                    /*& b- Z* K: i7 {! I/ W
                    for (int jj = 0; jj < N; jj++)
    ; K$ R. w/ V9 Y5 c7 W                {8 d6 ~! ^0 F0 x
                            # \3 J; p$ S: J& v: a3 h! Q
                    }. r2 e3 m0 o/ R' p) U
                    */1 P3 [' G$ b$ h& B$ k! \
                    //comment out all methods, N=100000  202s                ( Q; U0 Y# A0 j- C
            }
    & ^+ t; G7 V. F* Q, x
    5 r' _* X; w! H" Y, c2 b        delete []b1;
    % R. \/ i; ~3 W. A" b# M        delete []b2;

    $ [* Z& Z" _& D& `
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    16#
    发表于 2022-9-27 00:15:38 | 只看该作者
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    5 I6 d4 I' p( {7 W; B  i7 _( A" X5 x
    你第二个试验里面的j在循环里面又重新定义了啊,你确定真的跑了6000次?* d1 C# ~: `  D* b0 a- ]! B: X
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    17#
     楼主| 发表于 2022-9-27 01:16:03 | 只看该作者
    机器猫 发表于 2022-9-27 00:150 G1 o4 K! d$ _2 d
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    . T, I: b  s- E# L- r+ B) g% A/ D' l- g1 ]/ t
    你第二个试验里面的j在循环里面又重新定义 ...

    . `" z" z  ?+ B内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL0 W: ~: ~* Y9 M! Y# ^# q. I

    ( o* |0 \# a$ H- g% V9 }1 a9 X不和它较劲了,瞎耽误工夫,我已经转到 ubuntu, 也准备顺便试试 avx2 向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    18#
    发表于 2022-9-27 02:06:58 | 只看该作者
    雷达 发表于 2022-9-27 01:16
    3 o$ P  {, `5 G) k. v7 [; O) I  c内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL8 E3 }, u4 w! j. c
    9 j  }( S0 ?* E
    不和它 ...

    * k* Q" z7 B# K, ~9 b  _* T( }( u: W  ~- R) b- M% ^9 ]
    不过可以试试我说的register变量。前一个试验j是混在一堆其它变量里一起定义的,很有可能是在stack上,这样内存读写会更多,要是再碰上每次都需要加载cache就更慢了。! S! Z8 b. l, z1 M1 ^9 M# k
    后面一个是在循环那里定义的,说不定编译器就把它优化成register变量了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    20#
    发表于 2022-9-27 20:29:50 | 只看该作者
    雷达 发表于 2022-9-24 23:547 v! R; F- l: g, h/ x$ `
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)" [! V" b2 W3 G
    {
    : k8 Z4 c) j! l* F3 q, |2 b! P- v' j        comp temp, xtimesy;

    ( }. ?( j2 f6 U这个code里面如果Openmp没有被注释掉的话,那么temp那个变量应该是定义在循环里面,否则线程之间会存在争夺写入那个temp的风险。5 ~/ @( p$ P4 L
    内层for循环如果没有内部操作的话,编译时应该被优化掉了,和你完全注册掉整个循环是一回事。可能你的编译设置没有打开优化?
    8 Y5 U( ~6 ~* Q3 w& c! rVS社区版没有问题,我工作用的就是社区版,设置正常的话不会比商业版差。以前游说头头用Intel Compiler,他说不想花钱,而且差不了多少,就一直用到现在。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-2-23 12:09 , Processed in 0.046486 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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