1.3.3 内存是关键
事实上,在计算机系统中发生的所有事情都是要经过某种内存的。多数事情需要经过很多的内存级别。软件及同它关联的数据在执行之前通常存储在某些外部介质中(通常为硬盘、CD-ROM、DVD等)。例如,假定您有一个非常重要且非常长的数字列表存放在一个光盘中,而且需要将这些数加到一起。同时假定用来对这个非常长的数字列表进行累加的程序也保存在光盘中。图1-4说明了程序和数据如何流向处理器。
|
| (点击查看大图)图1-4 |
在不同类型的内存中,您必须记住的是典型的CPU仅对保存在其寄存器中的数据进行操作,它没有直接访问存储在其他位置的数据或程序的能力。图1-4显示了ALU对寄存器的读取和写入,这是正常的状况。指令集命令(处理器的本地语言)被设计为主要针对CPU寄存器中的数据或指令进行工作。为了将您的重要的数字列表和程序取到处理器,必须从光盘中提取软件和数据并加载到主存储器中。从主存储器开始,软件和数据被传递到L2 cache,然后到L1 cache,接下来传递到指令和数据寄存器,这样CPU可以进行它的工作。值得注意的是在每个阶段,存储器的执行速度是不同的。二级存储器,如CD-ROM、DVD和硬盘的速度要低于主随机存取内存(random access memory,RAM)。RAM的速度慢于L2 cache内存。L2 cache内存慢于L1 cache内存。处理器中的寄存器是您能够直接打交道的速度最快的存储器。
各种类型的存储器除了在速度方面有区别外,规模也是一个因素。图1-5给出了分级存储器体系(memory hierarchy)的概览。
|
| (点击查看大图)图1-5 |
寄存器的速度最快,但是容量最小。例如,一台64位计算机通常有一组寄存器,每个寄存器能够保存最多64比特。在某些实例中,寄存器可以成对使用,允许保存128比特。在容量方面,紧随寄存器之后的是L1 cache和L2 cache。L2 cache目前是以MB为单位进行度量的。从L2 cache到系统主存,在最大容量方面有一个巨大的提升,系统主存的容量当前是以GB为单位进行度量的。除了各种类型的存储器的速度以及容量之外,还有一个因素是各类存储器之间的连接。这些连接被证明对总体系统性能有着重要的影响。在二级存储器中保存的数据和指令必须通过I/O通道或总线才能到达RAM。一旦到达RAM,数据或指令通常经由系统总线到达L1 cache。I/O总线以及系统总线的速度和容量在多处理器环境中可能会成为瓶颈。随着芯片上内核的数目的增加,总线架构以及数据通路的性能带来的影响就更加明显。
本章稍后部分将讨论总线连接,首先我们来了解分级存储器体系以及它在多核应用程序开发中扮演的角色。要记住,就像您可以使用编译器对指令集选择的影响那样,您也可以使用编译器来操纵寄存器使用和RAM对象布局、提供cache规模提示,等等。您可以使用更多的C++(www.cppentry.com)语言元素来指定寄存器使用、RAM和I/O。这样,在您详细了解多处理和多线程之前,必须对处理器处理的分级存储器体系有基本的了解。