GPU如何助力高性能计算

时间:2009-12-13   来源:   网友评论:0   人气: 118 作者:

CPU执行指令的方式就是一个接着另一个地执行。CPU中有许多能够加速串行计算的技术。高速缓存、无次序执行、超标量技术、分支预测……均为抽取指令的技术或一系列指令的串行级并行机制。CPU对片上高速缓存的设计与容量的依赖也非常大。如果程序大小与CPU高速缓存容量不匹配,那么该程序在CPU上的运行速度将会很慢。

  CPU的主要运作原理,不论其外观,都是执行储存于被称为程序里的一系列指令。在此讨论的是遵循普遍的冯·诺伊曼架构设计的装置。程序以一系列数字储存在计算机记忆体中。差不多所有的冯·诺伊曼-CPU的运作原理可分为四个阶段:提取(fetch)、解码(decode)、执行(execute)和写回(writeback)。

  第一阶段,提取,从程序记忆体中检索指令(为数值或一系列数值)。由程序计数器(PC)指定程序记忆体的位置,程序计数器保存供识别目前程序位置的数值。换言之,程序计数器记录了CPU在目前程序里的踪迹。提取指令之后,PC根据指令式长度增加记忆体单元[iwordlength]。指令的提取常常必须从相对较慢的记忆体查找,导致CPU等候指令的送入。这个问题主要被论及在现代处理器的高速缓存和管线化架构(见下)。

  CPU根据从记忆体提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片断。根据CPU的指令集架构(ISA)定义将数值解译为指令[isa]。一部分的指令数值为运算码(opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法(addition)运算的运算目标。这样的运算目标也许提供一个常数值(即立即值),或是一个空间的寻址值:寄存器或记忆体地址,以寻址模式决定。在旧的设计中,CPU里的指令解码部分是无法改变的硬体装置。不过在众多抽象且复杂的CPU和ISA中,一个微程序时常用来帮助转换指令为各种形态的讯号。这些微程序在已成品的CPU中往往可以重写,方便变更解码指令。

  在提取和解码阶段之后,接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。例如,要求一个加法运算,算数逻辑单元(ALU,arithmetic logic unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而且在输出将含有总和结果。ALU内含电路系统,以于输出端完成简单的普通运算和逻辑运算(比如加法和比特运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志寄存器里,运算溢出(arithmetic overflow)标志可能会被设置(参见以下的数值精度探讨)。

  最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果极常被写进CPU内部的寄存器,以供随后指令快速访问。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主记忆体。某些类型的指令会操作程序计数器,而不直接产生结果数据。这些一般称作“跳转”(jumps)并在程序中带来循环行为、条件性执行(透过条件跳转)和函数[jumps]。许多指令也会改变标志寄存器的状态比特。这些标志可用来影响程序行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值的大小,根据比较结果在标志寄存器上设置一个数值。这个标志可借由随后的跳转指令来决定程序动向。

  在执行指令并写回结果数据之后,程序计数器的值会递增,反复整个过程,下一个指令周期正常的提取下一个顺序指令。如果完成的是跳转指令,程序计数器将会修改成跳转到的指令地址,且程序继续正常执行。GPU内部的并行计算架构围绕两个基本概念而设计。首先,程序中的数据可分成许多个部分,而为数众多的核群可以并行地处理这些数据。第二个架构方面的设想是,数据将不与高速缓存匹配。例如在图形计算或石油天然气数据处理上,数据量可能会达到兆字节甚至是太字节,用高速缓存来容纳如此巨大的数据量几乎是不切实际的。考虑到这两点设想,GPU被设计为能够使用数以千计的线程,所有线程均并行地执行,能够访问巨大容量的本地存储器。


 

文章评论