Я пытаюсь сделать простое матричное умножение с помощью gpuArray в matlab. Я использую GPU NVIDIA GForce 960M с выделенной памятью 4 ГБ. Код приведен ниже.Сбой GPU на матрице gpuArray в Matlab для большого массива
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.
Выход ГПУ выглядит следующим образом:
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
Для меня ГПУ должно быть достаточно для перемножения двух матриц размером 4000x4000. почему он рушится.
и с меньшими значениями 'N' он не падает? – mpaskov
Да, он работает для более низкого числа N. Я тестировал до N = 3500, и он отлично работает –