架构解析:从硬件角度看CUDA

转自http://space.itpub.net/14741601/viewspace-410815

架构解析:从硬件角度看CUDA(上)

如果你是一位小熊在线的忠实读者,那么你对NVIDIA最新的GPU架构技术一定并不陌生。如果你不经常看小熊在线的文章,那么我还是建议你多做一些功课,去了解一下NVIDIA最新的显卡特色技术。因为NVIDIA的CUDA架构与他们的GPU架构稍有不同,并且在这篇文章中,将为读者揭示一些NVIDIA从未提及的技术细节。

GPU的处理核心架构

从上面的这张架构图我们可以看到,NVIDIA的Shader核心是由若干个材质处理单元(TPC)的群组所构成的。例如一个8800GTX,它内部就有8个群组,而8800GTS内部就有6个群组。事实上,每一个群组都是由1个材质处理单元和2个流多重处理器构成的。而处理器又由一个前端的读取/解码单元,一个指令发送单元,一个由八个计算单元组成的组,和2个SFU超级功能单元所组成,他们在处理指令方面都属于SIMD单指令多数据流。同样这类指令也适用于所有warp中的线程。NVIDIA这种并行模式叫做SIMT单指令多线程执行单元。需要指出的是,后端的操作,比前端操作要高出2倍的时钟周期。在实际中,部分执行指令有可能有2倍长。16路的SIMD,就只能相当于8路的处理效能。

流多重处理器在运作模式下,允许每个时钟周期内,在流水线的前端,让一个warp处在准备执行的状态。在一个warp中的32个线程中的应用指令,在流水线的后端,需要用4个时钟周期来处理。但是这种操作在流水线的前端,仅仅需要1/2的时钟周期就可以完成,从这一点来看,仅仅需要2个时钟周期,就可以完成操作。

因此为了保证流水线前后端的速度一致,使得硬件的利用率最大化,CUDA推出了一种交替类型的指令周期。每个典型的指令使用一个时钟周期,而SFU的指令在另一个周期。小熊在线www.beareyes.com.cn

每个多重处理器也有一些确定数量的资源,以便可以更精确的榨取它们的性能。它们有一些很小的存储区域,这些区域被叫做共享内存。每一个多重处理器的共享内存仅有16KB大小。这并不是一个高速缓存,这是由程序自由管理的存储区域。这方面与Cell处理器上的SPU处理单元有些类似,可以进行本地的数据存储。这些技术细节是非常独特而有趣的,并且你可以在CUDA的文档中找到相关更详细的软件与硬件技术说明。这些存储区域并不是为了pixel shaders而设计的,他们主要针对的就是CUDA。

架构解析:从硬件角度看CUDA(下)

这个存储区域为block块中的线程提供了一种信息沟通的途径。它最重要的作用就是强调限制级别。所有的线程都保证被封装到一个block块中,这就保证了多重处理器可以有效的处理这些任务。反过来说,指派block块到不同的多重处理器中,是非常不确定的。这就意味着,在执行的时候来自不同block块中的线程是无法进行通信的,使用这种存储区是一件非常复杂的事儿。但是设计这些复杂的存储区,对于整体架构来说也是值得的。因为某些特殊的线程,可能会贸然访问主内存,这也许会产生很多冲突,而这种共享存储区可以快速的链接寄存器。

block块内部架构

这些共享的存储区并不是多重处理器唯一可以访问的存储设备。很显然,他们可以使用显存,但是相对于共享存储区来说,显存的带宽和速度都不如前者。因此,这种机制可以抑制对内存过于频繁的访问。NVIDIA也提供了多重处理器的高速缓存,可以存储常量和纹理,大致相当于每个多重处理器能分配到8KB的空间。

多重处理器内部架构

同时,多重处理器也具备8192个寄存器。在多重处理器中所有激活的block块中所有的线程,都可以通过这些寄存器共享信息。不过激活的warps总数被限制在24个,也就是768个线程。例如8800GTX最多可在同一时间处理12288个线程。在这方面加以限制,是为了不让GPU的资源消耗的太多,可以更合理的分配计算任务。

针对CUDA优化过的程序从本质上讲就是在block块的数量与他们的尺寸之间找到一种平衡。在一个block块中加入更多的线程,有利于提高内存潜伏期的效率,但是与此同时可以使用的寄存器数量就要少了。如果block块中的线程数太多了,比如达到512个线程的水平,那么整个流水线的执行效能就大大降低了。这仅仅够喂饱一个多重处理器的,浪费了256个线程的处理能力。因此NVIDIA建议每个block块使用128至256个线程,这是最为折中的办法,它会在内核的潜伏期与寄存器数量之间找到最好的平衡点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值