首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拉钩
V2EX  ›  硬件

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

  •  
  •   pq · 338 天前 · 4892 次点击
    这是一个创建于 338 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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