设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 3150|回复: 25
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 1661 天

    [LV.Master]无

    楼主
    发表于 2022-9-24 23:04:16 | 显示全部楼层
    拉下来?拉多少?; f" M( W! Y$ G6 g. }3 S
    把代码贴上来看看?# I# A1 R$ m( P7 O4 Y8 O
    2 c( h# \. h$ x1 [
    难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 1661 天

    [LV.Master]无

    沙发
    发表于 2022-9-25 00:20:10 | 显示全部楼层
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑 2 {& x, X2 y4 M7 \' O# L$ |$ ^
    雷达 发表于 2022-9-24 23:541 C6 ~) w! _+ }9 |! O& j$ B
    void xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    ) S# y; L& |8 }{2 N& F( @3 r$ R" u* c
            comp temp, xtimesy;

    ' n! T" I' U) N' l, L2 w
    3 ?7 a3 R; n8 d这个不是这么比的吧。。。
    ' m& }2 J0 r( K' t/ k6 K! b$ Y& W& ]6 N' b
    您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。/ B+ x/ I3 F# V5 k6 k9 n" }/ E  H
    ) D3 r, r6 b6 F: [
    而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 1661 天

    [LV.Master]无

    板凳
    发表于 2022-9-25 02:06:44 | 显示全部楼层
    本帖最后由 数值分析 于 2022-9-25 02:16 编辑 ; }, C3 |5 @" o# W8 r9 x$ j
    沉宝 发表于 2022-9-25 01:48  T' ]2 e& ?1 [5 ^1 S, _- e& B
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...

    0 D4 U' q" O6 |; |. ^7 I! l5 J3 i: L7 p0 b4 {, Q4 c3 N
    是的,兄台说的对。' P) f/ j6 j7 i7 z% M% r' b
      r( b/ q& Z$ ]; }! {
    其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。
    7 L# M' _* G4 J3 w" X+ J9 j1 P6 e$ @1 f- O: Z$ U) E
    雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。5 @/ Y3 R/ a6 c" J$ P
    2 H6 J' g1 X" P0 C5 o
    比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。
    9 z: W1 _6 b- q" D. v" `0 b& f7 f4 [
    当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 1661 天

    [LV.Master]无

    地板
    发表于 2022-9-25 14:58:59 | 显示全部楼层
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑 # d( }9 ?: a* ~3 ~, K! l3 U& N
    雷达 发表于 2022-9-25 04:47
    % n5 _2 x2 N: \$ e. Q又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

    1 z2 I9 T- {/ J& M2 H2 ~' w9 b
      U* q8 @' T$ ?0 R

    + I  O* l1 u# D! J! z4 l+ u能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2024-5-21 10:17 , Processed in 0.034626 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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