Eghbal
Eghbal

Reputation: 3783

Matlab GPU computing

I want a code that check the computer that my designed software (GUI) is working on it using a CUDA-Core graphic card (Nvidia) or not. So after getting 'true; value from it, my software activate some features for accelerating process.

Thanks.

Upvotes: 2

Views: 2754

Answers (1)

Dev-iL
Dev-iL

Reputation: 24159

You could use the function gpuDevice. For me I get the following output:

ans = 

CUDADevice with properties:

                  Name: 'GeForce GTX 660 Ti'
                 Index: 1
     ComputeCapability: '3.0'
        SupportsDouble: 1
         DriverVersion: 6
        ToolkitVersion: 5.5000
    MaxThreadsPerBlock: 1024
      MaxShmemPerBlock: 49152
    MaxThreadBlockSize: [1024 1024 64]
           MaxGridSize: [2.1475e+09 65535 65535]
             SIMDWidth: 32
           TotalMemory: 2.1475e+09
            FreeMemory: 1.7126e+09
   MultiprocessorCount: 7
          ClockRateKHz: 1019500
           ComputeMode: 'Default'
  GPUOverlapsTransfers: 1
KernelExecutionTimeout: 1
      CanMapHostMemory: 1
       DeviceSupported: 1
        DeviceSelected: 1

(Note: you can access the different properties by simple dot reference, e.g. ans.MultiprocessorCount will give 7.)

Also see the following pages:

  1. MATLAB Central article

  2. Help #1 - GPUDevice class

  3. Help #2 - Identify and Select a GPU Device

Edit

I just tested this on a computer that doesn't have the CUDA driver installed. What I get is the following exception (that is actually thrown by the current() method of the GPUDevice class):

...'
Error using gpuDevice (line 26)
There is a problem with the CUDA driver associated with this GPU device. See www.mathworks.com/gpudriver to find and install the latest
supported driver.

Caused by:
    The CUDA driver could not be loaded. The library name used was 'nvcuda.dll'. The error was:
    The specified module could not be found.

For this reason I suggest first surrounding gpuDevice with a try-catch block and only if it was successful, proceeding with checks like parallel.gpu.GPUDevice.isAvailable(1).

There are still cases not covered by my answer, such as setups with more than one GPU (such as an non-CUDA on-board one + add-on CUDA card) or systems without a CUDA GPU, but that have CUDA drivers installed. For multi-GPU cases you should also use the methods: parallel.gpu.GPUDevice.count and parallel.gpu.GPUDevice.select(idx).

Upvotes: 5

Related Questions