《高性能科学与工程计算》——第1章 当代处理器1.1 存储程序的计算机体系结构

第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年的电子数字计算机中如此广泛地使用。

时间: 2024-07-31 03:36:53

《高性能科学与工程计算》——第1章 当代处理器1.1 存储程序的计算机体系结构的相关文章

《高性能科学与工程计算》——第3章 数据访存优化3.1 平衡分析与lightspeed评估

第3章 数据访存优化 在高性能计算中,访存是最重要的性能限制因素.如前所述,微处理器的理论峰值性能和访存带宽存在固有的"不平衡性".因为很多科学和工程应用程序由需要大量数据传输的基于循环的代码构成,所以相对较低的内存(甚至是硬盘)访存带宽,就会导致片上资源的低效利用和程序性能的降低.图3-1综合显示了现代并行计算机系统的数据通路构成,以及在不同层次上的带宽和延迟范围.执行计算任务的功能部件位于该层次结构的顶部.在这些不同层次的数据通路中,访存带宽最大有3-4个数量级的差异,访存延迟最高

《高性能科学与工程计算》——第2章 串行代码基本优化技术2.1 标量剖析

第2章 串行代码基本优化技术 在千核级并行计算机时代,有些观点认为编写高效串行代码在许多领域已经有些过时了.因为增加更多CPU以获得大规模并行能力要比投入大量精力优化串行代码简单得多.这似乎是一个合理的理论,5.3.8节的论述中也体现了对这种观点的支持.然而,本书认为程序在单处理器上的性能优化毫无疑问是最重要的,如果通过一些简单的优化方法就可以实现两倍加速比,那么用户会更倾向于使用较少的CPU.这样不仅可把宝贵的计算资源释放给其他用户或项目,而且还可以使投入大量资金购买的硬件获得更加有效的利用.

《高性能科学与工程计算》——1.2 基于高速缓存的通用微处理器体系结构

1.2 基于高速缓存的通用微处理器体系结构 微处理器可能是人类发明的最复杂的机器.然而,就像前面章节中描述的那样,它们都基于存储程序数字计算机的概念.对于科学家而言,理解CPU所有内部工作细节是不可能的,也是不必要的,尽管把握其高级特性对于了解潜在的性能瓶颈是有帮助的.图1-2展示了现代基于高速缓存的通用微处理器的简图.对于一个运行的程序,真正执行计算的部分是仅占芯片一小部分的浮点型(FP)和整型(INT)计算单元.其他逻辑控制单元用来向计算单元提供操作数.一般将CPU寄存器区分为浮点数和整数两

《高性能科学与工程计算》——2.5 C++优化

2.5 C++优化 目前,有大量关于如何编写高效C++代码的文献[C92,C93, C94, C95].我们的目标不是取代它们.所以我们特意忽略了引用计数.写时复制.智能指针等关键技术.本节以循环代码为例,根据我们的经验指出C++编程中经常存在的性能错误和误解. C++编程存在着一个根深蒂固的假象:编译器应该能够识别高级C++程序包含的所有抽象和代码混淆.首先,C++是一门支持复杂管理的高级编程语言,且自身特征明显(如运算符重载.面向对象.自动构建/销毁等).然而,这些特征绝大多数都不适合编写高

《高性能科学与工程计算》——1.6 向量处理器

1.6 向量处理器 从Cray 1超级计算机开始,直到基于RISC的高度并行计算机出现之前,向量机一直占据着科学计算的主要领域.在写这本书时,只有两家公司还在制造和销售向量机.但因为对内存带宽和运行时间有高度需求,向量机还是有着一个充满商机的市场. 根据设计,对于合适的可向量化的代码,向量处理器相较于标准的微处理器可以达到一个较好的实际性能.这种设计遵循单指令多数据(SIMD)的范例,即一条简单的机器指令被自动地应用于很多类型相同的参数.许多现代的基于cache的微处理器以扩展SISD指令集的形

《高性能科学与工程计算》——1.3 存储层次

1.3 存储层次 数据以不同的方式存储在计算机系统中.前面章节提到,CPU有一组可以不延时访问的寄存器.另外,有一个或几个容量小但存取速度快的cache,用以保存最近被访问过的数据项副本.主存要慢得多,但是容量比cache大很多.最后,数据能够存放在磁盘上,在需要的时候再复制到主存中.这是一个复杂的层次结构,为了搞清楚它的性能瓶颈,理解数据在不同层次之间的传递原则是至关重要的.下面我们将集中描述从CPU到主存的各个层次(见图1-3).1.3.1 高速缓存 高速缓存是低容量.高速度的存储器,通常集

《高性能科学与工程计算》——2.4 编译器作用

2.4 编译器作用 通过利用编译器自动优化,高性能计算程序可以获得不同程度的性能改进.几乎每个现代编译器都可以在命令行上设置编译选项,以便对编译器优化目标程序进行细粒度控制.有些情况下可以简单地通过更换一个编译器来检查程序是否还存在性能提升空间.编译器需要进行复杂的工作以将高级代码编写成的源程序编译为机器代码,同时要顾及到处理器内部资源.本章和下一章讨论的一些优化方法可以在某些简单情况下被编译器实现,但是涉及复杂的情况时就无法用编译器自动完成优化工作.始终要注意的一点是编译器可能足够聪明但是又可

《高性能科学与工程计算》——2.2 优化常识

2.2 优化常识 简单的代码修改经常会带来性能的显著提升.下面的章节总结了避免性能缺陷的几个最重要的"优化常识".这些方法看似微不足道,但许多科学应用程序在应用这些方法后,性能都有了显著提升.2.2.1 少做工作 重新组织代码以减少代码工作量,在很多情况下可显著提升性能.最常见的例子是循环检测一组对象是否具有特定属性,任一对象具备该属性即可: 如果complex_func()函数没有其他作用,FLAG是唯一和循环外部通信的变量.这种情况下,FLAG值一经改变,就立即退出循环可明显减少计

《高性能科学与工程计算》——1.4 多核处理器

1.4 多核处理器 近年来并且至少在接下来的十年,虽然摩尔定律依然成立,但标准的微处理器开始遇到散热问题:数百万个晶体管芯片的开关和漏电功耗如此之大,使散热成为一个工程和商业主要关注的问题.另一方面,由于硬件架构方面的改进和cache尺寸的增加,促进了时钟频率不断提高,但已不足以获得符合摩尔定律1比1的性能提升.处理器厂商们正在寻找一种突破这种能耗性能瓶颈的新方法--多核设计. 对于半导体处理技术,CPU的功耗和时钟频率fc的三次方成比例(实际上是fc和电源电压Vcc的二次方的乘积,但是fc与V