网站大量收购独家精品文档,联系QQ:2885784924

GPU上矩阵乘法的设计与实现.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
刘志伟:GPU上矩阵乘法的设计与实现 刘志伟:GPU上矩阵乘法的设计与实现 PAGE 2 PAGE 1 GPU上矩阵乘法的设计与实现 刘志伟 (南昌大学 信息与工程学院 计算机科学与技术 406130914138) 1 概述 矩阵乘法是科学计算中的最基本的操作,在许多领域中有广泛的应用。对于矩阵乘法的研究有几个方向。一个是研究矩阵乘法的计算复杂度,研究矩阵乘法的时间复杂度的下界,这方面的工作有strassen算法等。另外一个方向是根据不同的处理器体系结构,将经典的矩阵乘法高效的实现出来,这方面的结果体现在许多高效的BLAS库。许多高效的BLAS库都根据体系结构的特点高效的实现了矩阵乘法,比如GotoBLAS,ATLAS等。 众所周知,矩阵乘法是一种大计算量的算法,也是很耗时的运算。CPU提高单个核心性能的主要手段比如提高处理器工作频率及增加指令级并行都遇到了瓶颈,当遇到运算量大的计算,CPU进行大矩阵的乘法就变得相当耗时,运算效率很低下。 随着多核CPU和众核GPU的快速发展,计算行业正在从只使用CPU的“中央处理”向CPU与GPU并用的“协同处理”发展,并行系统已成为主流处理器芯片。传统的GPU架构受其硬件架构的影响不能有效利用其资源进行通用计算,NVIDIA (英伟达)公司推出的统一计算设备架构CUDA (Compute Unified Device Architectures),使得GPU具备更强的可编程性,更精确和更高的性能,应用领域也更加广泛。 2 CUDA简介 2.1 CUDA编程模型 NVIDIA的CUDA 架构通过对硬件的重新组织把GPU带到了更加一般的应用领域。它试图通过提供一般的高层和低层的API来访问GPU的并行元素以减轻问题映射到GPU上的不方便。现在的GPU特别适合计算密集型、高度并行化的计算。CUDA提供了对显卡的抽象,把显卡作为能够同时执行成千上万轻量级线程的设备,如图1所示。这些线程组织成块,块中的每个线程能够访问它们自身的寄存器和块的共享存储器,每个线程也能够和它相邻的 线程进行同步。一个内核函数的代码由一个或多个这样的线程执行。由于具有CUDA能力的设备允许DRAM的类属存取(聚集和分散),所以每个线程都能访问GPU板卡上的显存和纹理存储器。 图1 CUDA编程模型 在实际应用中,首先对问题进行分析,哪些部分可以在GPU上并行实现,哪些在CPU上执行。一旦确定程序中的并行部分,就可以考虑把这部分的计算工作交给GPU。在GPU上运行的CUDA并行计算函数称为kernel (内核函数)。一个kernel函数并不是一个完整的程序,而是整个CUDA程序中的一个可以被并行执行的步骤。如图1所示,一个完整的CUDA程序是由GPU中一系列的kernel函数并行步骤和CPU端串行处理步骤共同组成的,这些处理步骤会按照程序中相应语句的顺序依次执行,满足顺序一致性。 2.2 CUDA存储器模型 除了编程模型外,CUDA还规定了存储器模型,如图2所示。线程在执行时将会访问到处于不同存储空间中的数据。 图2 GPU的存储器层次结构 每个线程都拥有自己私有的存储器、寄存器和局部存储器;每个block拥有一块共享存储器(Shared Memory);grid中所有的线程都可以访问同一块全局存储器(Global Memory)。除此之外,还有两种可以被所有线程访问的只读存储器:常数存储器(Constant Memory)和纹理存储器(Texture Memory)。这几种存储器的访问速度不同,大小不同,在程序中使用不同的存储器对速度的影响较大。 寄存器速度最快,但容量最小,较少使用到;共享存储器容量较大,共享存储器的特点是速度较快且对于同一个block中的所有线程能够共享,这对程序中数据的分配十分有利。常数存储器和纹理存储器分别用于存放常数和图像。 3 矩阵乘法在GPU上的实现 本文主要探讨矩阵乘法如何在GPU上实现,故设计如下3个矩阵,如表1所示。 表1 实验所用示例矩阵 矩阵 数据类型 维度 matrixA float matrixB float matrixC float 设有矩阵,,则矩阵乘法的计算式为:。图3给出了此矩阵乘法在CPU上实现的代码,从中可以看出:矩阵乘法的计算量复杂度为O(n3)。而矩阵乘法的访存复杂度为O(n2),所以矩阵乘法的计算访存比复杂度为O(n),是一个典型的计算密集型应用。 for i = 1 to i = n do for j = 1 to j = n do C(i, j) = 0 for k = 1 to k = n do C(i, j) = A(i, k) * B(k, j) + C(i, j) ENDdo ENDdo ENDdo 图3 矩

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档