我正在尝试在matlab中使用gpuArray做一个简单的矩阵乘法。我正在使用具有4GB专用内存的NVIDIA GForce 960M 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
回答=
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
这是当机报告:
Warning: An unexpected error occurred during CUDA execution. The CUDA error was: CUDA_ERROR_LAUNCH_FAILED
对我来说,GPU应该足以将两个大小为4000X4000的矩阵相乘。为什么它崩溃了。
最佳答案
这不是一个正确的答案,但是在我享有较高声誉之前,堆栈溢出不会让我问一个问题。
我很惊讶没有在gpuDevice
的输出中看到属性“AvailableMemory”。键入时会发生什么
gpu = gpuDevice;
gpu.FreeMemory
gpu.AvailableMemory
这些移动芯片有时表现得很奇怪,不报告分配失败的情况并不少见。这是因为它们与计算内核共享视频内存的方式。因此,回答您的问题,这几乎可以肯定是因为您的芯片没有进行计算所需的500MB左右。
关于matlab - 对于大型阵列,GPU在Matlab中的gpuArray矩阵上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40296426/