预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

多核机器和超线程技术,使科学家,工程师,金融分析师,以加快计算密集型应用在各种学科。今天,另一种类型的硬件承诺,甚至更高的计算性能:图形处理单元(GPU)。 原本用来加速图形渲染,GPU是越来越多地应用于科学计算。与传统的CPU,其中包括不超过少数核心,GPU的整数和浮点处理器的大规模并行阵列,以及专用的,高速的内存。一个典型的GPU包含数以百计的这些较小的处理器(图1)。 多内核(multiplecores) 图1一个CPU系统和GPU核心的数量比较。 然而,可能由GPU大大增加吞吐量是有代价的。首先,内存访问变得更容易为您的计算瓶颈。计算之前,必须从CPU发送数据到GPU,然后从它事后检索。由于GPU通过PCIExpress总线连接到主机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继续波动方程的例子之前,让我们快速回顾一下如何使用MATLABGPU的工作。 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。 需要注意的是一样的CPU,GPU的有限的记忆。然而,CPU的不同,他们没有交换内存和磁盘的能力。因此,你必须确认你要保持在GPU上的数据不超过