目前市场上的
NVIDIA
显卡都是基于
Tesla
架构的,分为
G80
、
G92
、
GT200
三个系列。
Tesla
体系架构是一块具有可扩展处器数量的处理器阵列。每个
GT200 GPU
包含
240
个流处理器(
streamingprocessor,SP
),每
8
个流处理器又组成了一个流多处理器
(streaming multiprocessor,SM)
,因此共有
30
个流多处理器。
GPU
在工作时,工作负载由
PCI-E
总线从
CPU
传入
GPU
显存,按照体系架构的层次自顶向下分发。PCI-E 2.0规范中,每个通道上下行的数据传输速度达到了
5.0Gbit/s
,这样
PCI-E2.0
×
16
插槽能够为上下行数据各提供了
5.0*16Gbit/s=10GB/s
的带宽,故有效带宽为
8GB/s,
而
PCI-E 3.0
规范的上下行数据带宽各为
20GB/s
。但是由于
PCI-E
数据封包的影响,实际可用的带宽大约在
5-6GB/s
(
PCI-E 2.0 ×16
)。 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE
在GT200架构中,每3个SM组成一个TPC(ThreadProcessing Cluster,线程处理器集群),而在G80架构中,是两个SM组成一个TPC,G80里面有8个TPC,因为G80有128(2*8*8)个流处理器,而GT200中TPC增加到了10(3*10*8)个,其中,每个TPC内部还有一个纹理流水线。
大多数时候,称呼streaming processor为流处理器,其实并不太正确,因为如果称streaming processor为流处理器的话,自然是隐式的与CPU相对,但是CPU有独立的一套输入输出机构,而streaming processor并没有,不能在GPU编程中使用printf就是一个例证。将SM与CPU的核相比更加合适。和现在的CPU的核一样,SM也拥有完整前端。
GT200和G80的每个SM包含8个流处理器。流处理器也有其他的名称,如线程处理器,“核”等,而最新的Fermi架构中,给了它一个新的名称:CUDA Core。 SP并不是独立的处理器核,它有独立的寄存器和程序计数器(PC),但没有取指和调度单元来构成完整的前端(由SM提供)。因此,SP更加类似于当代的多线程CPU中的一条流水线。SM每发射一条指令,8个SP将各执行4遍。因此由32个线程组成的线程束(warp)是Tesla架构的最小执行单位。由于GPU中SP的频率略高于SM中其他单元的两倍,因此每两个SP周期SP才能对片内存储器进行一次访问,所以一个warp中的32个线程又可以分为两个half-warp,这也是为什么取数会成为运算的瓶颈原因。Warp的大小对操作延迟和访存延迟会产生影响,取Warp大小为32是NVIDIA综合权衡的结果。
SM最主要的执行资源是8个32bit ALU和MAD(multiply-add units,乘加器)。它们能够对符合IEEE标准的单精度浮点数(对应float型)和32-bit整数(对应int型,或者unsigned int型)进行运算。每次运算需要4个时钟周期(SP周期,并非核心周期)。因为使用了四级流水线,因此在每个时钟周期,ALU或MAD都能取出一个warp 的32个线程中的8个操作数,在随后的3个时钟周期内进行运算并写回结果。
每个SM中,还有一个共享存储器(Sharedmemory),共享存储器用于通用并行计算时的共享数据和块内线程通信,但是由于它采用的是片上存储器,其速度极快,因此也被用于优化程序性能。
每个SM 通过使用两个特殊函数(SpecialFunction Unit,SFU)单元进行超越函数和属性插值函数(根据顶点属性来对像素进行插值)计算。SFU用来执行超越函数、插值以及其他特殊运算。SFU执行的指令大多数有16个时钟周期的延迟,而一些由多个指令构成的复杂运算,如平方根或者指数运算则需要32甚至更多的时钟周期。SFU中用于插值的部分拥有若干个32-bit浮点乘法单元,可以用来进行独立于浮点处理单元(FloatProcessing Unit,FPU)的乘法运算。SFU实际上有两个执行单元,每个执行单元为SM中8条流水线中的4条服务。向SFU发射的乘法指令也只需要4个时钟周期。
在GT200中,每个SM还有一个双精度单元,用于双精度计算,但是其计算能力不到单精度的1/8。
控制流指令(CMP,比较指令)是由分支单元执行的。GPU没有分支预测机制,因此在分支得到机会执行之前,它将被挂起,直到所有的分支路径都执行完成,这会极大的降低性能。
在GT200架构中,每3个SM组成一个TPC(ThreadProcessing Cluster,线程处理器集群),而在G80架构中,是两个SM组成一个TPC,G80里面有8个TPC,因为G80有128(2*8*8)个流处理器,而GT200中TPC增加到了10(3*10*8)个,其中,每个TPC内部还有一个纹理流水线。
大多数时候,称呼streaming processor为流处理器,其实并不太正确,因为如果称streaming processor为流处理器的话,自然是隐式的与CPU相对,但是CPU有独立的一套输入输出机构,而streaming processor并没有,不能在GPU编程中使用printf就是一个例证。将SM与CPU的核相比更加合适。和现在的CPU的核一样,SM也拥有完整前端。
GT200和G80的每个SM包含8个流处理器。流处理器也有其他的名称,如线程处理器,“核”等,而最新的Fermi架构中,给了它一个新的名称:CUDA Core。 SP并不是独立的处理器核,它有独立的寄存器和程序计数器(PC),但没有取指和调度单元来构成完整的前端(由SM提供)。因此,SP更加类似于当代的多线程CPU中的一条流水线。SM每发射一条指令,8个SP将各执行4遍。因此由32个线程组成的线程束(warp)是Tesla架构的最小执行单位。由于GPU中SP的频率略高于SM中其他单元的两倍,因此每两个SP周期SP才能对片内存储器进行一次访问,所以一个warp中的32个线程又可以分为两个half-warp,这也是为什么取数会成为运算的瓶颈原因。Warp的大小对操作延迟和访存延迟会产生影响,取Warp大小为32是NVIDIA综合权衡的结果。
SM最主要的执行资源是8个32bit ALU和MAD(multiply-add units,乘加器)。它们能够对符合IEEE标准的单精度浮点数(对应float型)和32-bit整数(对应int型,或者unsigned int型)进行运算。每次运算需要4个时钟周期(SP周期,并非核心周期)。因为使用了四级流水线,因此在每个时钟周期,ALU或MAD都能取出一个warp 的32个线程中的8个操作数,在随后的3个时钟周期内进行运算并写回结果。
每个SM中,还有一个共享存储器(Sharedmemory),共享存储器用于通用并行计算时的共享数据和块内线程通信,但是由于它采用的是片上存储器,其速度极快,因此也被用于优化程序性能。
每个SM 通过使用两个特殊函数(SpecialFunction Unit,SFU)单元进行超越函数和属性插值函数(根据顶点属性来对像素进行插值)计算。SFU用来执行超越函数、插值以及其他特殊运算。SFU执行的指令大多数有16个时钟周期的延迟,而一些由多个指令构成的复杂运算,如平方根或者指数运算则需要32甚至更多的时钟周期。SFU中用于插值的部分拥有若干个32-bit浮点乘法单元,可以用来进行独立于浮点处理单元(FloatProcessing Unit,FPU)的乘法运算。SFU实际上有两个执行单元,每个执行单元为SM中8条流水线中的4条服务。向SFU发射的乘法指令也只需要4个时钟周期。
在GT200中,每个SM还有一个双精度单元,用于双精度计算,但是其计算能力不到单精度的1/8。
控制流指令(CMP,比较指令)是由分支单元执行的。GPU没有分支预测机制,因此在分支得到机会执行之前,它将被挂起,直到所有的分支路径都执行完成,这会极大的降低性能。