设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

21#
发表于 2022-9-27 20:39:22 | 只看该作者
雷达 发表于 2022-9-26 01:30
9 q$ x7 j7 ^# y3 {& ?/ [# v$ E理了理思路,重新做了一个测试。: a- y4 C% W* Q: U5 h: j
做了两个 vector 和 两个 float *, 都长 100000: W; M* ^3 ?+ w8 v( c9 K3 Q3 H& X
外循环 6000,里面先做随 ...

& ]% I2 f% D* [* i8 r% P- |$ S, a这个时间是从哪里开始算的?
$ ]6 A3 {1 k/ B9 F4 |我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, 用了vector那个因为有vector的额外开销,多了几十秒。
  q# j  F% N- n3 ?4 r+ _+ s按照两个10万个数字的相关计算的规模来估计的话,两秒都算很长很长了。这个结果真的很奇怪。
回复 支持 反对

使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    22#
     楼主| 发表于 2022-9-27 22:41:56 | 只看该作者
    雷声 发表于 2022-9-27 20:39
    / L0 f' y$ V. _9 ~: H8 k. m; c这个时间是从哪里开始算的?
    . G  a& P5 F, K6 J9 Z6 ?' X我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, ...

    / ^0 y8 |3 R/ g. l' a5 K我不管它了,回头 linux 下换g++重新编译,顺便加上你们建议的向量化。
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

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

    使用道具 举报

    该用户从未签到

    24#
    发表于 2022-9-28 00:29:10 | 只看该作者
    雷达 发表于 2022-9-24 23:54
    0 s% O% r  R) N* B- j/ Mvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    % J( Y* H$ n  Q6 \1 i* x( y{2 f. ^- O$ ~! n- ~3 p
            comp temp, xtimesy;
    ' O& `& _) A  d* Z! D2 `
    我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗
    + C  j. E, ~" v
    ; x) R# @  C0 {+ c# B& {$ |
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    25#
     楼主| 发表于 2022-9-28 00:49:59 | 只看该作者
    opensrc 发表于 2022-9-28 00:29/ j% L6 u  I8 J
    我有些迷糊,这样的code,难道不就应该时间差很多吗?也做了个简单的实验,你看看我做的有错吗0 w. e6 P6 B( Q4 I) K9 M+ a' n

    % t! ]& n; q: W( w, A& R ...

    0 M( l0 K# Z- J! w/ N* v# [你是对的,是我搞错了。确实没有优化的情况下,空循环如果次数够长本来就应该耗时较大。我搞错的原因是在不自觉得与 octave 比较,而实际上 octave 是优化过的,和是不是空循环没关系,这种不同条件的比较是没意义的。# P  ]' m7 f9 v; u* ?0 z! Y

    1 w8 Q% Y4 @: _, ~, k. l9 f% J雷声网友说的也对,空循环应该被编译器优化掉,我的编译器设置有问题。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    26#
     楼主| 发表于 2022-9-28 00:56:28 | 只看该作者
    本帖最后由 雷达 于 2022-9-28 01:09 编辑 $ V3 c$ ~! V- {6 [& z

    2 D7 |' r: p" ?3 q% S% C" y# X是我自己的理解有误,没有优化的情况下,空循环如果次数够长本来就应该耗时较大。" p7 S0 t2 n- N& ~4 }; N: N1 M5 u
    有空时我会试试 SIMD和并行,看看能提高多少。! s) \% H* b5 K. i" x4 ?2 j
    过去7、8 年没有正经用C++ 写过东西,没有 sense 了 9 h( g# O. F+ u( H$ W# k7 P
    谢谢大家的讨论,I learded a lot.  红包已发  
    8 \1 `8 r: v! ?- T$ S
    8 s* D6 x3 v$ J% z5 c: x; ~
    " t) Y: E4 v* ~) W( d( j8 P+ x. T  }- S% y" E
    ; N; h2 V/ P" P! p
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-21 22:47 , Processed in 0.067093 second(s), 20 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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