欢迎来到天天文库
浏览记录
ID:14969717
大小:1.35 MB
页数:21页
时间:2018-07-31
《基于cuda平台的gpu并行计算技术研究终稿》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、CUDA架构下GPU硬件结构GPU与CPU的最大不同点在于硬件结构自身,而硬件结构不同是由于晶体管用途分布造成的,如图2.1所示。GPU比CPU在数据计算能力和存储器带框上有相对大的优势,在能耗和价格上付出的代价也相对较小,从而在异构操作协同处理运算上占领并行运算的一席之地。GPU作为图形渲染的主要硬件,因图像渲染运算的高度并行性,它可以采用添加ALU和ControlCache(存储器控制单元)的方式提高运算能力和存储器带宽。CPU的制造厂家是把更多的晶体管用于复杂的控制单元以及缓冲区,而GPU的晶体管作为ALU的居多,从何提高GPU的总体执行单元
2、效率。图2.1CPU与GPU硬件结构比较在传统的CPU+GPU异构并行的系统中,复杂逻辑的事务计算由CPU完成,这样的要求,也促使CPU采用分配大量缓存、分支预测以及复杂控制逻辑的方式较快得获取数据和指令,以此提高CPU的运算速率;而GPU负责的是计算高度密集的图像渲染工作,它通过分配更多的ALU来运行量大但相对简单的线程(Thread),且要求较高的存储器带宽以保证整体的数据传输速率。CPU和GPU的不同设计理念造就了这两个处理器的架构差异及性能差异,具体如下:1)线程差异,CPU的多线程是一种软件粗粒度多线程,在执行的线程中断后,需要保存中断线
3、程前后数据同时装载下一个线程的数据,这个过程需要很大的时间成本;GPU的多线则不存在这样的数据交换过程,因此在并行执行过程中省去更多时间,提高效率。2)计算核心差异,主流CPU采用多核技术,3到6条执行流水线在每个计算核心中,乱序执行、预测执行和大容量缓存技术都被采用到CPU核心中意达到提高指令级并行的目的,这些技术的加入也限制了更多核心数量的集成。而GPU集成了多个流多处理器,因此每个GPU可被看成1到30个SIMD处理器,其中每个SIMD处理器包含8个ID流处理器,GPU的并行则是利用了多个流处理器间的粗粒度并行及流多处理器内的细粒度数据并行。
4、ALU较同时期CPU多的主流GPU在单精度浮点处理能力比CPU高大约15倍。3)带宽差异,因GDDR存储器存在相对位置不一致导致CPU内存的信号完整性问题考虑比GPU显存严谨,故而同等条件下显存的工作效率比内存高;其次,多存储器控制单元的GPU比存储器控制单元为双通道或者单通道的CPU在同时访问的存储器粒数量要高。图2.2为2007年以前GPU与CPU带宽比较。1)缓存差异,为降低访存延迟并节约带宽,CPU存在使用大量晶体颗粒的缓存,为了保持缓存与内存数据一致,还添加了复杂的缓存逻辑控制单元;GPU则没有如此复杂的缓存机制和替换体系,因GPU缓存只
5、读,减少显存带宽,从而控制单元相对简单些。1.1.CUDA软件体系1.1.1.CUDA的存储器模型CUDA架构下的GPU是一种多层存储空间复杂结构体,这是GPU自身的发展历史和GPU原本的设计理念决定的。如图2.3所示[],该图表明了CUDA的存储器结构包括六种存储器:全局存储器(GlobalMemory)、寄存器(Registers)、本地存储器(LocalMemory)、共享存储器(SharedMemory)、常量存储器(ConstantMemory)、纹理存储器(TextureMemory),其中前三者支持读/写操作,而后两者只具备读操作。这
6、些存储器在性能上存在较大差别,它们的结构各异、运算速度不同、大小及存储规模不一样,也决定了CUDA在并行运算过程中存在相同并行运算过程有不同的运算加速收益。共享存储器、寄存器以其独特的结构组成方式在这些存储器中在数据流访问操作速度方面是相对较快的。Grid0SharedMemoryRegisterThread(0,0)Thread(0,0)RegisterLocalMemoryLocalMemoryBlock0SharedMemoryRegisterThread(0,0)Thread(0,0)RegisterLocalMemoryLocalMemo
7、ryBlock1GlobalMemoryConstantMemoryTextureMemoryHost图2.3CUDA存储模型示意图对于每个并行的运算线程来说,寄存器、局部存储器都是私有的,也就是说每个线程单独存在使用各自的寄存器及局部寄存器。之中,作为GPU上的高速缓存区,寄存器能够在极低延迟的情况下别每个线程的ALU所读取。数量客观的寄存器文件(RegisterFile)构成了寄存器的基础单元,并且被分配给每个正在执行的并行线程,因此,在并行执行的过程中每个线程所拥有的寄存器大小及其有限,在编程过程中应尽量为每个线程分配足够且较少的的私有变量。
8、局部存储器是寄存器在线程执行过程中的补充,当寄存器使用过多,或者并行使用到结构体、数组这样的大数据变量,局部寄存器就充当暂
此文档下载收益归作者所有