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

GPU上矩阵乘法的设计与实现刘志伟(南昌大学信息与工程学院计算机科学与技术406130914138)1概述矩阵乘法是科学计算中的最基本的操作,在许多领域中有广泛的应用。对于矩阵乘法的研究有几个方向。一个是研究矩阵乘法的计算复杂度,研究矩阵乘法的时间复杂度的下界,这方面的工作有strassen算法等。另外一个方向是根据不同的处理器体系结构,将经典的矩阵乘法高效的实现出来,这方面的结果体现在许多高效的BLAS库。许多高效的BLAS库都根据体系结构的特点高效的实现了矩阵乘法,比如GotoBLAS,ATLAS等。众所周知,矩阵乘法是一种大计算量的算法,也是很耗时的运算。CPU提高单个核心性能的主要手段比如提高处理器工作频率及增加指令级并行都遇到了瓶颈,当遇到运算量大的计算,CPU进行大矩阵的乘法就变得相当耗时,运算效率很低下。随着多核CPU和众核GPU的快速发展,计算行业正在从只使用CPU的“中央处理”向CPU与GPU并用的“协同处理”发展,并行系统已成为主流处理器芯片。传统的GPU架构受其硬件架构的影响不能有效利用其资源进行通用计算,NVIDIA(英伟达)公司推出的统一计算设备架构CUDA(ComputeUnifiedDeviceArchitectures),使得GPU具备更强的可编程性,更精确和更高的性能,应用领域也更加广泛。2CUDA简介2.1CUDA编程模型NVIDIA的CUDA架构通过对硬件的重新组织把GPU带到了更加一般的应用领域。它试图通过提供一般的高层和低层的API来访问GPU的并行元素以减轻问题映射到GPU上的不方便。现在的GPU特别适合计算密集型、高度并行化的计算。CUDA提供了对显卡的抽象,把显卡作为能够同时执行成千上万轻量级线程的设备,如图1所示。这些线程组织成块,块中的每个线程能够访问它们自身的寄存器和块的共享存储器,每个线程也能够和它相邻的线程进行同步。一个内核函数的代码由一个或多个这样的线程执行。由于具有CUDA能力的设备允许DRAM的类属存取(聚集和分散),所以每个线程都能访问GPU板卡上的显存和纹理存储器。图1CUDA编程模型在实际应用中,首先对问题进行分析,哪些部分可以在GPU上并行实现,哪些在CPU上执行。一旦确定程序中的并行部分,就可以考虑把这部分的计算工作交给GPU。在GPU上运行的CUDA并行计算函数称为kernel(内核函数)。一个kernel函数并不是一个完整的程序,而是整个CUDA程序中的一个可以被并行执行的步骤。如图1所示,一个完整的CUDA程序是由GPU中一系列的kernel函数并行步骤和CPU端串行处理步骤共同组成的,这些处理步骤会按照程序中相应语句的顺序依次执行,满足顺序一致性。2.2CUDA存储器模型除了编程模型外,CUDA还规定了存储器模型,如图2所示。线程在执行时将会访问到处于不同存储空间中的数据。图2GPU的存储器层次结构每个线程都拥有自己私有的存储器、寄存器和局部存储器;每个block拥有一块共享存储器(SharedMemory);grid中所有的线程都可以访问同一块全局存储器(GlobalMemory)。除此之外,还有两种可以被所有线程访问的只读存储器:常数存储器(ConstantMemory)和纹理存储器(TextureMemory)。这几种存储器的访问速度不同,大小不同,在程序中使用不同的存储器对速度的影响较大。寄存器速度最快,但容量最小,较少使用到;共享存储器容量较大,共享存储器的特点是速度较快且对于同一个block中的所有线程能够共享,这对程序中数据的分配十分有利。常数存储器和纹理存储器分别用于存放常数和图像。3矩阵乘法在GPU上的实现本文主要探讨矩阵乘法如何在GPU上实现,故设计如下3个矩阵,如表1所示。表1实验所用示例矩阵矩阵数据类型维度matrixAfloatmatrixBfloatmatrixCfloat设有矩阵,ijBbnn,ijCcnn则矩阵乘法的计算式为:1nijikkjkcab。图3给出了此矩阵乘法在CPU上实现的代码,从中可以看出:矩阵乘法的计算量复杂度为O(n3)。而矩阵乘法的访存复杂度为O(n2),所以矩阵乘法的计算访存比复杂度为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上实现的...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?