设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

21#
发表于 2022-9-27 20:39:22 | 只看该作者
雷达 发表于 2022-9-26 01:30
' T9 ^) |: C  w& |/ U1 W6 S理了理思路,重新做了一个测试。
  b7 ?6 Q* C7 e- W% k6 z: O8 Z做了两个 vector 和 两个 float *, 都长 100000
- }# K0 s( }: [( @" G3 B( d外循环 6000,里面先做随 ...
. y  ]6 t! c' e2 D0 `; ]
这个时间是从哪里开始算的?
$ ^3 v. E7 h, N$ Y* s: I我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, 用了vector那个因为有vector的额外开销,多了几十秒。7 }. Y3 e  d) X
按照两个10万个数字的相关计算的规模来估计的话,两秒都算很长很长了。这个结果真的很奇怪。
回复 支持 反对

使用道具 举报

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

    [LV.10]大乘

    22#
     楼主| 发表于 2022-9-27 22:41:56 | 只看该作者
    雷声 发表于 2022-9-27 20:39
    ! a+ {- F  @* |7 p. F) n: K这个时间是从哪里开始算的?: g6 s! J/ }" s' g/ K
    我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, ...
    ; N* @/ g2 u7 b, W" R3 L! N
    我不管它了,回头 linux 下换g++重新编译,顺便加上你们建议的向量化。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    昨天 13:05
  • 签到天数: 1642 天

    [LV.Master]无

    23#
    发表于 2022-9-28 00:12:35 | 只看该作者
    你这个循环主要的计算时间是那个rand,这个循环本身占用时间微乎其微。
    / e' r# N( F) p' ?2 L你的空循环,如果是现在的代码,编译器很可能完全不生成对应代码,因为没有任何输出或者修改变量,所以可以看到时间都是202S。你可以认为啥都不干的时间就是那么多。) {2 D9 d! A5 ]& p9 Q
    与此对应用数组(指针)花了2S* Q* r) P* I- @$ w
    你用vec1[jj]*vec2[jj]理论上不应该差30多秒,这里很可能是你对vector的操作带来了内存操作,你可以试试把初始化挪出循环然后再比较,理论上vector的随机访问和数组应该几乎没什么区别。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
    发表于 2022-9-28 00:29:10 | 只看该作者
    雷达 发表于 2022-9-24 23:54- N/ b$ S  U8 h+ [9 I: o; z
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)* D* P+ R6 T: |! I$ }3 G: H
    {
    & B. _+ S3 i, B$ v0 |. a        comp temp, xtimesy;
    # G. R) b4 d( c. B  H
    我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗
    ! C, x3 e2 H+ d9 {4 p" T8 Q, x8 W) A4 P$ z- G+ i; U
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    25#
     楼主| 发表于 2022-9-28 00:49:59 | 只看该作者
    opensrc 发表于 2022-9-28 00:29
    " {6 M4 w/ R+ q" F! J( `9 E我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗- f0 n" Q8 Z6 {' ?3 n

    . L) \( w5 i. }" p8 ?$ ] ...
    2 O6 _3 Z  a1 D& y0 O, m) S! ~5 M) i
    你是对的,是我搞错了。确实没有优化的情况下,空循环如果次数够长本来就应该耗时较大。我搞错的原因是在不自觉得与 octave 比较,而实际上 octave 是优化过的,和是不是空循环没关系,这种不同条件的比较是没意义的。3 Z9 t. U4 p' v* }$ k
    " _. d- c! z5 n2 D  M
    雷声网友说的也对,空循环应该被编译器优化掉,我的编译器设置有问题。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    26#
     楼主| 发表于 2022-9-28 00:56:28 | 只看该作者
    本帖最后由 雷达 于 2022-9-28 01:09 编辑 $ \+ G2 B1 E8 y& q0 d. P+ u, T
    % T: O- N8 K9 S" t0 k8 Y. b+ Y) b1 @
    是我自己的理解有误,没有优化的情况下,空循环如果次数够长本来就应该耗时较大。4 u; {9 S' g; a9 h/ {, D  I( V
    有空时我会试试 SIMD和并行,看看能提高多少。
    $ H; M" p  V# H1 V' z7 D过去7、8 年没有正经用C++ 写过东西,没有 sense 了 / V# v$ _" @6 c1 K
    谢谢大家的讨论,I learded a lot.  红包已发  # j9 r: q; N* T) a6 d  V. C

    3 `. B& M1 b. A1 ?( S$ [* s! |. B4 q" t) y: f
    ( G% {& j8 h5 H9 i$ E7 K. j

      Y& ]+ U+ v7 O8 e1 D$ \$ s. C" Q
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-7-19 17:05 , Processed in 0.042087 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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