假设我有一个程序,其中包含添加两个数字的指令,该操作需要10纳秒(不变,由门制造商强制执行)。
现在我有3个不同的处理器A,B和C(其中A< B&C在时钟周期方面)。
A的一个时钟周期为15纳秒,B为10纳秒,C为7纳秒。
首先,我是按照以下假设纠正的
1.添加操作需要1个完整周期的处理器A(慢速处理器)并浪费周期的5 ns剩余时间
2.添加操作需要1个完整周期的处理器B浪费时间
3.添加操作需要2个完整周期(20 ns)的处理器C(快速处理器),浪费20-14 = 7 ns的其余部分。
如果上述假设是正确的,那么这与常规假设是一个矛盾,即高时钟周期的处理器更快。这里最快的处理器C实际上需要2个周期并浪费7ns而不是较慢的处理器A只需1个周期。
答案 0 :(得分:5)
无论如何,处理器C都是最快的。每个周期需要7 ns,因此比A和B执行更多的周期。电路不够快,这不是C的错误。如果您以1 ns的速度实现加法电路,所有处理器将在1个时钟周期内给出答案(即C将给出7ns的答案,B为10ns,A为15ns)。
首先,我是否遵守以下假设─ 1.添加操作需要1个完整周期的处理器A(慢速处理器)并浪费剩余的5 ns周期。 2.添加操作需要1个完整周期的处理器B浪费时间。 3.添加操作需要2个完整周期(20 ns)的处理器C(快速处理器),浪费20-7 = 13 ns的其余部分。
没有。这是因为您使用不完整的数据来表示操作的时间。在时钟周期中测量在特定处理器上完成操作所花费的时间,而不是像在此处那样测量纳秒。如果您说 ADD 操作需要10 ns而您没有提到测量 ADD 操作时间的处理器,则ns中的时间测量毫无意义。
因此,当您说 ADD 操作在所有三个处理器上花费2个时钟周期时,您就已经标准化了测量。然后,标准化测量可以翻译为:
如果你没有注意到,当你说:
A的一个时钟周期为15纳秒,B为10纳秒,C为7纳秒。
三个处理器中哪一个最快?
答案:C最快。它的一个循环在7ns完成。这意味着它在一秒钟内完成10 9 / 7(〜= 1.4 * 10 8 )循环,而完成10 9的B / 10(= 10 8 )循环在一秒钟内,与A相比,仅完成10 9 / 15(〜= 0.6 * 10 8 )在一秒钟内循环。
- ADD指令的含义是什么,它纯粹仅仅意味着ADD(寄存器中有操作数)或是否意味着获取 操作数,解码指令然后实际添加 号。
醇>
获取操作数由 MOV 操作完成。如果您要比较 ADD 操作的速度,则应按时间对其进行比较,以仅执行 ADD 操作。另一方面,如果你想知道两个数字的添加速度有多快,那么它将涉及比简单的 ADD 更多的操作。但是,如果它有用,那么维基百科上也会提供所有Original 8086/8088 instructions的列表。
- 根据上述内容添加实际意味着什么,添加多少个周期,一个或多个。
醇>
这取决于处理器,因为每个处理器可能使加法器的实现方式不同。有很多方法可以生成两个数字的加法。再次引用Wikipedia - 全加器可以通过多种不同方式实现,例如使用自定义晶体管级电路或由其他门组成。
此外,指令中可能存在流水线操作,这可能会导致数字添加的并行化,从而节省大量时间。
- 为什么时钟周期是标准,因为它可能因处理器而异。不应该将nanosec作为标准。至少它是固定的。
醇>
如果要告知处理器执行指令所花费的时间,则时钟周期和处理器速度可以成为标准。选择以下任意两个:
Time to execute an instruction
,Processor Speed
和Clock cycles needed for an instruction
。第三种可以从中衍生出来。
当您说 ADD 所采用的时钟周期为 x 并且您知道处理器速度为 y MHz时,您可以计算出到 ADD 的时间是 x / y 。此外,您可以提及 ADD 作为 z ns的时间,并且您知道处理器速度与之前的 y MHz相同,您可以计算执行 ADD 所需的周期为 y * z 。
答案 1 :(得分:1)
我没有专家但是我说...
经常假设具有高时钟周期的处理器对于大多数操作而言更快
例如,更智能的处理器可能会执行"开销任务"需要X ns。 "开销任务"可能会使重复操作更快,但实际上可能会导致一次性操作需要更长时间,例如添加2个数字。
现在,如果相同的处理器执行相同的操作100万次,它应该比速度较慢的智能处理器快得多。
希望我的思考有所帮助。您对我的想法的反馈欢迎。
答案 2 :(得分:1)
为什么更快的处理器需要更多的周期来执行相同的操作而不是较慢的处理器呢?
更重要的是:现代处理器使用Instruction pipelining,因此在一个时钟周期内执行多个操作。
另外,我不明白'浪费5ns'的意思,频率决定时钟速度,因此执行 1时钟所需的时间。当然,例如,cpu可能必须等待I / O,但这适用于所有cpu。
现代cpu的另一个重要方面是L1,L2和L3缓存以及多核系统中这些缓存的体系结构。例如:如果寄存器访问需要1个时间单位,则L1缓存访问将占用大约2个,而正常的内存访问需要50到100个(并且硬盘访问需要数千个......)。
答案 3 :(得分:1)
这实际上几乎是正确的,除了在处理器B上进行2个循环意味着14ns,所以在10ns足够的情况下,下一个循环在结果已经“稳定”后4ns开始。 (虽然如果你砍掉它可能需要一些额外的时间,以锁定部分结果)。这并不是一个矛盾,设定你的频率太高"可以要求这样的权衡。您可能会做的另一件事是使用更多不同的电路或多米诺逻辑来再次将实际的加法延迟降低到一个周期。更有可能的是,你不会在2个周期开始设置加法。在这种情况下,它并没有很好地解决,至少不是为了添加。你可以做到,是的,基本上你必须"围绕"电路占整数个周期的时间。您也可以在按位运算中看到这一点,这比运算花费更少的时间,但是需要整个周期。在机器C上,您可能仍然可以在一个周期内完成按位操作,对于某些工作负载,它甚至可能值得拆分。
FWIW,Netburst(奔腾4)的交错加法器,计算了半周期的下半部分"并且在下一个半周期中的上半部分(以及在第三个半周期中的标志,在某种意义上给予整个加法的延迟为1.5)。它并非完全脱离这个世界,尽管Netburst已经完全疯了 - 它还不得不做很多奇怪的事情来让频率上升到那么高。但是这些半周期不是一半(它不是,AFAIK,逻辑在每个侧翼上都是先进的,它只是使用时钟倍频器),你也可以看到它们是真正的周期快速,其余大部分逻辑(疯狂的ALU除外)以半速运行。
答案 4 :(得分:1)
你的观点是'CPU偶尔会浪费时钟周期'是有效的。但总的来说,在现实世界中,使CPU成为优秀CPU的部分原因在于它如何缓解这一问题。
现代CPU由许多不同的组件组成,其中任何操作都不会在实践中占用恒定的时间。例如,如果数据立即可用,则ADD指令可能在每个时钟周期以1个指令“突发”......这反过来意味着“如果获取该数据所需的CPU子组件在指令之前立即可用” ”。所以取决于是否另一个子组件必须等待缓存提取,ADD实际上可能需要2或3个周期。一个好的CPU将尝试重新排序传入的指令流,以便在适当的时间最大化子组件的可用性。
因此,您可能会遇到一个特定系列的指令在一个处理器上与另一个处理器相比“欠佳”的情况。并且处理器的整体性能当然不仅仅与原始时钟速度有关:它与智能逻辑一样多,它采用一系列传入指令并确定哪些部分指令可以触发芯片的哪些子组件当
但是......我认为任何现代芯片都包含这样的逻辑。 2GHz和3GHz处理器都会定期“浪费”时钟周期,因为(简单地说)在CPU的一个子组件上执行的“快速”指令必须等待来自另一个“较慢”子组件的输出结果。但总体而言,您仍然希望3GHz处理器能够“更快地执行实际代码”。
答案 5 :(得分:1)
首先,如果执行添加的10ns时间不包括流水线开销(时钟偏移和锁存延迟),则处理器B无法在一个10ns时钟周期内完成添加(具有这些开销),但处理器A可以和处理器C仍然可以在两个周期内完成。
其次,如果添加本身是流水线的(或其他功能单元可用),则后续的非依赖操作可以在下一个周期开始执行。 (如果加法是宽度流水线/交错的(如harold's answer中所述),那么即使是相关的加法,逻辑运算和左移也只能在一个周期后开始。但是,如果练习限制了加法时间,那么它可能是还禁止其他优化来简化练习。)如果相关操作不是特别常见,那么处理器C的更快时钟将导致更高的性能。 (例如,如果每四个周期发生依赖性失速,则忽略其他影响,处理器C可以每五个7ns周期完成四个指令(35 ns;执行中前三个指令重叠),而处理器B为40ns(假设添加)时序包括流水线开销)。)(注意:您的假设3不正确,处理器C的两个周期将是14ns。)
第三,时钟周期中的额外时间可用于支持更复杂的操作(例如,通过小的立即值预先移位一个操作数,甚至添加三个数字 - 进位保存加法器具有相对较小的延迟),以便窃取从其他流水线阶段工作(可能减少流水线阶段的数量,这通常会减少分支误预测惩罚),或通过使用更简单的逻辑来减少面积或功率。此外,额外时间可用于支持具有固定延迟周期的更大(或更多关联)缓存,从而降低未命中率。这些因素可以弥补浪费"处理器A中的5ns。
即使对于标量(每个周期单个问题),流水线时钟速度也不是性能的唯一决定因素。当功率,制造成本(与产量相关,根据可销售箱和面积调整),上市时间(及其可变性/可预测性),工作负载多样性以及更先进的架构和微架构技术时,设计选择变得更加复杂考虑。
时钟频率决定性能的错误假设甚至有一个名称:Megahertz myth。