设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2022-9-24 22:54:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    C++ 比 Octave 慢好多,怎么破?- I: K3 P+ _% Y' y
    ; c3 Z/ o' K+ a' O; S! g& l
    自相关两层循环,内层循环涉及浮点数计算,试验了一下把内层循环内部全都 comment out 只留个壳子,  但空的内层循环本身就把速度拉下来了,看来问题并不在浮点计算。, \1 o& x/ U" C# g

      C) ^; T6 @% u9 d; @. o+ b速度优化问题真的很有意思啊。! M, `0 C1 ?9 l1 k; S5 h: Y8 x

    $ w2 l- `, N$ M* d欢迎大家继续讨论

    评分

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

    查看全部评分

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

    [LV.Master]无

    沙发
    发表于 2022-9-24 23:04:16 | 只看该作者
    拉下来?拉多少?: Y" T  I" q- I+ e# ^* [
    把代码贴上来看看?
    9 Z$ r: \+ G9 M/ |
    4 [: `) b7 {, g难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    板凳
    发表于 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 N2 u1 v+ @1 f* n
    数值分析 发表于 2022-9-24 23:045 f8 A3 ^$ O. o& K: S: B
    拉下来?拉多少?+ {& c) |1 U$ j% y; [( W6 J
    把代码贴上来看看?

    % W% {# B0 X9 a+ t) n6 Y4 h4 _0 L3 H
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)# T+ ]# O6 O! y
    {
    % i8 G. q0 O$ g, i6 o9 B& W* f        comp temp, xtimesy;
    : [) N: J2 G0 Z. R3 F3 l+ E! l) X2 f        xtimesy.re = 0;
    4 `% {$ ]- z# z' V5 S7 a  `        xtimesy.im = 0;$ K: N/ k1 e6 \0 p3 u
            int j0 = lenB - 1;
    3 M7 N6 `5 b. W0 \5 c        int    i, j, i1, reali;
    % q$ W& Y: C: B  O  N! m        if (lenA % 2 == 1)( G7 L0 b2 A0 T: U( l2 ^
                    reali = lenA + 1;
    / M6 \8 c6 [4 {8 u* {& p0 l        else
    + c) l' P* @* ^+ L0 m- M+ k; v                reali = lenA;
    ; ~: d" Y. s2 e! m/ Z: ]        reali /= 2;
    " |2 T9 G2 ~& l/ I3 S  D$ j/ a7 O* f' `8 I7 N
            int nconv = reali + lenB;
    , F# [+ k# i7 J" \3 |! w' G        //#pragma omp parallel for
    $ v& k8 o- `1 K$ d3 h5 y" u        for (i = reali; i < nconv; i++)
    $ N2 u2 V) S. N! T! b+ v        {8 C7 I& t' B( _3 v( w0 t) ~
                    temp.re = 0;& T$ o' d( E; E; H
                    temp.im = 0;2 M% K- m4 M) v% {0 T! K9 b0 g
                    i1 = i;; |2 Y* S9 |7 |# }
                    for (j = j0; j >= 0; j--)4 b) X; L' d6 }5 k/ a1 j
                    {/ R8 i6 H$ D  I
                            /* floating date operation */
    2 x5 t2 H0 n8 a0 c- A6 k7 R% v                }
    ' L. E2 w- _7 n6 j0 _) t6 c7 m6 n2 J
            }
    ) l! |1 i: r- h9 {, I}
    % r9 ~; e1 ~, C& \! l6 T& `8 f
      I6 J/ _* C3 F7 z7 wxcorr函数代码如上,comp是复数struct, 做过长度为11、19两个矢量的测试,和octave结果完全一样
    . a5 c; D! q  g2 W8 I  j! P: Y
    $ O* e3 O" y* m# m; V: R红色部分是内循环,现在其内部操作都comment out 了, j0大概是 6000。# E1 d' i% h- e8 a- L' r2 Q2 {' G
    现在call xcorr 100次,耗时78s." P7 b6 v. u9 z

    : b" n& K( c6 q' s如果把红色部分内循环本身完全comment out, call xcorr 1000次,耗时 <1s. $ k; N- u; H- v! y) q( R2 |

    ; ?* `' D7 x, _" i
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    6#
     楼主| 发表于 2022-9-25 00:17:17 | 只看该作者
    风雨无阻 发表于 2022-9-24 23:33
    7 b: ?: R- d" [3 v' N4 z" wMaybe Debug mode?

    9 e, t3 C6 G( z" p' E$ v) r
    6 L/ {/ S+ K/ u6 u不应该,看我上面的回复。
    + W' u0 _$ c/ e; d5 L; H. R& M: l- _/ h4 W* k
    我更怀疑是 VS 社区版的问题
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    7#
    发表于 2022-9-25 00:20:10 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑 9 I  M7 E6 i( [7 e# P
    雷达 发表于 2022-9-24 23:54
    : z. X# \7 G, ]0 P! wvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    & _" Y; _5 h" |2 O3 S8 `{
    ' L7 C$ ^( s. D: b3 Q        comp temp, xtimesy;
    4 m: l1 y- o) Y5 G, p& @3 m) }

    ! X4 T9 K, ^0 c  B这个不是这么比的吧。。。, }5 X# e% R. e2 T' W3 o
    ' S2 w9 c0 H8 z8 P" t
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    9 q+ F+ Z, h8 b4 q  I
      @( D0 h! v8 c( L& _+ H" O而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    8#
     楼主| 发表于 2022-9-25 00:46:56 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 01:09 编辑
    * {2 O( x; F7 N0 u  i. e
    数值分析 发表于 2022-9-25 00:209 [; k- p$ F, [; @: g0 H2 a# U
    这个不是这么比的吧。。。
    0 s- `: p' t" M; [, |3 l
    . m! k& Y$ q0 [0 X# ^- s% u$ v您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    : \8 q7 |' F% n; j( P7 Y, Z, i7 |+ c
    6 R/ X, w7 n" Z  c
    有道理。
    $ C$ _6 L" B! S, M' A所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,记得 numeric 库里有算向量内积的,我回头试试。2 \& h+ w4 v6 [6 l% D) S* }2 n# R$ {

    3 i2 u2 V  w  d我先尝试尽量用标准库,一个小程序,不想搞得太复杂。多谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2022-9-25 01:27:53 | 只看该作者
    雷达 发表于 2022-9-25 00:46
    , u0 i/ P$ P, p$ z& m3 r% O7 l有道理。5 [/ P3 O7 n) z# G
    所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...

    + t! [7 E- s" x8 z& t你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多
    + ^  b1 T9 C: e. EWhy is the loop instruction slow? Couldn't Intel have implemented it efficiently?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2022-9-25 01:48:51 | 只看该作者
    数值分析 发表于 2022-9-25 00:202 D+ K- J: l1 d! G6 h0 M& n' L' j
    这个不是这么比的吧。。。
    7 w1 }9 \2 ?# N6 N5 J! c7 L
    6 v& Y0 R1 j% y/ H7 v, ]  @* p' R您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    而加上内循环,光jmp和dec指令就至少多执行了6000个

    " ?# T: i  q, P* R) U# J& B) X9 B  i* E) W0 b& r2 F7 T! ?
    现在的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 编辑 ! f/ T2 c5 c6 \; b/ B$ Z
    沉宝 发表于 2022-9-25 01:48
    2 V) J, G, i- B7 C& ]+ v9 x( S现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...

    : g- K; u# Q+ ^5 U& S
      l2 W3 p) I1 R' i8 p是的,兄台说的对。6 ^3 G& p; D  o. }. ?) F2 N% w

    & A; t9 D9 E* I: H5 }, U其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。
    & o0 t% x" h# O7 y( D: k: z+ E, Y9 c+ }% f7 F
    雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。
    / L) l- f+ z' N7 h8 S0 Y+ L- v
    2 U# y6 E8 {0 W: F: a比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。  T8 B' _  x& V6 l1 I* o, z
    6 E) M9 c2 G: E. v: Z, w5 k
    当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    12#
     楼主| 发表于 2022-9-25 04:47:43 | 只看该作者
    本帖最后由 雷达 于 2022-9-25 04:49 编辑
    $ I+ w1 r; m) D% {6 _9 [
    沉宝 发表于 2022-9-25 01:27) Q3 @6 r, O4 ~2 [
    你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子 ...

    7 X7 J7 e! S# {; n9 Q
    4 W' c3 u" T' _! j5 w又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差一倍,我上面这个差的太多了。. Y0 a- Z# R' |6 j( K  d

    / K. j" ], K3 X7 e& q  W; e. M我已经完全懵了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2022-9-25 05:51:23 | 只看该作者
    雷达 发表于 2022-9-25 04:47+ \3 ^* p. u. P( z. h
    又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

      S# F/ L0 g1 _# i) `" ~时间差一倍的结果可以接受。* o. |# k/ I5 f- N
    3 [0 t" T+ b1 V
    你还是用profile工具看看吧。现在大家都主观瞎猜。
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    14#
    发表于 2022-9-25 14:58:59 | 只看该作者
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑
    , Q+ V5 y& {- H5 L
    雷达 发表于 2022-9-25 04:47
      b  n7 c; z5 q( K! T( T又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

    2 ?8 F; J) v$ l. _, v
    ) ?( r( q1 U; O" R0 T; X7 ?$ Q5 A! m

    % I5 Z- v* z' E, S, W8 l' E能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    15#
     楼主| 发表于 2022-9-26 01:30:03 | 只看该作者
    本帖最后由 雷达 于 2022-9-27 01:17 编辑 + F2 }! w5 Q7 S8 ^* s
    数值分析 发表于 2022-9-25 14:58, A4 y* [8 s: e5 @3 n
    能不能把这个也贴上来,看看和上一个有什么不同?

    - m# v  o. e4 U4 ?理了理思路,重新做了一个测试。+ F1 ?: D9 P0 A8 E9 r
    做了两个 vector 和 两个 float *, 都长 100000# I- t+ G  o  ~
    外循环 6000,里面先做随机数生成,模拟真实环境,避免数据的 cache.
    4 m, ]4 d( D5 [! ~' u0 q* v3 `" V) w* |' L$ h' x
    内循环试了4种方法,( t, @! m1 ?' A
    1. 直接调用 vector inner_product 247s
    * d% c$ n  `; D" z8 \! u8 v& y2. vector 循环点乘累加 237s/ t3 ]; u* V: n; B' [! p% U
    3. float * 循环点乘累加 204s/ H1 H. S- X" _7 r% m
    4. 空循环 100000 次 202s
    & `3 I" \8 p- ~2 H# S6 H$ ?2 p9 H- s2 }
    不做内循环 200s& F) Q; T: J7 G) Y! b
    ; X2 }: Z+ `6 D1 S
    你昨天说的对,内循环本身占比是很小的,大头在其他处理。1 ~" P$ d, Z% D) z" U9 q
    另外可以看到, float * 循环点乘累加 并不差,比用vector 还更快。0 v. M) I* Z* ~0 P& W; R
    * N# H' z  ?2 o: s/ N
    至于我那个原始程序,还有一些疑问,见5楼,其他都不变仅仅是有无空的内循环就有很大不同,这是不对的,也许有一些其他缺陷我没有看到。(也许可以改成 while 试试); O7 A  o, J+ _( T+ x

    1 E* N& L( [( e(为什么下面我贴的  b1 加 方括号里的 i , 显示出来却是 b1 ?方括号 i 消失了。 LOL . 改成  jj 好了,原来 方括号里的 i 是斜体标志  LOL)
    / ]7 J: i+ i! R
    8 n! d# z8 T. l3 E
            std::vector < float > vec1(N);; n: S: s( T, _3 u5 O
            std::vector < float > vec2(N);
      a2 Z$ r0 u) k4 X: n1 ]  w2 g5 r        float* b1 = new float[N];( C5 i/ g. \, u$ x1 R
            float* b2 = new float[N];
    & j5 [/ i9 i4 q' g! t* |( n  j( f
    0 G6 i) {0 f0 i        for (int j = 0; j < 6000; j++)1 I+ O" L  q$ E) X3 G
            {
    ( U# q  U4 T4 c  S                std::generate(vec1.begin(), vec1.end(), []() {6 f# N2 T. O, {) v5 V3 X% \( C( E
                            return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 23.23));;
    5 O; x. u' N1 S7 |- ?9 T                        });
    7 K# a. j* U. k8 E; s- X1 b3 W: k% K/ P, b' _
                    std::generate(vec2.begin(), vec2.end(), []() {
    ; R0 Y5 |0 B9 G2 ~                        return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 24.31));;9 r2 N# S- h. A5 o' J8 D& C
                            });
    4 o" F/ w* l" a$ _( h( @" p
    - ]; k4 Y1 G8 v" `4 Y+ a. C: _* D6 W                for (size_t jj = 0; jj < vec1.size(); jj++)/ ?$ p' ?) ?/ j9 a+ l
                    {
    / J1 \& D+ A# J6 `8 i3 D/ o' H                        b1[jj] = vec1[jj];; j# ~5 z  C/ m5 @7 k+ W* @
                    }
    6 w: x9 d$ V$ a/ K
    6 s8 A+ |9 y* g9 O2 H% }6 h6 G  B8 M                for (size_t jj = 0; jj < vec2.size(); jj++)+ `3 c/ E8 v/ R) W
                    {
    6 j+ r6 i2 X2 d  V; v$ y" N                        b2[jj] = vec2[jj];4 L$ w( X$ }/ B5 t! j- F
                    }6 U+ [/ n- z: c2 p0 P% _5 i- n
    . W8 [4 q) K- \% D/ G
                    //Method - 1  N=100000 247s  8 j4 P. _) H& L, i# t" w
                    //fresult = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);$ f% C0 C" i& M; N' \
                                    . ]; r% ]3 z' M6 u
                    //Method - 2  N=100000  237s  I/ N8 a  ~9 k) d
                    /*1 l* X3 ^% |- [4 h' q- F
                    for (int jj = 0; jj < N ; jj++)" n- B2 M, d2 ^3 m
                    {
    1 y- [0 z2 d* N( e( E9 k                        fresult += vec1[jj] * vec2[jj];8 _- W, s: @" D, ~2 p& x
                    }7 c/ j3 G- M' f  |* c1 x: N
                    */
    & s8 [' g% W) y& O                                ; V( d  p) [3 r; o3 _3 c% C
                    //Method - 3  N=100000 204s8 ]: b5 `  w" y5 k& O4 L  D
                    /*; A6 R, Q6 r+ J* T& I
                    for (int jj = 0; jj < N; jj++)
    % O& D# y1 k* @+ i7 t                {
    ; K" ~* @. F! d  h, y! z                        fresult += b1[jj] * b2[jj];
    9 \2 C. L7 X0 c2 d! s! F                }
    / L4 K+ L: }! V& b5 H                */
    4 F* u  m4 D% A# y
    , I5 C8 E! C* C! e; v  b                //Method - 4   202s- D* ]" X/ d7 h. a, f
                    /*5 ~2 N* a3 J! a
                    for (int jj = 0; jj < N; jj++)
    ! l- V# S3 Z- r( D7 U% U" }                {
    # g9 Q' x. s  B$ O: F$ `- d                        ) b6 U6 L) _3 _
                    }
    1 G0 d; u; _, c; ]; E5 E5 X' `                */; \7 J- ]2 q# L- W0 ~
                    //comment out all methods, N=100000  202s                ! f" P" Q+ _+ q# b# e
            }7 S6 B) [6 x% ~1 U3 N) ~/ l7 C

    * n- @& Z8 B  G( U$ P1 ?        delete []b1;6 W  ^% ~% w9 E3 s* M/ t7 S, Y
            delete []b2;

      M  ]0 Z) [9 r0 q: [  n+ k
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    16#
    发表于 2022-9-27 00:15:38 | 只看该作者
    瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?# ]0 e$ D/ W; Y
    : Z. Q, _$ ~8 d. Q( u, h
    你第二个试验里面的j在循环里面又重新定义了啊,你确定真的跑了6000次?- K) h5 `- x2 B4 b  ~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    17#
     楼主| 发表于 2022-9-27 01:16:03 | 只看该作者
    机器猫 发表于 2022-9-27 00:15
    3 D1 A$ i# {8 X瞎猜一下啊。把第一个的那个j定义成register变量会不会有不同?
    8 t5 D$ K7 ?* k) T/ K! n/ [* `7 o- P$ u
    你第二个试验里面的j在循环里面又重新定义 ...

    6 K: P8 o* F" X  T内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL
    * ^- I8 H8 {: G# o7 h" P1 r) t* P3 G/ l! D! U0 K& h2 }) \
    不和它较劲了,瞎耽误工夫,我已经转到 ubuntu, 也准备顺便试试 avx2 向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.1]炼气

    18#
    发表于 2022-9-27 02:06:58 | 只看该作者
    雷达 发表于 2022-9-27 01:16" b3 o7 u( G% ~
    内循环里面的 j 实际是 i, 为了规避爱坛显示的冲突帖子里临时改成了j, 现在是 jj 了。好累 、LOL3 b1 M# ^3 Y* Q

    4 e* U$ V5 s. g# V不和它 ...

    " p; M3 R+ [3 N" R, \& O  V) Q
    6 Y7 p  u6 z) Z1 {0 j不过可以试试我说的register变量。前一个试验j是混在一堆其它变量里一起定义的,很有可能是在stack上,这样内存读写会更多,要是再碰上每次都需要加载cache就更慢了。! q2 p% p* i$ W" g2 q( [
    后面一个是在循环那里定义的,说不定编译器就把它优化成register变量了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    20#
    发表于 2022-9-27 20:29:50 | 只看该作者
    雷达 发表于 2022-9-24 23:54, s7 t4 T) _: n& o
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)# |6 J- R! b+ o" K: r/ m: R
    {
    6 ~1 E/ A& {0 O        comp temp, xtimesy;

    $ A) `3 }- L6 J9 r+ V6 S2 a这个code里面如果Openmp没有被注释掉的话,那么temp那个变量应该是定义在循环里面,否则线程之间会存在争夺写入那个temp的风险。
    $ t9 \- _$ f( m; \9 K内层for循环如果没有内部操作的话,编译时应该被优化掉了,和你完全注册掉整个循环是一回事。可能你的编译设置没有打开优化?! j; l# X. S5 t6 v) Q; _
    VS社区版没有问题,我工作用的就是社区版,设置正常的话不会比商业版差。以前游说头头用Intel Compiler,他说不想花钱,而且差不了多少,就一直用到现在。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-9 06:49 , Processed in 0.096809 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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