设为首页收藏本站

爱吱声

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

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

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

    [LV.Master]无

    楼主
    发表于 2022-9-24 23:04:16 | 显示全部楼层
    拉下来?拉多少?$ b  n# y& C, W$ Q
    把代码贴上来看看?2 k( [! K! I0 }2 T$ o

    , b0 e, {/ \/ N( o难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    沙发
    发表于 2022-9-25 00:20:10 | 显示全部楼层
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑
    * _7 C! c# p# s" w" i
    雷达 发表于 2022-9-24 23:54
    ) \$ v% H( M$ Q1 l# cvoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)
    ) H0 v( a9 c3 r1 [" h$ _& t{* W; S* c3 {# P7 W+ P7 m5 R, D
            comp temp, xtimesy;

    : M. x8 P0 d7 ?% s, e6 L$ A+ z
    7 }8 i' ?  l0 a' l; |* `/ t这个不是这么比的吧。。。
    2 u6 L% n! G1 M  F2 Z8 A+ t# `
    ( v/ C, l( w8 u4 N3 _4 J您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
    7 b$ y0 k: j# z- f7 t* J8 J7 h) h
    4 Z; a. X3 J- z0 j7 i. t而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    板凳
    发表于 2022-9-25 02:06:44 | 显示全部楼层
    本帖最后由 数值分析 于 2022-9-25 02:16 编辑 8 I1 y: w9 L! }0 n! P
    沉宝 发表于 2022-9-25 01:48- V% i: o5 M  p1 e0 |1 H
    现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...

    , ~1 c2 X6 a% G9 j' ~. J1 ~
    ! g1 A3 o: Q6 ^- W9 f是的,兄台说的对。: A4 q) P. r2 n4 T: e9 Q
    8 M' c9 ]) {1 x7 G. j
    其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。
    6 Z) R- \, e1 {9 J/ m0 _0 d' w- f# E
    雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。
    % r% a; @0 B# L4 L1 x# T7 J! c8 r
    5 U% h2 v- J& w5 B比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。
    / b& I; i4 [. c4 z; s+ R5 N7 ]/ B0 d  s) s" C
    当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]无

    地板
    发表于 2022-9-25 14:58:59 | 显示全部楼层
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑
    0 F6 ?* b: p! b" G/ `$ k, B
    雷达 发表于 2022-9-25 04:47
    1 l2 }. V  c- a又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    ! ~, r: [' D+ X) \# y

    : F9 \: s$ ^0 D$ j( X' g( x
    2 D( T8 u* D6 v& b& s) t8 i* N+ `# T. |
    $ i  ?! N& `+ J% [" E& S能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2024-5-4 22:18 , Processed in 0.034088 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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