对时多长时间?

支丽芳支丽芳最佳答案最佳答案

这个问题我几年前研究过,也实践过,所以还是有点发言权的。 首先,要理解计算机执行一条指令所需要的时间,需要知道两个概念:一个是指令周期,另一个是时钟周期。

指令周期(instruction cycle)是从内存中取出一条指令所需要的总时间。由于现在的电脑一般都是64位,一次取一条指令的话,理论上应该是8个时钟周期。但实际情况要比这复杂一些,因为每次只能取出一条指令,那么第一和第二条指令之间就会有等待时间;如果是多线程的话,那么各个线程之间还会互相影响,导致更加复杂的等待情况。在测量实践中,发现平均每个指令周期实际上只有6个到7个时钟周期。

而时钟周期(clock cycle)指的是一个CPU脉冲,也就是电信号从高翻到低的一次循环。这个周期的平均长度为1个微秒左右。在计算实践中,往往把1个微秒分成4个相等的部分,每一个部分对应一个时钟周期,这样理论值上每条指令应该占用4个时钟周期。不过实际上要更短一点,因为有些操作不需要全部4个周期才能完成。

有了这两个概念,就很容易回答这个问题了。如果一条指令执行时间是n个时钟周期,那么执行这条指令所需的计算机资源就是2n+1个(假设系统没有浪费的时间,比如执行下一个指令前,必须等当前指令的所有数据都写入缓存或内存中,否则会出现中间结果丢失的情况)。而如果要执行10条这样的指令,那么需要的计算机资源就是25个,即两条指令所花费的资源等于十条指令所花费的资源。所以答案是明确的,执行10条这样的指令只需要消耗2倍于执行单条指令的资源,而执行1000万条这样的指令只需要增加消耗25万个核心CPU时长。

当然,实际上的情况会比这要复杂一些。因为现代的CPU都支持多线程,并且内存带宽也远远大于以往,这些都会造成干扰,使问题变得复杂。

我来回答
请发表正能量的言论,文明评论!