设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

21#
发表于 2022-9-27 20:39:22 | 只看该作者
雷达 发表于 2022-9-26 01:300 O6 [* _9 j8 t
理了理思路,重新做了一个测试。
6 w% S6 Y& D$ ]4 M9 V1 T做了两个 vector 和 两个 float *, 都长 100000" ?( E$ ~6 ?$ @/ G  [" w, l
外循环 6000,里面先做随 ...

9 ~: x6 f2 \: |3 ?  b) \这个时间是从哪里开始算的?- F" a, ^3 R2 z! N
我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, 用了vector那个因为有vector的额外开销,多了几十秒。
5 P+ L0 M+ w" `1 Q, D( L1 z按照两个10万个数字的相关计算的规模来估计的话,两秒都算很长很长了。这个结果真的很奇怪。
回复 支持 反对

使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    22#
     楼主| 发表于 2022-9-27 22:41:56 | 只看该作者
    雷声 发表于 2022-9-27 20:39
    8 ^( D! j: s4 ^0 ?* l这个时间是从哪里开始算的?
    5 q( o( S. J) c# c8 ^8 Y我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, ...

    * R  y& o$ E$ k$ H7 ]我不管它了,回头 linux 下换g++重新编译,顺便加上你们建议的向量化。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2026-2-25 18:51
  • 签到天数: 1670 天

    [LV.Master]无

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

    使用道具 举报

    该用户从未签到

    24#
    发表于 2022-9-28 00:29:10 | 只看该作者
    雷达 发表于 2022-9-24 23:54; Z  ~. `9 U9 a$ e0 L
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    , f& q: C4 X3 ^- M8 j- N( a7 X{" ?3 y+ n# r! d( c' }2 R
            comp temp, xtimesy;

    ( u$ N( ^0 M+ p! k+ {, ]$ r我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗8 _& {. n2 ]& z$ p/ \, P
    - {8 M9 [8 B6 p
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    25#
     楼主| 发表于 2022-9-28 00:49:59 | 只看该作者
    opensrc 发表于 2022-9-28 00:293 o- a* A/ E) T& X# G! W
    我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗
    ! n) D7 `* Q. V$ O6 O8 M/ B+ A
    ; p+ ~! W4 e9 G) z2 n) } ...
    3 K* @6 C$ c) H
    你是对的,是我搞错了。确实没有优化的情况下,空循环如果次数够长本来就应该耗时较大。我搞错的原因是在不自觉得与 octave 比较,而实际上 octave 是优化过的,和是不是空循环没关系,这种不同条件的比较是没意义的。( v, q& a  T$ e3 N' T) L) O' ?2 W
    : x/ D- |( i- {  i: J2 g
    雷声网友说的也对,空循环应该被编译器优化掉,我的编译器设置有问题。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    26#
     楼主| 发表于 2022-9-28 00:56:28 | 只看该作者
    本帖最后由 雷达 于 2022-9-28 01:09 编辑 : c0 ?- \& C+ X" W

    . Q7 Q/ R2 O4 Z是我自己的理解有误,没有优化的情况下,空循环如果次数够长本来就应该耗时较大。
    . \6 Q8 [7 n/ L, \有空时我会试试 SIMD和并行,看看能提高多少。9 q, ?: `) \5 w& Y  \
    过去7、8 年没有正经用C++ 写过东西,没有 sense 了 - S0 Z' A- |; _0 b* Y' e# J" X
    谢谢大家的讨论,I learded a lot.  红包已发  ; U1 I" n$ |9 l
    * }3 y$ o4 c1 F) E- F% {) ?

    ) U; Z% C" X; k( J5 R
    $ @5 u9 N* ?4 d- ]2 b
    1 \+ f0 T; ~' g/ ]0 ]$ E
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-27 03:33 , Processed in 0.062800 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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