设为首页收藏本站

爱吱声

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2022-9-24 22:54:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    C++ 比 Octave 慢好多,怎么破?
    0 h: x0 ^2 z& z0 v
    ) {2 H* G9 z. O. B自相关两层循环,内层循环涉及浮点数计算,试验了一下把内层循环内部全都 comment out 只留个壳子,  但空的内层循环本身就把速度拉下来了,看来问题并不在浮点计算。
    . w) u2 @" p- F  t: o7 x
    - D6 G/ f6 P# {' B0 L+ Y& s9 a速度优化问题真的很有意思啊。
    $ I8 Y* t: v' o
    " o' N0 b; e: P( e( K欢迎大家继续讨论

    评分

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

    查看全部评分

  • TA的每日心情
    开心
    前天 01:42
  • 签到天数: 1883 天

    [LV.Master]无

    沙发
    发表于 2022-9-24 23:04:16 | 只看该作者
    拉下来?拉多少?
    $ P& W. l/ m/ ?" p! S把代码贴上来看看?
    ' `: C! M2 y" V% b$ L
    2 I7 l( {2 B- F+ s1 }' u. O难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    板凳
    发表于 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 编辑
    0 h; h1 _& n$ @
    数值分析 发表于 2022-9-24 23:04
    , a8 `2 j# d5 V7 |. P8 i拉下来?拉多少?- Q) F) k1 x: _' w: ~0 P  s/ Y
    把代码贴上来看看?

    ) v: ^. }1 U! R1 ?$ v
    & G% f" X" }" V& L" evoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB). U# A, e0 C4 n4 W+ A- O
    {
    , F: w$ p* k/ w0 k        comp temp, xtimesy;$ ?$ m. G8 O! k8 i: e% T
            xtimesy.re = 0;. S& C9 \9 |; N- d' [) Y
            xtimesy.im = 0;2 y3 A, u* |9 I- o$ j3 i8 A. p% U
            int j0 = lenB - 1;
    / P% M3 s" ?0 e5 b, ^  ?; N        int    i, j, i1, reali;' V$ y( @/ B; ]' v5 M. }
            if (lenA % 2 == 1)
    6 C5 C& M1 `/ `                reali = lenA + 1;; z/ k2 \- z5 {/ j( p
            else9 L: l# K7 A7 q. S8 j3 u' }/ h
                    reali = lenA;
    # S4 q, \. f/ t* R! _: @' r2 M        reali /= 2;
    ! q2 k& x1 Q* w# @; {( ]8 @
    . C. D1 H: A3 \, x/ k2 y        int nconv = reali + lenB;
    9 n/ F$ g: A) |7 C, Y        //#pragma omp parallel for
    % G3 Z0 y" W9 D        for (i = reali; i < nconv; i++)
    , U. \5 a1 ]7 c; a# d        {4 X7 Q8 l6 E3 D; W: R  T. r
                    temp.re = 0;- ]0 a6 J7 c9 Q/ D% ?
                    temp.im = 0;; d# Y4 r' B+ E4 L* j6 G
                    i1 = i;
    ! X$ ?3 U+ k& s+ }& _                for (j = j0; j >= 0; j--)
    ' I* j  u0 g! b: I' x                {
    ( E% n" A( O# x% Z4 q1 `6 `                        /* floating date operation */1 O8 A" Y# z& y
                    }

    ! d7 C# y0 L8 g# Y% e        }: k$ u. [6 s7 w* A6 v
    }
    9 m6 t) ^; V# R0 a" S' t! Q. c7 w6 U6 |" o
    xcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样2 f' J" o  M$ v5 Y7 _0 f0 U
    . V. g4 `) h1 ^; `7 g4 O9 U
    红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。
      l' [4 W) Z8 _2 Y现在call xcorr 100次,耗时78s." {1 V, `1 n4 \$ B3 d( _& A

    9 y4 {1 ?0 q# y# ^9 j5 x如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s.
    * I6 N/ w' M  {% l7 p
    0 ?+ H% O" R1 k; |6 e. H
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    6#
     楼主| 发表于 2022-9-25 00:17:17 | 只看该作者
    风雨无阻 发表于 2022-9-24 23:332 n/ W* e  S0 X( J
    Maybe Debug mode?
    ! h- k9 r$ Q- b

    - r; L2 L+ V* Y% ?& E% l) b不应该,看我上面的回复。& m1 Y5 ]% C5 r- N
    ) r4 N0 z- v# c3 V( J
    我更怀疑是 VS 社区版的问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    前天 01:42
  • 签到天数: 1883 天

    [LV.Master]无

    7#
    发表于 2022-9-25 00:20:10 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑 6 w* c0 u4 J% R
    雷达 发表于 2022-9-24 23:544 O! s' g* O/ e( Q) r( H) U
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)! g5 n+ Z' x9 k( C/ m, z8 \9 A5 `
    {
    * y, k) `$ e  t6 c4 L        comp temp, xtimesy;
    4 w# k; D- i- _6 |0 r4 I
      v# F- j  v* n# F; D1 M
    这个不是这么比的吧。。。8 j4 R! S+ E; M& {
    + l# d! I, W- i# [% `( R
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    0 |0 k$ _! Q2 D0 |
    % A* C9 M5 M8 n" f7 X9 ]而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    8#
     楼主| 发表于 2022-9-25 00:46:56 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 01:09 编辑 ! Z1 @( ~! |0 t8 J
    数值分析 发表于 2022-9-25 00:20, @* R+ k2 |' N5 L( r1 t8 L! h
    这个不是这么比的吧。。。
    , A$ ~* B! u, w* N' A- ~, J/ R$ K/ c( w, @9 G
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    & V0 m8 k1 w- }% Z+ A  O7 `! k

    " b. ^0 O2 ^; T; n) V有道理。
    ) l$ Q0 i1 {0 t$ {6 N/ m2 B# B所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,记得 numeric 库里有算向量内积的,我回头试试。8 K  u6 c( i: S" q# x

    1 g1 A' K0 d: d: \5 r2 d9 U我先尝试尽量用标准库,一个小程序,不想搞得太复杂。多谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2022-9-25 01:27:53 | 只看该作者
    雷达 发表于 2022-9-25 00:46
    - ?1 O0 x3 ^" Z- B; ^' m有道理。
    ) t5 E9 }9 g, y所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...

    : w$ @  }+ m% o5 C% d8 r* N& V你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多
    % A0 D: m# Z6 l$ n& oWhy is the loop instruction slow? Couldn't Intel have implemented it efficiently?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2022-9-25 01:48:51 | 只看该作者
    数值分析 发表于 2022-9-25 00:203 q! u2 d( g, ^
    这个不是这么比的吧。。。
    + K- Q  L9 X( n% l
    # ^& S& r$ }- z  [! a$ m+ v您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    而加上内循环,光jmp和dec指令就至少多执行了6000个
    , ^" J9 |" \+ f2 X
      t  ~8 V- t, _. C* G  M$ J
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果循环这样跑,花不了多少时间。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    前天 01:42
  • 签到天数: 1883 天

    [LV.Master]无

    11#
    发表于 2022-9-25 02:06:44 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 02:16 编辑 6 b" `$ N* o! a7 U0 _. g& a
    沉宝 发表于 2022-9-25 01:482 v8 j5 o- r' k: t) S
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...
    ; O2 O, r: S' P  m: ~2 T
    * ~5 {- s1 R( \. v# I
    是的,兄台说的对。
    : ~( y5 L, A0 H9 z3 v# i5 [
    . z* E, ?. S2 u' [' T* H其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。) X* n! f' A4 [% @( k% A
    : n5 r2 @& M  G0 U
    雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。
    3 z8 X& n6 U, Q  h. ~" a) F. U* a. j1 M6 ?
    比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。+ F) b) V' \; h$ c5 ~( G

    5 ~, T" ~' S6 b) q/ O* s' e当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    12#
     楼主| 发表于 2022-9-25 04:47:43 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 04:49 编辑 ! L) G; R) P! H; W& J+ e" w
    沉宝 发表于 2022-9-25 01:27) ^" f. b5 A6 u9 p! S
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子 ...

    1 X( c$ e7 O# v/ `) l' ~6 ^- q
    7 @; s4 l7 k  q% t8 x又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差一倍,我上面这个差的太多了。% c. s6 G! y! E
      B6 O( \6 F1 E' j7 x
    我已经完全懵了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2022-9-25 05:51:23 | 只看该作者
    雷达 发表于 2022-9-25 04:47
    9 X) A8 H( r- ?2 k又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    " }8 _3 Z% n6 p0 s  I
    时间差一倍的结果可以接受。
    4 U  J9 h% K5 x. p2 m# }9 g; y; ^8 N7 F- J/ [: L  M2 G4 A
    你还是用profile工具看看吧。现在大家都主观瞎猜。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    前天 01:42
  • 签到天数: 1883 天

    [LV.Master]无

    14#
    发表于 2022-9-25 14:58:59 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑
    0 o' ^. ?) p0 D: C8 m/ H
    雷达 发表于 2022-9-25 04:47/ u, E; I) B  o9 U& o% N; b. s
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    + o5 m* v, e( r4 `# T& h2 w! V
    0 l$ d% U* x  l+ `  c& c

    ! d+ K. E; H5 l+ C3 f2 f# {6 y7 H5 j( {7 B$ B  v. Z# ^& v
    能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    15#
     楼主| 发表于 2022-9-26 01:30:03 | 只看该作者
    本帖最后由 雷达 于 2022-9-27 01:17 编辑 ; r0 c3 `3 ^+ K) [
    数值分析 发表于 2022-9-25 14:58" j3 c# E  J# R- J, d
    能不能把这个也贴上来,看看和上一个有什么不同?
    & a' N. U- l3 V  f0 Q% o' ]
    理了理思路,重新做了一个测试。
    4 Y1 a, L" W/ [4 m* C3 }& x% a, ~做了两个 vector 和 两个 float *, 都长 1000000 a+ ]0 ]* t0 W6 |) `2 g) V7 ~
    外循环 6000,里面先做随机数生成,模拟真实环境,避免数据的 cache.
    . g' m, S+ H' o. v* J
      v2 H: P  K! T! w# y( |. u内循环试了4种方法,6 J6 S! C# Y  G$ J
    1. 直接调用 vector inner_product 247s
    9 T" Z5 K6 I/ ~, k+ [2. vector 循环点乘累加 237s; n, H* j2 i3 T
    3. float * 循环点乘累加 204s
    4 H4 g  z; u2 `: {4. 空循环 100000 次 202s
    ' M9 d& o8 S9 H% u$ U
      K9 ]% y: V3 m8 E不做内循环 200s) x8 `2 s* y: V/ I, p0 d% m- w" c

    4 Z1 q- H# a" I& p3 ~1 V  I, F7 r你昨天说的对,内循环本身占比是很小的,大头在其他处理。# [6 ]- J. B" A; w; f
    另外可以看到, float * 循环点乘累加 并不差,比用vector 还更快。& R0 R3 H) a& V# W. W# x

    9 q; P; M. y( v7 K, G1 C至于我那个原始程序,还有一些疑问,见5楼,其他都不变仅仅是有无空的内循环就有很大不同,这是不对的,也许有一些其他缺陷我没有看到。(也许可以改成 while 试试)4 s" [1 i4 `6 u% _6 `: s

    5 k2 m3 x4 {3 L1 }- }; x(为什么下面我贴的  b1 加 方括号里的 i , 显示出来却是 b1 ?方括号 i 消失了。 LOL . 改成  jj 好了,原来 方括号里的 i 是斜体标志  LOL)
    * I# v- W# V3 U4 `7 R/ k" V. o$ v+ @
            std::vector < float > vec1(N);) ^% q  K7 p/ O: ~0 l0 q/ W
            std::vector < float > vec2(N);# v9 x  K# H% F* A; p2 r6 q
            float* b1 = new float[N];6 q( ]9 \, A; D6 g4 m; I" G+ a
            float* b2 = new float[N];8 u9 D/ [; _" u  C9 q

    / W7 m7 q+ o. ~8 J: ]5 m/ b$ x8 N        for (int j = 0; j < 6000; j++)1 f  I8 C- w5 j: v
            {
    ' s0 ?7 u2 ~, R* M/ K/ M; E% u                std::generate(vec1.begin(), vec1.end(), []() {
    4 ^) B+ O+ C/ N8 a4 P                        return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 23.23));;/ B5 o  q! L9 [+ Q1 H' i
                            });- Z9 }6 B2 e$ `4 W" l- g

    * s# m. D4 |8 Y* u& p( B# u% B                std::generate(vec2.begin(), vec2.end(), []() {
    . A' `5 q8 ]4 D1 x. B5 B& J                        return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 24.31));;# }5 w. @) F6 `0 a( I/ q' c& H
                            });' [2 Y& ~$ X& A/ c7 d$ J# u
    ; h) V: b8 e4 O9 i( q" ]1 N3 @
                    for (size_t jj = 0; jj < vec1.size(); jj++)
    6 H5 m5 i, o% q                {; ?2 v) s4 D' T
                            b1[jj] = vec1[jj];# P9 [3 c5 G% x. s
                    }
    / p( @  s# M7 t4 z" Q
    % d0 `/ I6 F" y. K+ U! I                for (size_t jj = 0; jj < vec2.size(); jj++)4 T( v$ l' ^! h& T  Q3 E# w) T9 M
                    {' O) D3 j0 m( a
                            b2[jj] = vec2[jj];+ Q4 E/ R! u5 g
                    }
    , _0 G" x% q& f$ T- R* T+ q( ?! {9 i# B7 D
                    //Method - 1  N=100000 247s  ) R7 ~* ^! t( m/ Y/ [* i! a
                    //fresult = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);
    + B) ^# ?) A1 V0 m" C                                
    0 a1 B1 `' |5 I1 k                //Method - 2  N=100000  237s5 U2 e, G* ~# f; m$ F8 P
                    /*
    1 n# n4 G/ M5 W# O. ]' x' ]% \$ |# p                for (int jj = 0; jj < N ; jj++)" m  O2 ?6 d( c
                    {# a; e0 |! B; l7 n
                            fresult += vec1[jj] * vec2[jj];
    9 @$ p* ?4 ^" ^" j                }
    7 M+ K# [; f3 `9 V+ v9 {                */
    6 O4 W  h; P9 ^' z# V( h                                
    , A7 D6 x, V- a, M9 ?. U; a' ~                //Method - 3  N=100000 204s( h. s( U1 T: t* a* I
                    /*- b- L2 x3 g( X4 S( r& L3 F3 X$ `$ R+ J, G
                    for (int jj = 0; jj < N; jj++)! L- [: R1 `9 m* Q6 m
                    {  B6 u5 C$ _' o8 T- s
                            fresult += b1[jj] * b2[jj];+ x# Z5 M: ^6 W1 F( V% g
                    }5 d- B" M# b9 c7 H
                    */1 o% B# R# ?$ w! q! q
    9 P8 Z7 Z, I& ]* M
                    //Method - 4   202s% m, q! ~' O1 d# R
                    /*5 u1 p  p6 Q: h: z0 x2 O/ n
                    for (int jj = 0; jj < N; jj++)
    & r- X5 f: h: h  v: o                {) i8 v9 ~5 c7 b# y$ n
                            2 A3 J& ]  n6 y! O/ P& V
                    }
    3 {( x8 w" A1 N, R                */- G/ B, H) Y& @/ O# g  K
                    //comment out all methods, N=100000  202s               
    . R9 d, Z/ e0 u! p) D        }: m. Y9 U) e3 O
    $ \& V/ B- d1 |; S% d
            delete []b1;
    ( ?9 ^  \* f( \        delete []b2;
      Y' O+ g% U; D# A% A: D7 D" y
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    16#
    发表于 2022-9-27 00:15:38 | 只看该作者
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    # ]* r: |3 [! N  U+ B4 @! M: l# v
    你第二个试验里面的j在循环里面又重新定义了啊,你确定真的跑了6000次?
    : L3 [2 g9 C5 ]- A' B" ^7 i& d4 A
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    17#
     楼主| 发表于 2022-9-27 01:16:03 | 只看该作者
    机器猫 发表于 2022-9-27 00:15* |. y3 }* z9 \# @6 i
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    ) i* v' I7 W6 o+ |. y: A" r4 y- s( q1 [. l+ x
    你第二个试验里面的j在循环里面又重新定义 ...
    + c* E/ f, F- z4 R' s
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL4 q9 Q5 E2 S: _; {

    ( P* o& z  L: ?& F不和它较劲了,瞎耽误工夫,我已经转到 ubuntu, 也准备顺便试试 avx2 向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    18#
    发表于 2022-9-27 02:06:58 | 只看该作者
    雷达 发表于 2022-9-27 01:16: R  D+ a" t5 `. @9 p
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL
    " c: E" W/ y! }2 h1 z1 k2 e
    ! m$ O, A) }5 y不和它 ...

    0 y- S( r/ a, G- p/ K1 j9 w- {) v/ K% ^* m8 |3 `
    不过可以试试我说的register变量。前一个试验j是混在一堆其它变量里一起定义的,很有可能是在stack上,这样内存读写会更多,要是再碰上每次都需要加载cache就更慢了。: \: K% A3 ?. Q% {! R
    后面一个是在循环那里定义的,说不定编译器就把它优化成register变量了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    20#
    发表于 2022-9-27 20:29:50 | 只看该作者
    雷达 发表于 2022-9-24 23:54
    3 C' L; {2 |. M% pvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    / ~% t4 ]6 o) G! ^{
    : e- v& A9 B* \. f7 ~8 b        comp temp, xtimesy;
    , t& ]- J8 z$ l/ Y
    这个code里面如果Openmp没有被注释掉的话,那么temp那个变量应该是定义在循环里面,否则线程之间会存在争夺写入那个temp的风险。2 d, M" P2 @/ n
    内层for循环如果没有内部操作的话,编译时应该被优化掉了,和你完全注册掉整个循环是一回事。可能你的编译设置没有打开优化?
    * u1 ~. g. Q6 [* l8 N1 iVS社区版没有问题,我工作用的就是社区版,设置正常的话不会比商业版差。以前游说头头用Intel Compiler,他说不想花钱,而且差不了多少,就一直用到现在。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-5-10 01:55 , Processed in 0.052671 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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