对于单个指令,通常需要6个机器周期:
我担心的是第五步,执行手术。这是在ALU中完成的,它只是一组数字电路,可以添加、MUL、XADD、...etc。
我的问题是:执行一个加法所需的时间(就时钟周期而言)是否等于执行XADD所需的时间?我的意思是,每一个操作的数字电路是否都是为了消耗同样数量的时钟周期而设计的呢?
换句话说,机器塞尔斯的时间是固定的吗?
发布于 2016-03-04 08:48:43
在大多数情况下,是的,每个阶段的周期时间是固定的。有一些例外,取决于处理器。但你的描述过于简单化了。现代处理器被组织在管道中,因此一条指令的一个执行阶段可以与其他指令同时执行。正如您所描述的,一些处理器使用的是6级流水线,但它们只占少数。大多数现代处理器将操作划分为更多的阶段,每个阶段都需要一次周期。例如,目前一代的Intel Core处理器有19个阶段,每个阶段都需要一个周期。在某些情况下,指令可能会跳过其中的一个。通常,多条指令在不同的阶段同时执行,但有些指令在某些情况下会阻止其他操作的进行(例如,分支错误预测,或者由于需要等待尚未生成的数据而没有准备好的指令)。此外,处理器核心可能有多个管道,因此多条指令完全并行运行,而且在某些体系结构中,并非所有管道都能够执行所有指令类型。所有管道之间共享读取和解码指令,在许多情况下,每个周期可以处理多条指令。在以Intel x86等CISC指令为基础的现代处理器中,指令在执行前被转换成类似RISC的微指令,因此一个程序指令可以转换为流水线中的多个指令(反之亦然)。确定实际情况下的实际表现是极其困难的。
发布于 2016-03-06 17:10:20
首先也是最重要的,当你说“典型”时,我不得不不同意这一点。是的,在教科书中,它们都是从彼此派生出来的,它们谈论的都是正在进行中的状态。但那是很久以前的事了,每隔一代人(每隔一两年),管道的大小和形状都会发生变化。但这与你的问题无关。
答案是“这取决于”--这取决于设计特定核心的人们想要做什么。对于简单的逻辑操作,或者,或者,不,等等,确实需要证明为什么它们需要多个操作。如果他们认为旗帜比较需要另一个,可能的,但不太可能的,也许两个。不动点加法,除非操作数太宽,不能关闭目标时钟速率的定时,否则它们不需要多个时钟。然而,对于乘法或除法,将N位操作数从N位操作数取到一个时钟上所需的逻辑量呈指数级上升,因此,如果它们有乘法或除法,如果它们选择使它成为一个时钟,就会有一个真正的权衡,它们可能仍然会遇到目标时钟速率的定时闭包。他们可以选择处理每单位的产量和成本,或者允许两个时钟,例如,增加他们的保证金。
简而言之,没有绝对的答案,没有典型的管道设计,也没有关于管道出现以来有多少时钟的一般假设。按位逻辑和加/减指令应该是一个时钟,但其他指令可能不止一个,但可能隐藏在管道中,只是感觉相同(整个管道点)。
发布于 2016-03-07 11:11:04
让我们忽略一下,您的模型并不是一个典型的现代CPU的工作方式;几年前它是相当合理的。
在现代CPU上,时钟速率不是绝对固定的,但它绝对不会从指令变化到指令。CPU将测量它的温度,或者由操作系统告诉它它需要使用尽可能少的电源,因此可以在相当长的时间内改变它的时钟速度(许多毫秒)。因此,时钟频率可以降低,以减少产生的热量或降低功耗(电压将降低,这使一切运行缓慢,但节省了大量的电力)。
CPU中的每个单独操作都将限制在一个周期内。它必须在那一个周期内完成。在单个周期中不起作用的东西会被分解成更多的操作,每个操作都需要一个周期。如果xadd花费的时间比add长,那么CPU设计器有两个选择:使时钟周期更长,以便xadd可以在一个周期内执行(使add比它需要的时间慢),或者使时钟周期更短,足以进行add,并将xadd指令分割成两个工作单元,每个工作单元都需要一个周期。时钟周期长度的选择适用于一切。
你可以在谷歌上搜索一个新的英特尔CPU的微体系结构的图表。这可能会对系统造成冲击:-)
https://softwareengineering.stackexchange.com/questions/311751
复制相似问题