计算机内设备运行的时间尺度相差非常大, CPU的时钟周期、内存存取周期和硬盘读写周期相差一个到几个数量级。
比如:
主频是4GHz的GPU的时钟周期是0.25ns.
相比CPU,一般的DDR内存芯片速率仅为400MHz,时钟周期达2.5ns, 再加上总线延时,导致内存访问时间达到几十纳秒。CPU运行速率与内存访问速率比大致为100:1。
硬盘的读写速度就更慢了,一般的机械硬盘的完成一次读写所需要的时间,主要取决寻道时间+旋转时间,完成一次读或者写的时间量级大致为ms级别,因此内存访问速率与磁盘存取速度比大致为1000:1。
由于计算机的运行需要CPU、内存和磁盘的配合,这就造成了高速设备访问低速设备时要大量等待,大大浪费了高速设备的时间。
比如CPU在运行时需要用到内存中的数据,就需要读取内存。例如一个单核CPU执行一个有10个单周期指令的函数,如果没有内存访问,那么大致需要2.5ns执行完毕,但是如果有一次读区内存操作,这个函数就需要几十ns,而这几十ns的时间中,CPU只运行了2.5ns,剩余时间都浪费了,这是对CPU的大大浪费。
解决这个问题的办法是缓存,CPU中有L1、L2、L3级缓存,这些缓存是内置在CPU中,访问速度与CPU基本一致。
通过把内存中的数据提前加载到缓存中,CPU直接从缓存中读取数据,可以大大减小CPU等待内存时间。
但是,CPU中的缓存成本非常高,缓存非常小,需要复杂的算法决定把哪些数据提前读区到缓存中,以提高缓存命中率。
网友评论