matlab - 对于大型阵列,GPU在Matlab中的gpuArray矩阵上崩溃

标签 matlab crash gpu nvidia matrix-multiplication

我正在尝试在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/

相关文章:

c++ - 如何在 x86 程序中以编程方式获取 Nvidia 驱动程序版本?

c - Matlab内部错误Mex文件

webview - WebView应用崩溃

android - 如果 Activity 崩溃,如何清除通知?

cuda - 每个 block 的最大线程数

c++ - 识别崩溃的图形驱动程序

Matlab:蒙版/创建一个知道其原点具有一定半径的圆形 roi

r - 如何创建 3D - MATLAB 风格 - R 中的曲面图

c++ - 获得 Matlab <-> C++ 接口(interface)的最佳方法

iPhone 在 CoreData 保存时崩溃