主要内容

在多个GPU上运行MATLAB函数

此示例演示如何在多个GPU上并行运行MATLAB代码,首先在本地计算机上运行,然后扩展到集群。作为示例问题,此示例使用logistic映射,这是一个模拟人口增长的方程。

MATLAB中越来越多的功能提供自动并行支持,包括多gpu支持,无需任何额外编码。有关详细信息,请参阅金宝app使用自动并行支持运行MATLAB功能金宝app.例如,列车网络功能提供了用于培训神经网络和推理的多GPU支持。金宝app有关更多信息,请参阅在云中并行扩展深度学习(深度学习工具箱).

使用单个GPU

在单个GPU上运行计算,使用gpuArray对象作为支持GPU的MATLAB函数的输入。要了解有关支持GPU的函数的更多信息,请参阅在GPU上运行MATLAB函数.

为增长率创建gpuarray,R,以及人口,x.有关创建GPUARRAYS的更多信息,请参阅在GPU上建立阵列.

n = 1000;r = gpuarray.linspace(0,4,n);x = rand(1,n,'gpuarray');

使用简单的算法迭代逻辑图。由于该算法在GPU上使用启用GPU的运算符,因此计算在GPU上运行。

数量=1000;对于n = 1:numiterations x = r。* x。*(1-x);终止

计算完成后,绘制人口增长率图。

图(r,x,'.');

如果需要更高的性能,gpuArrays支持多个选项。有关列表,请参阅金宝appgpuArray功能页面。例如,该示例中的算法仅对GPUARRASE执行元素 - 明智的操作,因此您可以使用arrayfun功能将它们预计为GPU。

将多个GPU与帕弗

您可以使用帕弗要分发的循环对于-并行工作者之间的循环迭代。如果您的计算使用支持GPU的函数,那么计算将在工作程序的GPU上运行。例如,如果使用蒙特卡罗方法随机模拟总体的演化,则使用多个GPU并行计算模拟帕弗

创建具有尽可能多的可用GPU的并行池。要确定可用GPU的数量,请使用gpudeviceCount.功能。默认情况下,Matlab为每个工人分配不同的GPU以获得最佳性能。有关在并行池中选择GPU的详细信息,请参阅在并行池中使用多个GPU.

numgpus = gpudevicecount(“可用”);parpool(numgpus);
正在使用“本地”配置文件启动并行池(parpool)…连接到2个工作进程。

定义模拟的数量,并在GPU中创建一个数组来存储每个模拟的总体向量。

数值模拟=100;X=零(数值模拟,N,'gpuarray');

使用帕弗循环将模拟分发给池中的工人。循环中的代码为初始群体创建了一个随机的GPUARRAY,并迭代Logistic地图。因为代码使用支持GPU的运算符在GPUARRASE上,所以计算自动在工作者的GPU上运行。

帕弗i = 1:numsimulation x(i,:) = rand(1,n,'gpuarray');对于n=1:numIterations X(i,:)=r.*X(i,:).*(1-X(i,:);终止终止

计算完成后,绘制所有模拟的结果。每种颜色表示不同的模拟。

图绘图(r,x,'.');

如果您需要更好地控制您的计算,您可以使用更高级的并行功能parallel.pool.DataQueue在计算期间从工人发送数据。例如,看到使用parfor在参数扫描期间绘图.

如果要生成可重复的随机数集,则可以控制工作人员GPU上的随机数生成。有关更多信息,请参阅控制工人的随机数流.

使用异步使用多个GPU帕菲尔

您可以使用帕菲尔在并行池工作室中异步运行计算。如果您的计算使用启用GPU的函数,则计算在工作者的GPU上运行。例如,您异步地在多个GPU上运行Monte Carlo仿真。

要在工作人员完成计算后保留计算结果,请使用future对象。为每个模拟的结果预先分配未来对象的数组。

f(NUMSIMULATION)=并行.FEVALFUTURE;

计算帕菲尔,必须将它们放置在函数中。例如MyFCN包含单个模拟的代码。

类型MyFCN
函数x=myParallelFcn(r)N=1000;x=gpuArray.rand(1,N);numIterations=1000;对于N=1:numIterations x=r*x*(1-x);end-end

使用对于循环通过模拟循环,并使用帕菲尔在并行池中的工作进程上异步运行它们。MyFCN在gpuarray上使用启用GPU的函数,因此它们在辅助程序的GPU上运行。因为帕菲尔异步执行计算,它不会阻塞MATLAB,您可以在计算过程中继续工作。

对于i = 1:numsimulations f(i)= parfeval(@ myparallelfcn,1,r);终止

收集结果帕菲尔当他们准备好了,你可以使用获取输出或者下一个在未来的物体上。此外,您可以使用after或者毕竟在准备就绪时会自动调用结果上的功能。例如,在完成后立即绘制每个模拟的结果after关于未来的物体。每种颜色表示不同的模拟。

图持有sulteAp(f,@(x)plot(r,x,'.'),0);

在群集中使用多个GPU

如果您可以访问具有多个GPU的集群,那么您可以扩大计算规模。使用帕尔普函数在群集中启动并行池。当你这样做时,并行功能,如帕弗循环或帕菲尔,在集群工作者上运行。如果您的计算使用启用GPU的函数在GPUARRASE上,那么这些函数在群集工作者的GPU上运行。要了解有关群集上运行并行功能的更多信息,请参阅从桌面缩放到群集.

另见

||||||

相关实例

更多关于

外部网站