设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

21#
发表于 2022-9-27 20:39:22 | 只看该作者
雷达 发表于 2022-9-26 01:305 _' d! z8 _. V1 m% E
理了理思路,重新做了一个测试。+ D+ @: i" m/ L/ _* K1 J
做了两个 vector 和 两个 float *, 都长 100000
- m4 K% A2 H! R$ K# D0 S外循环 6000,里面先做随 ...
% S0 d5 i/ A) _+ Y( l) {
这个时间是从哪里开始算的?) S9 m5 Z5 K2 w+ A( u
我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, 用了vector那个因为有vector的额外开销,多了几十秒。
# e4 ?: l& h9 K9 y按照两个10万个数字的相关计算的规模来估计的话,两秒都算很长很长了。这个结果真的很奇怪。
回复 支持 反对

使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    22#
     楼主| 发表于 2022-9-27 22:41:56 | 只看该作者
    雷声 发表于 2022-9-27 20:39# ]" t: f# i% ~. f, m
    这个时间是从哪里开始算的?
    * q9 z! v3 }' C9 r; L' S我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, ...

    ( P$ ~0 B  _" `$ J$ z) @我不管它了,回头 linux 下换g++重新编译,顺便加上你们建议的向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    23#
    发表于 2022-9-28 00:12:35 | 只看该作者
    你这个循环主要的计算时间是那个rand,这个循环本身占用时间微乎其微。8 F2 d9 N6 B) b: ~' S5 T& t# Z/ t
    你的空循环,如果是现在的代码,编译器很可能完全不生成对应代码,因为没有任何输出或者修改变量,所以可以看到时间都是202S。你可以认为啥都不干的时间就是那么多。
    ; f0 K6 H' c, q' E0 l与此对应用数组(指针)花了2S4 U, R+ c# {; a3 K5 l
    你用vec1[jj]*vec2[jj]理论上不应该差30多秒,这里很可能是你对vector的操作带来了内存操作,你可以试试把初始化挪出循环然后再比较,理论上vector的随机访问和数组应该几乎没什么区别。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
    发表于 2022-9-28 00:29:10 | 只看该作者
    雷达 发表于 2022-9-24 23:54) v5 ?0 v+ y0 P3 ~
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    3 d: e+ i# k) V" z7 x* a5 I( ?6 H; i{
    " D7 ]6 |4 L8 ]  \0 m2 F  B        comp temp, xtimesy;

    & D  j5 B7 L- K" c  H7 T0 y0 T我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗
    ' k* p$ b3 T) D. S8 j! C7 @
    ( Z! q, s& U" |/ R" P8 `9 y
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    25#
     楼主| 发表于 2022-9-28 00:49:59 | 只看该作者
    opensrc 发表于 2022-9-28 00:29
    2 M* z+ `; a7 G我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗! f6 J5 r( h( g4 |' B% L

    5 ]. G+ c0 |$ U! Y2 K ...

    / M- P  H' y  [: E% C# x$ a你是对的,是我搞错了。确实没有优化的情况下,空循环如果次数够长本来就应该耗时较大。我搞错的原因是在不自觉得与 octave 比较,而实际上 octave 是优化过的,和是不是空循环没关系,这种不同条件的比较是没意义的。
    ; j) W' ^+ k0 z$ _1 q  ]: U. d7 P1 x3 S3 f& v3 ~/ A5 Z
    雷声网友说的也对,空循环应该被编译器优化掉,我的编译器设置有问题。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    26#
     楼主| 发表于 2022-9-28 00:56:28 | 只看该作者
    本帖最后由 雷达 于 2022-9-28 01:09 编辑
    / R8 f" P- U8 N+ C; `/ h' @& g# s7 \
    1 J+ R) X/ @* q) F* Z2 t是我自己的理解有误,没有优化的情况下,空循环如果次数够长本来就应该耗时较大。
    1 @1 x7 Q: V3 c4 ]  Q- s' g7 Y有空时我会试试 SIMD和并行,看看能提高多少。+ p$ M' {8 v9 x0 z. k" `: ?0 p
    过去7、8 年没有正经用C++ 写过东西,没有 sense 了 8 e' {8 c6 i6 ~
    谢谢大家的讨论,I learded a lot.  红包已发  
    9 p- i4 M# D3 _2 a% P  @$ b) X
    2 E, k0 V! y$ U8 ~
    ) l6 u2 E) n) K7 t' h& q
    # G2 {9 m% H9 w% U
    0 A4 d0 {4 Z2 S& n5 w- B2 X
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-23 01:49 , Processed in 0.062153 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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