406130914138_刘志伟_gpu上矩阵乘法的设计与实现

406130914138_刘志伟_gpu上矩阵乘法的设计与实现

ID:11165449

大小:311.50 KB

页数:7页

时间:2018-07-10

406130914138_刘志伟_gpu上矩阵乘法的设计与实现_第1页
406130914138_刘志伟_gpu上矩阵乘法的设计与实现_第2页
406130914138_刘志伟_gpu上矩阵乘法的设计与实现_第3页
406130914138_刘志伟_gpu上矩阵乘法的设计与实现_第4页
406130914138_刘志伟_gpu上矩阵乘法的设计与实现_第5页
资源描述:

《406130914138_刘志伟_gpu上矩阵乘法的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、刘志伟:GPU上矩阵乘法的设计与实现GPU上矩阵乘法的设计与实现刘志伟(南昌大学信息与工程学院计算机科学与技术406130914138)1概述矩阵乘法是科学计算中的最基本的操作,在许多领域中有广泛的应用。对于矩阵乘法的研究有几个方向。一个是研究矩阵乘法的计算复杂度,研究矩阵乘法的时间复杂度的下界,这方面的工作有strassen算法等。另外一个方向是根据不同的处理器体系结构,将经典的矩阵乘法高效的实现出来,这方面的结果体现在许多高效的BLAS库。许多高效的BLAS库都根据体系结构的特点高效的实现了矩阵乘法,比

2、如GotoBLAS,ATLAS等。众所周知,矩阵乘法是一种大计算量的算法,也是很耗时的运算。CPU提高单个核心性能的主要手段比如提高处理器工作频率及增加指令级并行都遇到了瓶颈,当遇到运算量大的计算,CPU进行大矩阵的乘法就变得相当耗时,运算效率很低下。随着多核CPU和众核GPU的快速发展,计算行业正在从只使用CPU的“中央处理”向CPU与GPU并用的“协同处理”发展,并行系统已成为主流处理器芯片。传统的GPU架构受其硬件架构的影响不能有效利用其资源进行通用计算,NVIDIA(英伟达)公司推出的统一计算设备架

3、构CUDA(ComputeUnifiedDeviceArchitectures),使得GPU具备更强的可编程性,更精确和更高的性能,应用领域也更加广泛。2CUDA简介2.1CUDA编程模型NVIDIA的CUDA架构通过对硬件的重新组织把GPU带到了更加一般的应用领域。它试图通过提供一般的高层和低层的API来访问GPU的并行元素以减轻问题映射到GPU上的不方便。现在的GPU特别适合计算密集型、高度并行化的计算。CUDA提供了对显卡的抽象,把显卡作为能够同时执行成千上万轻量级线程的设备,如图1所示。这些线程组织

4、成块,块中的每个线程能够访问它们自身的寄存器和块的共享存储器,每个线程也能够和它相邻的线程进行同步。一个内核函数的代码由一个或多个这样的线程执行。由于具有CUDA能力的设备允许DRAM的类属存取(聚集和分散),所以每个线程都能访问GPU板卡上的显存和纹理存储器。7刘志伟:GPU上矩阵乘法的设计与实现图1CUDA编程模型在实际应用中,首先对问题进行分析,哪些部分可以在GPU上并行实现,哪些在CPU上执行。一旦确定程序中的并行部分,就可以考虑把这部分的计算工作交给GPU。在GPU上运行的CUDA并行计算函数称为

5、kernel(内核函数)。一个kernel函数并不是一个完整的程序,而是整个CUDA程序中的一个可以被并行执行的步骤。如图1所示,一个完整的CUDA程序是由GPU中一系列的kernel函数并行步骤和CPU端串行处理步骤共同组成的,这些处理步骤会按照程序中相应语句的顺序依次执行,满足顺序一致性。2.2CUDA存储器模型除了编程模型外,CUDA还规定了存储器模型,如图2所示。线程在执行时将会访问到处于不同存储空间中的数据。7刘志伟:GPU上矩阵乘法的设计与实现图2GPU的存储器层次结构每个线程都拥有自己私有的存

6、储器、寄存器和局部存储器;每个block拥有一块共享存储器(SharedMemory);grid中所有的线程都可以访问同一块全局存储器(GlobalMemory)。除此之外,还有两种可以被所有线程访问的只读存储器:常数存储器(ConstantMemory)和纹理存储器(TextureMemory)。这几种存储器的访问速度不同,大小不同,在程序中使用不同的存储器对速度的影响较大。寄存器速度最快,但容量最小,较少使用到;共享存储器容量较大,共享存储器的特点是速度较快且对于同一个block中的所有线程能够共享,这

7、对程序中数据的分配十分有利。常数存储器和纹理存储器分别用于存放常数和图像。3矩阵乘法在GPU上的实现本文主要探讨矩阵乘法如何在GPU上实现,故设计如下3个矩阵,如表1所示。表1实验所用示例矩阵矩阵数据类型维度matrixAfloatmatrixBfloatmatrixCfloat设有矩阵,,则矩阵乘法的计算式为:7刘志伟:GPU上矩阵乘法的设计与实现。图3给出了此矩阵乘法在CPU上实现的代码,从中可以看出:矩阵乘法的计算量复杂度为O(n3)。而矩阵乘法的访存复杂度为O(n2),所以矩阵乘法的计算访存比复杂度

8、为O(n),是一个典型的计算密集型应用。fori=1toi=ndoforj=1toj=ndoC(i,j)=0fork=1tok=ndoC(i,j)=A(i,k)*B(k,j)+C(i,j)ENDdoENDdoENDdo图3矩阵乘法在CPU上的实现方阵matrixA和matrixB相乘,并把相应的结果传给matrixC方阵。在CPU上实现的源码如图4所示,其中matrixA和matrixB方阵的元素均为随机生成。v

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。