设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情

    20 小时前
  • 签到天数: 1670 天

    [LV.Master]无

    楼主
    发表于 2022-9-24 23:04:16 | 显示全部楼层
    拉下来?拉多少?
    3 d& E$ [  M. ^0 D5 \% {$ o6 L& L把代码贴上来看看?
    # o% X5 {' _; \; q. t' u! G7 @# d& ?% w
    难道分支预测不准破坏流水线执行?不该啊。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    20 小时前
  • 签到天数: 1670 天

    [LV.Master]无

    沙发
    发表于 2022-9-25 00:20:10 | 显示全部楼层
    本帖最后由 数值分析 于 2022-9-25 00:24 编辑
    . }3 N: e' q- @# C
    雷达 发表于 2022-9-24 23:54
    0 ?8 Q3 c  L' ]# g! ?6 evoid xcorr(comp* outcomp, comp* A, int lenA, comp* B, int lenB)6 {: K* S. w2 _; ^7 F2 f
    {
    . S/ ^! W; N9 @! R( R        comp temp, xtimesy;
    % A1 H& D: q) X% z) U& G

    7 }7 L* C5 [, T+ i0 N* _* D这个不是这么比的吧。。。
    6 c7 u" \+ \+ W7 v$ u
    5 \0 O2 m$ M) p* j0 p, s: b您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。1 V% l" A4 T) W( D# K

    " A) @+ ~1 h. c' y/ h' o$ a7 P" Y而加上内循环,光jmp和dec指令就至少多执行了6000个,慢个几十倍不是正常的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    20 小时前
  • 签到天数: 1670 天

    [LV.Master]无

    板凳
    发表于 2022-9-25 02:06:44 | 显示全部楼层
    本帖最后由 数值分析 于 2022-9-25 02:16 编辑 7 l& a: i2 X$ t* U- X! k
    沉宝 发表于 2022-9-25 01:48
    ) i4 B7 N. ]- G现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果 ...

    6 t+ E  j6 T8 U% O% J) F$ j% h  k' T  a$ T
    是的,兄台说的对。3 y. i  _  S% a$ [2 {

    8 y+ R6 K0 i( p% @# ?) B9 `& [其实我想说的是 真正数值计算部分和代码中其他不直接计算的overhead的比值这个事儿。
    7 f& k; K9 W' u$ `. d6 ^+ @: ]' @8 r: N. U# ^! c: J9 v
    雷达兄构造测试用例的时候,屏蔽掉了所有计算的部分,使得剩下的都是overhead,这样run time比较的结果就显得好像不合理了。如果把计算加回去,计算部分的run time会dominate,结果就不那么离谱了。因为不好说,所以用指令数对比的方式试图直观地说明这一点。  o+ x4 k  q" Q( Y- o, ~

    . P/ p% C! o. ~0 w+ z比如说,如果有计算,那么跑六千个循环相对于计算应该用不了多少时间。但是如果一边是什么都不做,另一边是六千个循环,那六千个循环比什么都不做慢几十倍了,就不是那么不合理了。
    ; [* l! c: `; F* F
    / d" Q! Y. z/ L当然也有可能像兄台说的,是优化参数的问题,但我觉得更多地是测试用例设计的不合理。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    20 小时前
  • 签到天数: 1670 天

    [LV.Master]无

    地板
    发表于 2022-9-25 14:58:59 | 显示全部楼层
    本帖最后由 数值分析 于 2022-9-25 15:38 编辑 ) J# Y0 D& |7 o6 H, R) {  h
    雷达 发表于 2022-9-25 04:47
    # y' V" H' Y0 U; T0 @; u+ _9 o又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...
    6 R6 _' N$ j, m6 Z* F* d

    ) C: `! j5 B5 }  T' t+ J& Q" q  E  X. c3 G6 J

    $ X6 `1 d: H/ ~( K4 U3 r能不能把这个也贴上来,看看和上一个有什么不同?
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2024-6-1 20:40 , Processed in 0.034859 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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