我试图在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
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的矩阵相乘。它崩溃的原因。
答案 0 :(得分:0)
这不是一个正确的答案,但堆栈溢出不会让我问一个问题,直到我有更高的声誉。
我很惊讶没有看到gpuDevice
输出中列出的属性'AvailableMemory'。键入
gpu = gpuDevice;
gpu.FreeMemory
gpu.AvailableMemory
这些移动芯片有时表现得很奇怪,并且他们不报告分配失败并不罕见。这是因为他们与计算内核共享视频内存的方式。所以要回答你的问题,这几乎可以肯定是因为你的芯片没有500MB左右的时间来进行计算。
答案 1 :(得分:0)
我有同样的问题,我有相同的GPU。
gpu = gpuDevice;
gpu.FreeMemory
gpu.AvailableMemory
使用这些命令,我们遇到了同样的问题。有必要重新启动matlab。
我发现的解决方案包括使用较小的矩阵:权衡计算与内存