CPU 为何非得要用乱序执行和预测执行呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pq

CPU 为何非得要用乱序执行和预测执行呢?

  •  
  •   pq 2018 年 1 月 6 日 9434 次点击
    这是一个创建于 3029 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了这两个”提高性能“的特性,CPU 还要集成专门的安全检查和调度单元,操作系统更是为此要设计好多复杂的安全组件,增加了大量的不安全因素,最终是否会得不偿失?如果改成传统的顺序执行,CPU 是否没必要进行代码的安全检查?操作系统的内核会不会要精简许多?

    顺序执行的情况下,有没有其它办法提高执行效率?比如单纯提高频率?

    17 条回复    2018-01-08 09:31:42 +08:00
    d4rkb1ue
        1
    d4rkb1ue  
       2018 年 1 月 6 日   6
    最直观的。因为代码本来就不是顺序的,会出现分支(判断,循环)。而现代处理器的流水线很长,因此也可以同时处理多条指令,来提升效率。 但是因为不是顺序的指令,不能因为一旦出现分叉整个处理器就停止,静待这个分叉解决,这太浪费资源了(分叉是很频繁地,if/for/while 有那么多)。所以需要 预测执行,如果分叉了,就把已经处理的数据抛弃。还有那么点概率没分叉,那就赚了。
    乱序执行的一个目的也是为了解决冲突,提升利用率。想想这样的一个场景,一个 10 万次循环为一个数据加一,然后另一个 10 万个循环为另一个数据加一。因为在循环里每个数据都是在上一个数据得出之后再修改的,所以必须顺序执行,等待上一个执行完毕再执行下一个。那么这 20 万个操作全都是串行的,先循环 10 万,再循环另一个 10 万。如果可以乱序,这两个循环互不干涉,那么就可以在每个 cycle 里乱序、同时执行 2 个循环中的一步。这样就节约了一半的时间。(这只是个例子,展现乱序执行的意义)。
    纯顺序执行,要么提升频率,要么延长流水线,但是问题在于,没有纯顺序执行的场景啊。什么代码里完全没有分支?
    hadoop
        2
    hadoop  
       2018 年 1 月 6 日 via Android   1
    计算机体系结构研究了这么多年的流水线,超标量,多发射,乱序执行,都是为了性能啊
    breeswish
        3
    breeswish  
       2018 年 1 月 6 日   1
    楼主可以学习一下「计算机组成原理」
    pq
        4
    pq  
    OP
       2018 年 1 月 6 日
    @d4rkb1ue 哦,我把我说的“顺序执行”定义为“以指令序列来执行”,分支与循环,也是一种序列。

    我不是专业人士,但你这么一解释,我倒是理解了乱序执行与预测执行的必要性了。但我觉得,具有这两种特性的 CPU,很难做到绝对的安全,知乎上看了些牛人的分析,觉得要完全杜绝普通应用非授权地访问敏感数据,非常困难,毕竟道高一尺,魔高一丈,黑客们总能找到办法的。
    Shura
        5
    Shura  
       2018 年 1 月 6 日
    都是为了提高 CPU 利用率,准确的说是提供 ALU 的利用率。
    zn
        6
    zn  
       2018 年 1 月 6 日   1
    楼主可能以为现代 CPU 就像是个考 60 分万岁多一份浪费的大学生,这道题不做换一道也能考达到及格线。
    但实情是:现代的 CPU,要想在激烈的商业竞争中能活下来的,你必须得考 95、96、97 分,在这种情况下,再往上提高一分都是很困难的,所以任何一中能提高性能的技巧基本都用上了。当然你可以不用,但是如果你不用那你很可能会落后于竞争对手,如果然后你就快 over 了。就算没 over 也只能靠低价捡剩饭吃。
    linboki
        7
    linboki  
       2018 年 1 月 6 日 via Android
    想的太多,知道的太少自寻烦恼
    wdlth
        8
    wdlth  
       2018 年 1 月 6 日
    先不说 CPU 里面,连编译器都会预测代码里面的分支、循环等情况,在有限的资源下提高性能。
    wwqgtxx
        9
    wwqgtxx  
       2018 年 1 月 6 日
    打个不太恰当的比喻,就好比投资是有风险的,需要你猜测风险来判断下一步的操作,那么只要是猜测就肯定还是有错误的,就肯定会存在亏损,所以为了安全大家就把钱存在自己家保险柜不就安全了么
    kindjeff
        10
    kindjeff  
       2018 年 1 月 6 日
    @zn 如果你这个比喻是对的,是不是可以说 Intel 靠作弊赢了 AMD 这么久
    est
        11
    est  
       2018 年 1 月 6 日
    AMD 当年主频打到了 4G,依然被 Intel 独步天下的 90% 缓存命中率按在地上摩擦。
    akira
        12
    akira  
       2018 年 1 月 6 日
    早期的时候,单纯提高频率确实是有效的,甚至有个著名的摩尔定律。
    后面频率提不动了,就弄多核。
    多核升不上去了,就来搞乱序了。
    intel 也不想的啊,能怎么办,他们也很绝望啊。
    msg7086
        13
    msg7086  
       2018 年 1 月 7 日
    @kindjeff 如果你说的是 meltdown 的话,那只是 Intel 自己没发现的 feature。
    yksoft1
        14
    yksoft1  
       2018 年 1 月 7 日
    性能和安全本来就是互相拮抗的一对啊。
    你想想。去 TMD 什么内存保护,做一个 64 位长模式、单用户单任务的超级 DOS,岂不是效率最高,啥都不用管
    zn
        15
    zn  
       2018 年 1 月 7 日
    @kindjeff 这不是作弊,毕竟作弊是没法每次都做到比第一名还高分的。这次 AMD 受影响比 Intel 小只是因为 AMD 的架构不一样,恰好就躲开了这种攻击。而 AMD 一直打不过 Intel 只能说明 AMD 技不如人,综合比分比 Intel 低。
    suspended
        16
    suspended  
       2018 年 1 月 7 日
    Intel 预测执行策略太激进了,你看 AMD 就没受到 Meltdown 的影响,或者影响很小,没有可靠 PoC。
    xieyudi1990
        17
    xieyudi1990  
       2018 年 1 月 8 日 via Android
    @akira 60 年代就有乱序的 CPU 了。

    PC 的话第一个乱序的应该是 95 年的 Pentium Pro,单 CPU 多核应该是 05 年的 Pentium D。所以至少 PC 是是先乱序,再多核。

    @yksoft1 一直觉得安全这东西就很扯。CPU 从 archtecture,design,verification 到 bios,os,user code 耗费这么多精力搞的东西,到头来还是被轻易破开。感觉就是一些人拍脑袋弄的一套安全系统忽悠公司,公司拿出去忽悠用户。给一堆不管软件的设计验证,然后卖给不管硬件的半懂不懂地拿过来用。哪天出来一个从 silicon 到 os 整个 flow 都懂的,就被轻易破解。

    每次看到 cpu rtl 里那些为了安全加的一堆逻辑就很烦。没办法,除非人类补完计划成真。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3858 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 71ms UTC 10:15 PVG 18:15 LAX 03:15 JFK 06:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86