matlabでgpuArrayを使って単純な行列乗算をしようとしています。私は4GBの専用メモリを搭載したNVIDIA GForce 960M GPUを使用しています。コードは以下の通りです。MatlabのgpuArray行列で大きな配列のGPUがクラッシュする
function gpuExample(A, B)
tic
C = A*B; % matrix product on Client
tC = toc;
% copy A and B from Client to GPU
a = gpuArray(A); b = gpuArray(B);
tic
c = a*b; % matrix product on GPU
tgpu = toc;
tic
CC = gather(c); % copy data from GPU to Client
tg = toc;
disp(['Matrix multiply time on Client is ' num2str(tC)])
disp(['Matrix multiply time on GPU is ' num2str(tgpu)])
disp(['Time for gathering data from GPU back to Client is '
num2str(tg)])
% Verify that GPU and Client computations agree
tol = 1e-5;
if any(abs(CC-C) > tol)
disp('Matrix product on Client and GPU disagree')
else
disp('Matrix product on Client and GPU agree')
end
end %
N=4000;
A=rand(N);
B=rand(N);
gpuExample(A,B)
コードが小さい行列のために良い作品が、私は両方の行列のための行列寸法4000X4000にしようとすると、GPUがクラッシュしたので、Matlabの実行を行います。次のように
GPU出力である:
gpuDevice
ANS =性質を有する
CUDADevice:
Name: 'GeForce GTX 960M'
Index: 1
ComputeCapability: '5.0'
SupportsDouble: 1
DriverVersion: 7.5000
ToolkitVersion: 7.5000
MaxThreadsPerBlock: 1024
MaxShmemPerBlock: 49152
MaxThreadBlockSize: [1024 1024 64]
MaxGridSize: [2.1475e+09 65535 65535]
SIMDWidth: 32
TotalMemory: 4.2950e+09
MultiprocessorCount: 5
ClockRateKHz: 1176000
ComputeMode: 'Default'
GPUOverlapsTransfers: 1
KernelExecutionTimeout: 1
CanMapHostMemory: 1
DeviceSupported: 1
DeviceSelected: 1
警告:ここではクラッシュレポートで予期しないエラーがCUDAの実行中に発生しました。 CUDAのエラーだった: CUDA_ERROR_LAUNCH_FAILED
私には、GPUは、サイズ4000X4000の2つのマトリックスを乗算するのに十分な良いことがあります。なぜそれがクラッシュしているのですか?
「N」の値が小さいほどクラッシュしませんか? – mpaskov
はい、それはNの低い数のために働いています。私はN = 3500までテストし、それは正常に動作します –