本节书摘来自华章计算机《高性能科学与工程计算》一书中的第1章,第1.1节,作者:(德)Georg Hager Gerhard Wellein 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第1章 当代处理器
在1975~1995年的“旧时代”的科学计算时期,先进的高性能系统是专门为HPC市场设计的,主要的厂商有Cray、CDC、NEC、Fujitsu和Thinking Machines等。在性能和价格方面,这些系统远远超越了标准的“商品”电脑。20世纪70年代初发明的单芯片通用微处理器,是20世纪80年代末唯一足够成熟、可以打入HPC市场的技术。直到20世纪90年代末,标准的工作站集群甚至基于PC的硬件至少在理论峰值性能上才具备相应的竞争力。如今,情况已经发生了很大变化。HPC世界被低成本、现成的处理器系统占领,这些系统并不是主要为科学计算而设计的。一些传统的超级计算机厂商在这个有利可图的市场上活动,他们提供在单CPU水平上的高应用性能以及高度并行工作负载的系统。因此,科学家和工程师很可能遇到这样的“商品模式”,即随着需求的增长推动硬件向更为专业的方向发展。因此,本章将主要关注基于标准的高速缓存微处理器的系统。向量机(vector computer)支持不同的编程方式,这种编程方式在很多方面更接近科学计算的要求,但是目前向量机已非常罕见。然而如果没有它们,对超级计算机体系结构的讨论将不完整,1.6节对此提供了相关的概述。
1.1 存储程序的计算机体系结构
当讨论计算机系统时,我们的脑海中总是有一个清楚的体系结构概念,即1936年由图灵提出并由Eckert和Mauchly实现的第一个真正的计算机EDVAC [C129,C131]。图1-1显示了存储程序数字计算机的简图,将指令作为数据存储在内存,这是它不同于早期设计的最大特征。指令由控制单元读取并执行,一个独立的算术逻辑单元根据指令来负责实际的计算并操作内存中的数据。通过I/O设备可以与用户通信。中央处理单元(CPU)包括控制单元、算术逻辑单元、适合的内存接口和I/O接口。在存储程序计算机上编程意味着修改内存中的指令,原则上这可以由另一个程序完成。编译器就是一个典型的例子,因为它将C或Fortran等高级语言翻译成能够在内存中存储并能被计算机执行的指令。
这个简图是现今所有主流的计算机系统的基础,但仍然存在一些固有问题:
- 必须连续不断地向控制和算术逻辑单元提供数据,因此内存接口速度成为计算性能的瓶颈,这通常称为冯•诺依曼瓶颈。在接下来的章节中,我们将展示如何利用体系结构优化和编程技术减弱这个瓶颈导致的不利影响。尽管如此,这个瓶颈仍然是最严重的性能限制因素。
- 这种体系结构存在内在顺序性,一条指令可能处理来自内存的一个或一组操作数。SISD(单指令单数据,Single Instruction Single Data)即为这种概念。如何修改和扩展使得它能够以多种不同方式支持并行,以及这样一个并行机如何能够有效运用,同样是这本书的主题。
尽管存在着这些缺陷,但没有其他的体系结构概念能在将近70年的电子数字计算机中如此广泛地使用。