我对处理器的工作原理有了更多的了解,但我还无法找到有关每个周期指令的直接答案。
例如,我印象中四核 CPU 每个周期可以执行四条指令,因此以 2Ghz 运行的四核 CPU 每秒将执行 80 亿次操作。是这样吗?
我确信这样说有些过于简单了,但如果有指南或其他东西可以帮助我纠正错误,我绝对愿意接受各种想法。
答案1
您可能需要查找的关键字是集成信息系统公司,精简指令集和超标量架构。
集成信息系统公司
在CISC体系结构(x86、68000、VAX)中,一条指令很强大,但是需要多个周期处理。在较旧的体系结构中,周期数是固定的,而如今,每条指令的周期数通常取决于各种因素(缓存命中/未命中、分支预测等)。有表查找这些东西。通常,还有一些工具可以实际测量特定情况下某条指令需要多少个周期(参见性能计数器)。
如果你对英特尔的详细信息感兴趣,Intel 64 和 IA-32 优化参考手册非常值得一读。
精简指令集
RISC(ARM、PowerPC、SPARC)架构意味着通常一条非常简单的指令只需要几个(通常只有一个)周期。
超标量
但无论CISC还是RISC,都有超标量架构。CPU不是一条接一条地处理指令,而是同时处理多条指令,非常像流水线。
结果是:如果你只是查找程序中每条指令的周期,然后将它们全部加起来,你最终会得到一个很高的数字。假设你有一个单核 RISC CPU。处理一条指令的时间永远不会少于一个周期的时间,但总体吞吐量可能是每个周期几条指令。
答案2
我喜欢用洗衣类比来思考这个问题。CPU 指令就像是一堆衣物。每次洗衣服都需要使用洗衣机和烘干机。假设每个洗衣机运行需要 30 分钟。这就是时钟周期。旧 CPU 会先运行洗衣机,然后运行烘干机,每次洗衣服都需要 60 分钟(2 个周期)。
流水线: 流水线式洗涤是指同时使用两种洗涤方式——先洗涤一批衣物,然后在衣物烘干时洗涤下一批衣物。第一批衣物需要 2 个循环才能完成,但第二批衣物再经过 1 个循环即可完成。因此,除了第一批衣物外,大多数衣物只需要 1 个循环。
超标量: 把所有衣物拿到自助洗衣店。准备两台洗衣机,然后把两台洗衣机都装上。洗完后,再准备两台烘干机,两台都用。现在,您可以在 60 分钟内洗涤和烘干两批衣物。也就是说,2 个周期可以洗涤两批衣物。每批衣物仍然需要 2 个周期,但现在您可以洗涤更多衣物。现在,平均时间是每周期洗涤 1 批衣物。
具有流水线功能的超标量: 先洗前两批衣物,然后在烘干的同时,将接下来的两批衣物放入洗衣机。现在,前两批衣物仍需要 2 个循环,然后接下来的两批衣物再经过 1 个循环即可完成。因此,大多数情况下,您每次循环都会完成两批衣物。
多核:将一半的衣物交给妈妈,她也有 2 台洗衣机和 2 台烘干机。你们两个一起洗,可以洗两倍的衣物。这类似于超标量,但略有不同。你不必亲自将所有衣物从每台洗衣机中取出,她可以和你同时完成这项工作。
这很好,我们可以做到八倍以上洗衣量比以前少很多,而且不需要制造速度更快的机器。(时钟速度加倍:洗衣机只需要 15 分钟就可以运行。)
现在,让我们来谈谈事情是如何出错的:
管道气泡: 洗衣机里有污渍没洗掉,所以你决定再洗一次。现在烘干机就待在那里,等着干活。
缓存未命中:运送脏衣服的卡车堵在路上。现在你有 2 台洗衣机和 2 台烘干机,但你无法完成任何工作,因为你必须等待。
根据出现错误的频率,我们不可能总是在每个周期完成 4 次负载,因此实际完成的工作量可能会有所不同。
分支预测:好吧,你开始洗你的干净衣服,以防你稍后弄脏它们,这样它们就已经干净了......好吧,这就是类比失败的地方......
答案3
不完全是。您指的周期是时钟周期,由于大多数现代处理器都采用流水线,因此执行一条指令需要几个时钟周期。(这是一件好事,因为它允许其他指令在第一条指令完成之前开始执行。)假设最理想的情况下,IPC 可能约为 80 亿,但会发生各种情况,如依赖关系、流水线中的气泡、分支等,因此它并不总是有效。
抱歉,这个问题太复杂了,无法直接回答。Jon Stokes 很好地解释了这个问题本文。
答案4
Ludwig 解释了 CISC 和 RISC 之间的区别,但忘了说 RISC 指令虽然简单快捷,但单独执行起来却作用不大,因此您必须将多条指令串在一起才能完成与 CISC 处理器中一条指令相同的操作。因此,有些 RISC 指令会更快,而其他指令则不会。