设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
12
返回列表 发新帖
楼主: 雷达
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

21#
发表于 2022-9-27 20:39:22 | 只看该作者
雷达 发表于 2022-9-26 01:30* E8 ~0 A' Y3 C# W. l5 R4 d( J
理了理思路,重新做了一个测试。7 x, q# z( G4 |. [) D
做了两个 vector 和 两个 float *, 都长 100000
+ x# |$ X- D2 o; E外循环 6000,里面先做随 ...

$ u" @2 Z# ~5 t& v. Y8 E4 q: U这个时间是从哪里开始算的?
, Q1 V/ [3 E1 g  O( V9 E; [我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, 用了vector那个因为有vector的额外开销,多了几十秒。3 S: U& f& W/ c2 W, O. P( T5 K
按照两个10万个数字的相关计算的规模来估计的话,两秒都算很长很长了。这个结果真的很奇怪。
回复 支持 反对

使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    22#
     楼主| 发表于 2022-9-27 22:41:56 | 只看该作者
    雷声 发表于 2022-9-27 20:39
    $ G/ o8 L, I& u8 [/ J这个时间是从哪里开始算的?
    % M. j0 }* Y, |. u我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, ...

      a+ J- H" H( W$ o) N: y我不管它了,回头 linux 下换g++重新编译,顺便加上你们建议的向量化。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2025-12-23 14:18
  • 签到天数: 1669 天

    [LV.Master]无

    23#
    发表于 2022-9-28 00:12:35 | 只看该作者
    你这个循环主要的计算时间是那个rand,这个循环本身占用时间微乎其微。4 `0 o/ M1 q% C# K
    你的空循环,如果是现在的代码,编译器很可能完全不生成对应代码,因为没有任何输出或者修改变量,所以可以看到时间都是202S。你可以认为啥都不干的时间就是那么多。# J6 M8 N* E* J; f1 F' G4 L
    与此对应用数组(指针)花了2S& e1 P6 b7 W+ F8 x* X' E4 E" O/ R
    你用vec1[jj]*vec2[jj]理论上不应该差30多秒,这里很可能是你对vector的操作带来了内存操作,你可以试试把初始化挪出循环然后再比较,理论上vector的随机访问和数组应该几乎没什么区别。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
    发表于 2022-9-28 00:29:10 | 只看该作者
    雷达 发表于 2022-9-24 23:54: |+ _5 C, k9 D& j( r& G
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)& E; P% S' v6 [  Q  _
    {" A  `, V" ]) C  |5 Z7 J! ?# r
            comp temp, xtimesy;

    ; |$ E1 y5 w8 G$ \3 Y0 Q# O我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗' V. |5 b. k; V4 X
    , A. q& H9 X" a( z5 p, |
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    25#
     楼主| 发表于 2022-9-28 00:49:59 | 只看该作者
    opensrc 发表于 2022-9-28 00:29
    2 }& A" P+ T' i- _' C1 L3 _# t8 V我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗7 T  ^9 t1 p) E+ i, P4 f/ B

    4 x+ l+ Z4 R% m6 @1 \ ...

    3 E7 P7 `3 U& `8 _( T. B- F" P* g你是对的,是我搞错了。确实没有优化的情况下,空循环如果次数够长本来就应该耗时较大。我搞错的原因是在不自觉得与 octave 比较,而实际上 octave 是优化过的,和是不是空循环没关系,这种不同条件的比较是没意义的。- l1 ]. K3 D5 O; J: s& d4 g' B

    4 c/ `' a/ [% Z( c2 B2 r雷声网友说的也对,空循环应该被编译器优化掉,我的编译器设置有问题。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    26#
     楼主| 发表于 2022-9-28 00:56:28 | 只看该作者
    本帖最后由 雷达 于 2022-9-28 01:09 编辑
    9 q* A* i6 n) Q3 V1 c0 C: g% s0 T* c/ f9 d  i9 L/ P* h! m+ Y; W7 Y, `
    是我自己的理解有误,没有优化的情况下,空循环如果次数够长本来就应该耗时较大。. c7 z' `- q) t3 H! J
    有空时我会试试 SIMD和并行,看看能提高多少。
    " M, X- R, F- p% p% `' L$ M" B过去7、8 年没有正经用C++ 写过东西,没有 sense 了
    % b& S7 \7 X* @% M  l6 d  A' k谢谢大家的讨论,I learded a lot.  红包已发  
    6 o1 a. D1 c; M6 a& |. n8 u1 {, y: K/ _% b0 h1 |" `3 N

      Q1 @- @- o8 w5 k9 ^# X5 u
    ( ?  B. p" v  h9 }$ ?) I4 p
    : T; G+ _9 ?) D, @" L& c
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-21 10:43 , Processed in 0.061656 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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