英伟达测试Tesla

早在今年5月英伟达透露其高端GK110图形芯片的一部分新功能时,这家公司声称,这款GPU即图形处理器的两项新功能:Hyper-Q和动态并行处理(Dynamic
Parallelism)有望帮助GPU更高效地运行,而CPU即处理器不会一直干预。如今英伟达在逐步透露用于服务器的特斯拉(Tesla)K20
GPU协处理器的一些基准测试结果,GK110预计会在今年晚些时候交付。

CUDA 5,CUDA

GK110
GPU芯片有时称为Kepler2,绝对是功能超强的怪兽:芯片代工厂台积电公司(TSMC)采用了非常热门的28纳米工艺,在一块晶片上蚀刻了超过71亿个晶体管。它采用了15个极致流式多处理器(SMX)处理单元,每个单元又有192个单精度CUDA(计算统一设备架构)核心,为每三个一组的CUDA核心添加了64个双精度浮点单元。这为你在GK110芯片上的最多2880个CUDA核心上提供了960个双精度浮点单元。

GPU架构

SM(Streaming
Multiprocessors)是GPU架构中非常重要的部分,GPU硬件的并行性就是由SM决定的。

以Fermi架构为例,其包含以下主要组成部分:

  • CUDA cores
  • Shared Memory/L1Cache
  • Register File
  • Load/Store Units
  • Special Function Units
  • Warp Scheduler

GPU中每个SM都设计成支持数以百计的线程并行执行,并且每个GPU都包含了很多的SM,所以GPU支持成百上千的线程并行执行,当一个kernel启动后,thread会被分配到这些SM中执行。大量的thread可能会被分配到不同的SM,但是同一个block中的thread必然在同一个SM中并行执行。

CUDA采用Single Instruction Multiple
Thread(SIMT)的架构来管理和执行thread,这些thread以32个为单位组成一个单元,称作warps。warp中所有线程并行的执行相同的指令。每个thread拥有它自己的instruction
address counter和状态寄存器,并且用该线程自己的数据执行指令。

SIMT和SIMD(Single Instruction, Multiple
Data)类似。二者都通过将同样的指令广播给多个执行官单元来实现并行。一个主要的不同就是,SIMD要求所有的vector
element在一个统一的同步组里同步的执行,而SIMT允许线程们在一个warp中独立的执行。SIMT有三个SIMD没有的主要特征:

  • 每个thread拥有自己的instruction address counter
  • 每个thread拥有自己的状态寄存器
  • 每个thread可以有自己独立的执行路径

一个block只会由一个SM调度,block一旦被分配好SM,该block就会一直驻留在该SM中,直到执行结束。一个SM可以同时拥有多个block。下图显示了软件硬件方面的术语:

 银河国际手机版最新 1

需要注意的是,大部分thread只是逻辑上并行,并不是所有的thread可以在物理上同时执行。这就导致,同一个block中的线程可能会有不同步调。

并行thread之间的共享数据回导致竞态:多个线程请求同一个数据会导致未定义行为。CUDA提供了API来同步同一个block的thread以保证在进行下一步处理之前,所有thread都到达某个时间点。尽管如此,我们是没有什么原子操作来保证block内部的同步的。

同一个warp中的thread可以以任意顺序执行,active
warps被SM资源限制。当一个warp空闲时,SM就可以调度驻留在该SM中另一个可用warp。在并发的warp之间切换是没什么消耗的,因为硬件资源早就被分配到所有thread和block,所以该新调度的warp的状态已经存储在SM中了。

SM可以看做GPU的心脏,寄存器和共享内存是SM的稀缺资源。CUDA将这些资源分配给所有驻留在SM中的thread。因此,这些有限的资源就使每个SM中active
warps有非常严格的限制,也就限制了并行能力。所以,掌握部分硬件知识,有助于CUDA性能提升。

英伟达对绝对性能一直没有给出明确的态度,但是我们预计,GK110在处理器核心上,以1GHz的时钟频率,有望提供每秒近2万亿次浮点运算的原始双精度浮点性能,而在单精度下可能达到每秒3.5万亿次浮点运算。这性能大概是特斯拉M20系列GPU协处理器所用的现有Fermi
GF110 GPU的三倍,也就是说相当于每瓦散热性能高出三倍。

Fermi架构

Fermi是第一个完整的GPU计算架构。

  • 512个accelerator cores即所谓CUDA cores(包含ALU和FPU)
  • 16个SM,每个SM包含32个CUDA  core
  • 六个384位 GDDR5 DRAM,支持6GB global on-board memory
  • GigaThread engine(图左侧)将thread blocks分配给SM调度
  • 768KB L2 cache
  • 每个SM有16个load/store单元,允许每个clock
    cycle为16个thread(即所谓half-warp,不过现在不提这个东西了)计算源地址和目的地址
  • Special function units(SFU)用来执行sin cosine 等
  • 每个SM两个warp scheduler两个instruction dispatch
    unit,当一个block被分配到一个SM中后,所有该block中的thread会被分到不同的warp中。
  • Fermi(compute capability
    2.x)每个SM同时可处理48个warp共计1536个thread。

 银河国际手机版最新 2

银河国际手机版最新,每个SM由一下几部分组成:

  • 执行单元(CUDA cores)
  • 调度分配warp的单元
  • shared memory,register file,L1 cache

仅仅拥有更多的处理器核心提升不了性能。你还得更高效地利用这些核心;这时候,Hyper-Q和动态并行处理这两项功能正好可以派得上用场。

Kepler 架构

Kepler相较于Fermi更快,效率更高,性能更好。

  • 15个SM
  • 6个64位memory controller
  • 192个单精度CUDA
    cores,64个双精度单元,32个SFU,32个load/store单元(LD/ST)
  • 增加register file到64K
  • 每个Kepler的SM包含四个warp scheduler、八个instruction
    dispatchers,使得每个SM可以同时issue和执行四个warp。
  • Kepler K20X(compute capability
    3.5)每个SM可以同时调度64个warp共计2048个thread。

 银河国际手机版最新 3

 银河国际手机版最新 4

值得关注的是,这两项功能并未出现在GK104
GPU芯片上,这款芯片用在了英伟达已经交付给需要单精度浮点运算处理的客户的特斯拉K10协处理器上。特斯拉K10
GPU协处理器把两块GK104芯片放到一块PCI-Express卡上,在225瓦散热范围内提供了每秒4.58万亿次浮点的单精度运算能力——这个性能是Fermi
M2090协处理器的整整3.5倍。

Dynamic Parallelism

Dynamic
Parallelism是Kepler的新特性,允许GPU动态的启动新的Grid。有了这个特性,任何kernel内都可以启动其它的kernel了。这样直接实现了kernel的递归以及解决了kernel之间数据的依赖问题。也许D3D中光的散射可以用这个实现。

银河国际手机版最新 5

许多超级计算机应用程序运行消息传递接口(MPI)协议,将工作调度分派到并行机器上,而Hyper-Q让GPU得以在处理MPI工作分配时,以一种更合作的方式与CPU协同运行。如果使用Fermi卡,GPU每次只有一个MPI任务由CPU调度分配,然后卸载给GPU。这显然是个瓶颈。

Hyper-Q

Hyper-Q是Kepler的另一个新特性,增加了CPU和GPU之间硬件上的联系,使CPU可以在GPU上同时运行更多的任务。这样就可以增加GPU的利用率减少CPU的闲置时间。Fermi依赖一个单独的硬件上的工作队列来从CPU传递任务给GPU,这样在某个任务阻塞时,会导致之后的任务无法得到处理,Hyper-Q解决了这个问题。相应的,Kepler为GPU和CPU提供了32个工作队列。

银河国际手机版最新 6

 

银河国际手机版最新 7

不同arch的主要参数对比

银河国际手机版最新 8

银河国际手机版最新 9

 

5,CUDA GPU架构 SM(Streaming
Multiprocessors)是GPU架构中非常重要的部分,GPU硬件的并行性就是由SM决定的。
以Fermi架构为例,其包含以下主…

英伟达为Kepler GPU增添的Hyper-Q功能

借助Hyper-Q,英伟达为GPU本身添加了一个队列,现在处理器可以同时把最多32个不同的MPI任务调度分派给GPU。没必要改动一行MPI代码,就可以充分利用Hyper-Q;CPU与GPU进行联系时,这项功能完全是自动发挥作用。

为了表明Hyper-Q的效果有多好(以及那些数千个CUDA核心不会无所事事),英伟达的高级开发工程师Peter
Messmer拿来了名为CP2K的一些分子模拟代码。他在博客中表示,这种代码“对GPU来说向来一向很难处理的代码”,测试了在Hyper-Q功能先关闭,后开启的特斯拉K20协处理器上运行起来有多好。

正如Messmer解释的那样,当MPI进程被CPU限制于少量的工作时,MPI应用程序“出现了打折扣的性能提升”。CPU频繁接到任务,而GPU在许多时候处于闲置状态。而混合系统中的GPU提速幅度也不是很明显,你从这个基准测试中可以看出。这项测试把特斯拉K20协处理器放到配备16核心皓龙6200处理器的未来版克雷XK7超级计算机节点里面。

银河国际手机版最新 10

Hyper-Q为运行CP2K分子模拟的节点将性能提升了2.5倍。

就这个模拟864个水分子的特定数据集而言,增添CPU和GPU节点组合其实提升性能的幅度不是很大。如果是Hyper-Q功能没有开启的16个节点,你能获得12倍的性能(由于某种原因,英伟达的Y轴代表较之两个CPU+GPU节点的相对提速)。但在拥有16个CPU+GPU节点、Hyper-Q功能开启的同一系统上,性能高达2.5倍。你要知道,英伟达并没有承诺:启用Hyper-Q功能后,所有代码都会类似的提速效果。

我们询问英伟达特斯拉事业部的高级主管Sumit Gupta,为什么CP2K测试不对Fermi
GPU和Kepler
GPU进行横向比较。他开玩笑说,英伟达总得为今年11月在盐湖城召开的SC12超级计算大会保留压箱之作。

借助GK110
GPU的另一项功能:动态并行处理,GPU就能够根据需要在GPU里面调度分派工作,受制于由CPU分派给它的运算任务。如果是Fermi
GPU,系统中的CPU把工作分派给一个或多个CUDA核心,工作的处理结果会被送回到CPU。如果进一步的运算必不可少,CPU就把这部分数据和算法分派到GPU,然后GPU把处理结果发回给CPU,依次往返,直至运算计算完毕。

银河国际手机版最新 11

动态并行处理:让GPU调度处理自己的工作

如果使用现有的Fermi
GPU,会有大量的往返操作。动态并行处理功能让GPU可以处理自己的工作。但是更重要的是,它还可以让模拟的精细度实现动态变化:处理值得关注的任务时,获得更精细的粒度,而在什么都没进行的模拟方面,基本上什么都不做。

通过调整模拟的精细度和数据的精细度,你就能获得更好的结果,(在更短的时间内)处理更少的工作,不然在所有区域和时间片处理细粒度的模拟时效果差强人意。

银河国际手机版最新 12

GK110 GPU来自动态并行处理的性能提升

动态并行处理方面最重要的一点是,GPU会针对运算的粗粒度自动作出决策;根据需要,对数据作出响应、启动新的线程。

为了展示动态并行处理的早期测试结果,英伟达没有进行流体力学模拟或者诸如此类的模拟,而是在另一篇博文中,英伟达工程师Steven
Jones对动态并行处理功能先开启、后关闭的K20
GPU协处理器进行了Quicksort基准测试。

如果你忘了以前学的计算机学入门课程,Jones在博文中添加了他在测试中所用的Quicksort代码。值得关注的是,在动态并行处理功能开启并使用的GPU上编写Quicksort例程只用了一半的代码,那是由于你没必要控制CPU与GPU之间的来回操作。

从上面那张图中可以看出,如果你为由CPU排序的每一段数据处理所有的运行工作——Fermi
GPU就需要这么处理,那么它要花更长的时间来排序。在K20
GPU上,动态并行处理功能把Quicksort的性能提升了两倍,几乎能够随数据集的大小灵活扩展。值得关注的是,这个K20在处理Quicksort方面与实际的Fermi
GPU相比到底好多少,以及其他工作负载和模拟如何处理这种GPU自主性。

Gupta告诉我们,特斯拉K20协处理器有望在今年第四季度首批交付。

发表评论

电子邮件地址不会被公开。 必填项已用*标注