This example shows how to find out the number of CUDA devices in your machine, how to choose which device MATLAB® uses, and how to query the properties of the currently selected device.
%#ok<*NOPTS>: disable code analyzer printing warning
The function gpuDeviceCount
returns the number of CUDA devices in your machine:
numDevices = gpuDeviceCount origDevice = gpuDevice
numDevices = 2 origDevice = CUDADevice with properties: Name: 'Tesla K20c' Index: 1 ComputeCapability: '3.5' SupportsDouble: 1 DriverVersion: 6 ToolkitVersion: 5.5000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475e+09 65535 65535] SIMDWidth: 32 TotalMemory: 5.0330e+09 AvailableMemory: 4.9185e+09 MultiprocessorCount: 13 ClockRateKHz: 705500 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 0 CanMapHostMemory: 1 DeviceSupported: 1 DeviceSelected: 1
Use the gpuDevice
function with no inputs to return an object that represent the current device. Use the gpuDevice
function with a single integer input to select a device with that device index. Note that device indices are one-based, which is different from the CUDA API. gpuDevice
always returns an object representing the selected device. Not all devices are supported, in which case the DeviceSupported property is false
, and the memory properties are not available.
%Ignore warnings about unsupported devices warnState = warning( 'off', 'parallel:gpu:device:DeviceCapability' ); for idx = 1:numDevices device = gpuDevice( idx ) end
device = CUDADevice with properties: Name: 'Tesla K20c' Index: 1 ComputeCapability: '3.5' SupportsDouble: 1 DriverVersion: 6 ToolkitVersion: 5.5000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475e+09 65535 65535] SIMDWidth: 32 TotalMemory: 5.0330e+09 AvailableMemory: 4.9185e+09 MultiprocessorCount: 13 ClockRateKHz: 705500 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 0 CanMapHostMemory: 1 DeviceSupported: 1 DeviceSelected: 1 device = CUDADevice with properties: Name: 'Quadro 600' Index: 2 ComputeCapability: '2.1' SupportsDouble: 1 DriverVersion: 6 ToolkitVersion: 5.5000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [65535 65535 65535] SIMDWidth: 32 TotalMemory: 1.0737e+09 AvailableMemory: 771207168 MultiprocessorCount: 2 ClockRateKHz: 1280000 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory: 1 DeviceSupported: 1 DeviceSelected: 1
We use the original properties to revert to the original device.
gpuDevice( origDevice.Index );
revert warning state
warning( warnState );