MATLAB Parallel Server: GPUによる並列処理

はじめに

https://media-hosei.atlassian.net/wiki/spaces/LAB/pages/2714959885 をご確認ください。ラボラトリのMATLAB Parallel Server(a9)には GPU (NVIDIA Tesla T4×1)が接続されており、ワーカーからGPUを利用できます。

MATLAB R2022aのみの提供です。クライアント側もR2022aをご利用ください。

ここではGPUによる並列処理のハンズオンを紹介します。

GPU確認

a9側のGPUは1つのためparpoolで起動する並列プールは「1」とする。

parpool(1) spmd gpuDevice %その他GPUに投入するコマンド end %Worker 1: % % ans = % % CUDADevice with properties: % % Name: 'Tesla T4' % Index: 1 % ComputeCapability: '7.5' % SupportsDouble: 1 % DriverVersion: 11.6000 % ToolkitVersion: 11.2000 % MaxThreadsPerBlock: 1024 % MaxShmemPerBlock: 49152 % MaxThreadBlockSize: [1024 1024 64] % MaxGridSize: [2.1475e+09 65535 65535] % SIMDWidth: 32 % TotalMemory: 1.5635e+10 % AvailableMemory: 1.2305e+10 % MultiprocessorCount: 40 % ClockRateKHz: 1590000 % ComputeMode: 'Default' % GPUOverlapsTransfers: 1 % KernelExecutionTimeout: 0 % CanMapHostMemory: 1 % DeviceSupported: 1 % DeviceAvailable: 1 % DeviceSelected: 1

ロジスティック写像のプロット

parpool(1) spmd numSimulations = 100; numIterations = 1000; N = 1000; r = gpuArray.linspace(0,4,N); X = zeros(numSimulations,N,"gpuArray"); tic; for i = 1:numSimulations X(i,:) = rand(1,N,"gpuArray"); for n=1:numIterations X(i,:) = r.*X(i,:).*(1-X(i,:)); end end toc; end rl = gather(r{1}); % これらはまだ GPU の不足について警告する可能性はありますが、データは取得します。 Xl = gather(X{1}); figure plot(rl,Xl,'.'); delete(gcp('nocreate'))