MATLAB编程GPU..docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MATLAB编程GPU.

多核机器和超线程技术,使科学家,工程师,金融分析师,以加快计算密集型应用在各种学科。今天,另一种类型的硬件承诺,甚至更高的计算性能:图形处理单元(GPU)。 原本用来加速图形渲染,GPU是越来越多地应用于科学计算。与传统的CPU,其中包括不超过少数核心,GPU的整数和浮点处理器的大规模并行阵列,以及专用的,高速的内存。一个典型的GPU包含数以百计的这些较小的处理器(图1)。 多内核(multiple cores) 图1 一个CPU系统和GPU核心的数量比较。 然而,可能由GPU大大增加吞吐量是有代价的。首先,内存访问变得更容易为您的计算瓶颈。计算之前,必须从CPU发送数据到GPU,然后从它事后检索。由于GPU通过PCI Express总线连接到主机CPU,内存访问是比传统的CPU慢。这意味着,您的整体计算加速被发生在你的算法的数据传输量限制。二,在C或Fortran编程的GPU需要一个不同的心智模式和技能设置可以困难和费时的收购。此外,你必须花时间微调您的代码为您的特定的GPU来优化您的应用程序的峰值性能。 本文演示功能?并行计算工具箱,使您能够运行您的MATLAB?代码在GPU上做了一些简单的改变,你的代码。我们通过这种方法解决了二阶波动方程,利用光谱法。 为什么并行化波方程求解呢? 波动方程在工程学科,包括地震学,流体动力学,声学和电磁,来形容声,光,和流体波的广泛使用。 使用光谱的方法来解决波动方程的算法是一个很好的候选人进行并行,因为它满足使用的GPU加速(见“将在GPU上的执行,加快我的申请?”)的标准:... 这是大规模并行。并行快速傅立叶变换(FFT)算法的目的是“分而治之”,以便执行类似的任务是多次在不同的数据。此外,该算法需要处理线程和充足的内存带宽之间的实质性沟通。快速傅立叶逆变换(IFFT)同样可以并行运行。 它是计算密集型的。该算法执行FFT和IFFTs。网格的大小(图2),包括在模拟的时间步数的确切数目取决于。每一个时间步需要在不同的矩阵的两个FFT和四个IFFTs,和一个单一的计算涉及数以十万计的时间步骤。 图2。上一个32 × 32的网格二阶波动方程(看动画)解决方案。 在GPU上执行加速我的应用? 一个GPU可以加速应用程序,如果符合下列条件: 大规模并行计算可以分解成独立的工作单位的数百或数千。 计算密集型计算上花费的时间显著超过上所花费的时间和GPU内存传输数据之和。 不符合这些标准的应用,实际上可能在GPU上运行的速度比在CPU上慢。 GPU计算在MATLAB 继续波动方程的例子之前,让我们快速回顾一下如何使用MATLAB GPU的工作。 FFT,IFFT和线性代数运算,包括100多个内置在MATLAB提供一个输入参数的类型GPUArray,并行计算工具箱提供一个特殊的数组类型,可直接在GPU上执行的功能。这些GPU功能的功能,换句话说,他们操作不同的参数的数据类型传递给它们的重载。 例如,下面的代码使用FFT算法找到一个CPU上的伪随机数向量的离散傅立叶变换: A = rand(2^16,1); (rand:均匀分布的随机数和数组) B = fft (A); (fft2:二维快速傅里叶变换 ) 为了在GPU上执行相同的操作,我们第一次使用gpuArray的命令从MATLAB工作空间中的数据转移到设备内存。然后我们就可以运行FFT,这是对这些数据的重载函数之一: A = gpuArray(rand(2^16,1)); B = fft (A); 执行FFT运算GPU而不是CPU,因为它的输入(一GPUArray)在GPU上举行。 结果,B,是存储在GPU上。但是,它是在MATLAB工作空间中仍然可见。运行类(B),我们可以看到,它是一个GPUArray。 class(B) ans = parallel.gpu.GPUArray 我们可以继续操作使用GPU功能的功能设备上的B。例如,我们的结果可视化,plot命令自动工程GPUArrays: plot(B); (线性二维图像) 要返回的数据传回本地MATLAB工作区,可以使用收集命令,例如 C = gather(B); C是目前在MATLAB的两倍,并可以由MATLAB函数对双打。 在这个简单的例子,通过执行单一的FFT功能,保存的时间往往比载体从MATLAB工作区转移到设备存储器所花的时间少。这通常是真实的,但依赖于你的硬件和数组的大小。数据传输开销可以变得如此显著,它会降低应用程序的整体性能,特别是如果你的CPU和GPU之间反复交换数据执行相对较少的计算密集型操作。这是更有效地对数据执行几个操作,而这是在GPU上,仅在需要时将数据传回的CPU。 需要注意的是一样的CP

文档评论(0)

xznh + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档