主要内容

运行在多个gpu MATLAB函数

这个例子展示了如何运行MATLAB代码在多个并行gpu,首先在本地机器上,然后扩大到一个集群。作为一个示例问题,使用逻辑映射的例子中,一个方程,人口的增长模型。

越来越多的功能在MATLAB提供自动并行的支持,包括multi-gpu支持,不需要任何额外的编码。金宝app有关详细信息,请参见MATLAB函数自动并行支持运行金宝app。例如,trainNetwork函数提供了multi-gpu支持训练神经网络和推理。金宝app有关更多信息,请参见并行扩展深度学习和云(深度学习工具箱)

使用一个GPU

运行一个GPU计算,使用gpuArray对象作为输入GPU-enabled MATLAB函数。更多地了解GPU-enabled功能,看看运行在GPU MATLAB函数

创建gpuArrays增长率,r人口,x。创建gpuArrays更多信息,请参阅建立数组GPU

N = 1000;r = gpuArray.linspace (0 4 N);兰德(x = 1, N,“gpuArray”);

使用一个简单的算法迭代逻辑映射。因为该算法使用GPU-enabled gpuArrays运营商,计算在GPU上运行。

numIterations = 1000;n = 1: numIterations x = r。* . * (1 - x);结束

计算完成后,对人口的增长速度。

情节(r, x,“。”);

如果你需要更多的性能,gpuArrays支持几个选项。金宝app列表,请参阅gpuArray功能页面。例如,该算法在这个示例中只执行对gpuArrays element-wise操作,所以您可以使用arrayfun函数为GPU预编译它们。

使用多个gpu与parfor

您可以使用parfor循环分配循环迭代并行的工作之一。如果你的计算使用GPU-enabled函数,那么计算运行在GPU上的工人。例如,如果您使用蒙特卡罗方法随机模拟种群的进化,模拟计算与多个gpu并行使用parfor循环。

创建一个平行的池和尽可能多的工人gpu可用。确定可用gpu的数量,使用gpuDeviceCount函数。默认情况下,MATLAB分配一个不同的GPU每个工人的最佳性能。在选择gpu并行池的更多信息,参见使用多个gpu并行的池中

parpool (gpuDeviceCount);
开始平行池(parpool)使用“本地”概要文件…连接到两个工人。

定义的模拟,在GPU中创建一个数组来存储为每个模拟人口向量。

numSimulations = 100;X = 0 (numSimulations N,“gpuArray”);

使用一个parfor池中循环模拟分发给工人。循环内的代码创建一个随机gpuArray初始种群,并迭代逻辑图。因为代码使用GPU-enabled gpuArrays运营商,计算自动运行在GPU上的工人。

parfori = 1: numSimulations X(我:)=兰特(1,N,“gpuArray”);n = 1: numIterations X(我:)= r。* X(我:)。* (1 - X(我,:));结束结束

计算完成后,所有模拟的结果。每一种颜色代表一个不同的模拟。

图绘制(r, X,“。”);

如果你需要更好地控制你的计算,可以使用更先进的并行功能。例如,您可以使用一个parallel.pool.DataQueue发送的数据在计算工人。例如,看到的在参数扫描与parfor情节

如果你想生成一组重复的随机数,可以控制工人GPU的随机数生成。有关更多信息,请参见控制随机数流工人

使用多个异步gpuparfeval

您可以使用parfeval在并行运行异步计算池的工人。如果你的计算使用GPU-enabled函数,那么计算运行在GPU上的工人。作为一个例子,你跑蒙特卡罗模拟在多个异步gpu。

工人们完成后进行计算的结果,使用未来的对象。Preallocate未来对象的数组,每个仿真的结果。

f (numSimulations) = parallel.FevalFuture;

计算与运行parfeval,你必须把它们在一个函数。例如,myParallelFcn的代码包含一个模拟。

类型myParallelFcn
函数x = myParallelFcn (r) N = 1000;x = gpuArray.rand (1, N);numIterations = 1000;为n = 1: numIterations x = r。* . * (1 - x);结束结束

使用一个循环遍历模拟,和使用parfeval异步运行它们的工人并行池。myParallelFcn使用gpuArrays GPU-enabled功能,所以他们运行在GPU上的工人。因为parfeval执行异步计算,它不会阻止MATLAB,你可以继续工作,而计算发生。

i = 1: numSimulations f (i) = parfeval (@myParallelFcn 1 r);结束

收集的结果parfeval当他们准备好了,你可以使用fetchOutputsfetchNext对未来的对象。同时,您可以使用afterEach毕竟自动调用函数结果当他们准备好了。例如,阴谋的结果每个仿真完成后立即使用afterEach对未来的对象。每一种颜色代表一个不同的模拟。

图保存afterEach (f, @ (x)情节(r, x,“。”),0);

使用多个集群gpu

如果你访问一个与多个gpu集群,然后你可以扩大你的计算。使用parpool函数在集群上开始一个平行的池。当你这样做的时候,并行特性,比如parfor循环或parfeval在集群上运行工人。如果你计算使用gpuArrays GPU-enabled功能,那么这些功能运行在GPU集群的工人。更多地了解集群上运行的并行特性,明白了从桌面到集群规模

另请参阅

||||||

相关的例子

更多关于

外部网站