在多GPU上运行MATLAB功能

这个例子说明了如何在平行本地计算机上运行多个GPU的MATLAB代码,第一,然后扩展到集群。作为样品的问题,该示例使用逻辑映射,一个方程模型的群体的生长。

越来越多的在MATLAB特征提供自动平行的支撑,包括多GPU的支持,而不需要任何额外的编码。万博1manbetx有关详细信息,请参阅运行MATLAB与自动并行支持功能万博1manbetx。例如,trainNetwork功能提供了神经网络和推理的训练多GPU的支持。万博1manbetx欲了解更多信息,请参阅规模达深学习并行和云(深学习工具箱)。

使用单GPU

在单一GPU,使用运行计算gpuArray对象作为输入来启用GPU-MATLAB函数。要了解更多关于启用GPU-功能,请参阅在GPU上运行MATLAB功能

对于增长率创建gpuArrays,[R,人口,X。有关创建gpuArrays的更多信息,请参阅在GPU上建立阵列

N = 1000;R = gpuArray.linspace(0,4,N);X =兰特(1,N,'gpuArray');

使用一个简单的算法遍历物流地图。由于算法使用GPU使运营商在gpuArrays,在计算上的GPU上运行。

numIterations = 1000;对于N = 1:numIterations X = R * X *(1-X);结束

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

图(R,X,'');

如果您需要更多的性能,gpuArrays支持几个选项。万博1manbetx有关列表,请参阅gpuArray功能页面。例如,在这个例子中,算法只执行对gpuArrays元素的运算,所以你可以使用arrayfun功能预编译他们的GPU。

使用多GPUPARFOR

您可以使用PARFOR循环分布对于-loop平行工人迭代。如果你的计算使用GPU启用的功能,然后将计算在工人的GPU上运行。例如,如果使用蒙特卡洛方法随机模拟群体的进化中,模拟可使用计算与多GPU并联PARFOR环。

创建一个平行的泳池,尽可能多的工人提供的GPU。要确定GPU的可用数量,可使用gpuDeviceCount功能。默认情况下,MATLAB分配一个不同的GPU,以每个工人获得最佳性能。有关在并行池中选择GPU的更多信息,请参阅使用多个GPU在并行池

parpool(gpuDeviceCount);
开始使用“本地”的个人资料...连接到2名工人并行池(parpool)。

限定的模拟次数,并且在GPU建立一个数组来存储每个模拟人口矢量。

numSimulations = 100;X =零(numSimulations,N,'gpuArray');

用一个PARFOR循环来模拟分发到工人池。循环内的代码创建初始人口随机gpuArray,迭代和物流地图就可以了。是因为代码使用启用GPU运营商对gpuArrays时,自动计算上工人的GPU上运行。

PARFORI = 1:numSimulations X(I,:) =兰特(1,N,'gpuArray');对于n = 1时:numIterations X(I,:) = R * X(I,:)*(1-X(I,:));结束结束

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

图图(R,X,'');

如果你需要在你的计算更大的控制权,你可以使用更先进的并联功能。例如,你可以使用parallel.pool.DataQueue计算过程中发送从工人的数据。对于一个示例,请参见剧情在与PARFOR参数扫描

如果你想生成一个可重复的随机数集,你可以控制在工人GPU的随机数生成。欲了解更多信息,请参阅在工人控制随机数流

使用多GPU与异步parfeval

您可以使用parfeval在并行池工人异步运行计算。如果你的计算使用GPU启用的功能,然后将计算在工人的GPU上运行。举个例子,你运行多个GPU异步Monte Carlo模拟。

为了保持计算的结果后,工人们完成他们来说,未来的使用对象。预分配未来对象的数组的每个模拟的结果。

F(numSimulations)= parallel.FevalFuture;

要运行与计算parfeval,你必须将它们放置在函数内部。例如,myParallelFcn包含单个模拟的代码。

类型myParallelFcn
函数x = myParallelFcn(R)N = 1000;X = gpuArray.rand(1,N);numIterations = 1000;对于n = 1:numIterations X = R * X *(1-X);年底结束

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

对于I = 1:numSimulations F(1)= parfeval(@ myParallelFcn,1,R);结束

为了收集从结果parfeval当他们准备好了,你可以使用fetchOutputs要么fetchNext对未来的对象。此外,您还可以使用afterEach要么毕竟自动调用该函数的结果时,他们准备好了。例如,绘制每个模拟它完成后,立即使用效果afterEach对未来的对象。每种颜色代表不同的模拟。

身材保持afterEach(F,@(x)的曲线图(R,X,''),0);

使用多GPU的集群

如果你有多个GPU访问群集,则可以扩展您计算。使用parpool功能启动了集群上的并行池。当你这样做,并联功能,如PARFOR环或parfeval,运行在集群工人。如果您使用的计算上gpuArrays启用GPU的功能,那么这些功能的集群工人的GPU上运行。要了解更多有关在群集上运行的并行功能,请参阅从桌面扩展到集群

也可以看看

||||||

相关的例子

更多关于

外部网站