高并行度的信息加解密算法研究(3)_毕业论文

毕业论文移动版

毕业论文 > 计算机论文 >

高并行度的信息加解密算法研究(3)


2.3  同一设备计算构架 CUDA
CUDA全称是Compute Unified Device Architecture(同一设备计算构架),是NVIDIA公司在2007年6月推出的一种在GPU上进行通用计算的架构。它具有全新的并行编程模型,而不需要像传统GPU开发方式那样进行图形API的映射,就可以使用GPU的资源进行并行计算。CUDA是一个包含软件和硬件的完整的并行计算架构,它的硬件设备是具有多个流处理器核,并支持CUDA的GPU;软件部分包括驱动程序、编译工具、runtime库和一些常用的数学运算库。CUDA采用了类C的语言进行开发,开发人员能够从熟悉的C语言从CPU比较平稳的过渡到GPU,易于掌握,不必重新学习语法。与传统的借助图形学API的GPU相比,支持CUDA的GPU在构架上有着如下两个显著地改进:
一是采用的统一的处理构架,可以更加有效的利用沟渠分布在像素渲染器和顶点渲染器的计算资源。二是引入了片内共享存储器,支持随机写入(scatter)和线程间的通信和同步(_syncthreads())。
在CUDA架构下,开发者可以通过创建和管理大量的线程的方法来使用GPU的硬件资源进行并行计算。在CUDA中,使用的是超轻量级线程,其创建和切换是由硬件来实现的,不会占用软件的执行时间。CUDA在runtime库中为用户提供了访问GPU硬件资源的接口,用户通过调用runtime库中的函数,就可以直接访问GPU的硬件资源。CUDA的编程语言是一种基于C语言的扩展,提供了通用的DRAM寻址方式,从而提供了很高的编程灵活性。操作系统可以通过管理多个并发运行的CUDA程序或图形应用程序来访问GPU。
CUDA为开发人员有效利用GPU的强大性能提供了条件。基于以上所述,我决定在基于支持CUDA构架的GPU上进行本文中加解密算法的并行处理研究。
2.4 CUDA编程模型
由于GPU的特点,它很适合做高密度数据的并行运算,但是对于不能并行的具有复杂执行路径的程序执行效率就会很低。因此当通过CUDA在GPU上进行通用计算的开发时,是把在应用程序中高密度数据可以进行并行计算的部分做成一个称作kernel的函数在GPU设备上执行,而应用程序中的其他串行执行的部分由主机上的CPU来完成。一个在GPU上执行的kernel可以包含极高数量并发执行的线程,在CUDA架构中是通过设计kernel中的线程来完成通用计算的GPU实现的。主机和GPU设备之间的交互是通过在主机和设备各自的DRAM之间传输数据来实现的,而这种数据传输是由设备的DMA引擎完成的,因此数据的传输并不会造成太多主机CPU开销。
一个kernel中的线程被划分成具有相同大小的线程块,线程块可以是一文、二文或者三文的,所以对应的线程就可以具有一文、二文或者三文的索引。在相同的线程块中,每个线程都具有一个一文的ID,这个ID和索引具有以下的关系:对于一文的线程块,线程ID就等于其索引;对于大小为(Dx,Dy)的二文线程块,索引为(x,y)的线程ID为(x+y* Dx);对于大小为(Dx,Dy,Dz)的三文线程块,索引为(x,y,z)的线程ID即为(x+y* Dx+z* Dx* Dy)。
同一个线程块中的线程之间可以通过同步操作以实现同步内存访问。当通过调用_syncthreads()内置函数在kernel中建立同步点时,一个线程块中所有执行到同步点的线程都会被挂起,直到这个线程块中所有的线程都到达这个同步点。为了使线程之间能够有效地同步工作,同步操作被设计为只需要一条指令即可以实现,并且同一个线程块中的所有线程都需要在同一个多核处理器上执行。因此每个线程块中线程的数量就受到单个处理器核上存储资源的限制。在CUDA 3.0版本中,一个线程块可以包含最多512个线程。而在最新的CUDA 4.0版本中,一个线程块最多可以包含的线程数量达到了1024个。 (责任编辑:qin)