主要内容

gpuDevice

查询或选择图形处理器设备

描述

一个GPUDevice对象表示计算机中的图形处理单元(GPU)。可以使用GPU运行MATLAB®支持的代码金宝appgpuArray变量或执行CUDA内核使用CUDAKernel对象。

你可以使用GPUDevice对象来检查图形处理器设备的属性、重置图形处理器设备或等待图形处理器完成计算。获得一个GPUDevice对象,使用gpuDevice函数。选择或取消选择图形处理器设备gpuDevice函数。如果您可以访问多个图形处理器,请使用gpuDevice函数来选择要在其上执行代码的特定GPU设备。

你不需要使用GPUDevice对象来在GPU上运行函数。有关如何使用启用gpu的函数的更多信息,请参见在GPU上运行MATLAB函数

创建

描述

gpuDevice显示当前选择的图形处理器设备的属性。如果当前没有选中的设备,gpuDevice选择缺省设备,不清除缺省设备。当你想检查你的GPU设备的属性时,请使用此语法。

例子

D = gpuDevice返回一个GPUDevice对象,表示当前选中的设备。如果当前没有选中的设备,gpuDevice选择默认设备并返回GPUDevice对象表示该设备,但不清除该设备。

例子

D = gpuDevice (indx选择索引指定的GPU设备indx.如果指定的GPU设备不支持,则会报错。金宝app此语法将重置指定的设备并清除其内存,即使该设备当前已经被选中(相当于重置功能)。所有工作空间变量表示gpuArrayCUDAKernel变量现在是无效的,必须从工作区中清除或重新定义。

例子

gpuDevice ([]),带有空参数(而不是没有参数),取消选择GPU设备并清除其内存gpuArrayCUDAKernel变量。此语法不会将GPU设备选择为当前设备。

输入参数

全部展开

GPU设备索引,取值范围为整数1gpuDeviceCount

例子:gpuDevice (1);

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

属性

全部展开

该属性是只读的。

图形处理器设备的名称,指定为字符数组。分配给设备的名称来源于GPU设备的型号。

该属性是只读的。

GPU设备索引,取值范围为整数1gpuDeviceCount.使用此索引选择一个特定的GPU设备。

该属性是只读的。

GPU设备的计算能力,指定为字符数组。要在MATLAB中使用所选的GPU设备,ComputeCapability必须满足要求的规格在各版本的金宝appGPU支持

该属性是只读的。

支持双精度操作的标金宝app志,指定为逻辑值01真正的

该属性是只读的。

GPU设备当前使用的驱动版本,指定为标量值。要在MATLAB中使用所选的GPU设备,DriverVersion必须满足要求的规格在各版本的金宝appGPU支持

该属性是只读的。

CUDA工具包版本所使用的MATLAB当前发布版,指定为标量值。

该属性是只读的。

CUDAKern金宝appel执行期间每个块支持的最大线程数,指定为标量值。

例子:1024

该属性是只读的。

在CUDAKer金宝appnel执行期间,线程块可以使用的最大支持的共享内存数量,指定为一个标量值。

例子:49152

该属性是只读的。

线程块的每个维度的最大尺寸,指定为一个向量。线程块的每个尺寸都不能超过这些尺寸。另外,产品的螺纹块尺寸不得超过MaxThreadsPerBlock

该属性是只读的。

线程块网格的最大大小,指定为矢量。

该属性是只读的。

同时执行的线程数,指定为标量值。

该属性是只读的。

设备上的总内存(以字节为单位),指定为标量值。

该属性是只读的。

数据可用的总内存(以字节为单位),指定为标量值。此属性仅对当前选择的设备可用。这个值可能与NVIDIA报告的值不同®系统管理接口由于内存缓存。

该属性是只读的。

设备上存在的流多处理器数量,以标量值指定。

该属性是只读的。

GPU的峰值时钟速率(以kHz为单位),指定为一个标量值。

该属性是只读的。

设备的计算模式,指定为以下值之一。

“默认” 该设备不受限制,多个应用程序可以同时使用。MATLAB可以与其他应用程序共享设备,包括其他MATLAB会话或工作程序。
“独家线程”“独家过程” 一次只能有一个应用程序使用该设备。虽然设备是在MATLAB中选择的,但其他应用程序不能使用它,包括其他MATLAB会话或工作程序。
“禁止” 设备无法使用。

该属性是只读的。

支持重叠传输的标志金宝app,指定为逻辑值01

该属性是只读的。

指定为逻辑值的长时间运行内核的超时标志01.如果1,操作系统在允许CUDA内核执行的时间上设置一个上限。在此之后,CUDA驱动程序超时内核并返回一个错误。

该属性是只读的。

支持映射主机内存到金宝appCUDA地址空间的标志,指定为逻辑值01

该属性是只读的。

支持的设备的标志,金宝app由逻辑值指定01.并不是所有的设备都支持;金宝app例如,设备不足ComputeCapability

该属性是只读的。

可用设备的标志,由逻辑值指定01.此属性指示设备是否可用于当前MATLAB会话。不支金宝app持带有Device金宝appSupported的属性0总是不可用。一个设备也可能不可用,如果它ComputeMode属性设置为“独家线程”“独家过程”,或“禁止”

该属性是只读的。

当前所选设备的标志,由逻辑值指定01

对象的功能

您可以通过以下功能识别、选择、重置或等待图形处理器设备:

gpuDeviceCount GPU设备个数
重置 复位GPU设备并清除其内存
等待(GPUDevice) 等待GPU计算完成

以下功能也可用:

parallel.gpu.GPUDevice.isAvailable (indx) 返回逻辑1真正的如果GPU被索引指定indx支持并金宝app能够被选中。indx可以是整数或整数向量;默认的索引是当前设备。
parallel.gpu.GPUDevice.getDevice (indx) 返回一个GPUDevice对象,而不选择它。

对于完整的函数列表,请使用方法功能上的GPUDevice对象:

方法(“parallel.gpu.GPUDevice”)

你可以用下面的命令获得任何对象函数的帮助:

帮助parallel.gpu.GPUDevice。functionname

在哪里functionname是函数的名称。例如,获得帮助isAvailable类型:

帮助parallel.gpu.GPUDevice.isAvailable

例子

全部折叠

这个例子展示了如何使用gpuDevice来识别并选择要使用的设备。

要确定计算机中有多少GPU设备可用,请使用gpuDeviceCount函数。

gpuDeviceCount (“可用”
ans = 2

当有多个设备时,第一个是缺省值。属性检查其属性gpuDeviceTable函数来确定是否要使用该函数。

gpuDeviceTable
ans =2×5表索引名称ComputeCapability DeviceAvailable DeviceSelected  _____ _____________ _________________ _______________ ______________ 1“泰坦RTX”“7.5”真的真的2”住宅区K620”“5.0”真的假的

如果第一个设备是您想要使用的设备,您可以继续。要在GPU上运行计算,请使用gpuArray启用的功能。有关更多信息,请参见在GPU上运行MATLAB函数

要使用其他设备,请拨打电话gpuDevice与另一个设备的索引。

gpuDevice (2)
ans = CUDADevice with properties: Name: 'Quadro K620' Index: 2 ComputeCapability: '5.0' 金宝appSupportsDouble: 1 DriverVersion: 11 ToolkitVersion: 10.2000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475e+09 65535 65535] SIMDWidth: 32 TotalMemory: 2.1475e+09 AvailableMemory:1.6776e+09 MultiprocessorCount: 3 ClockRateKHz: 1124000 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory: 1 Device金宝appSupported: 1 DeviceAvailable: 1 DeviceSelected: 1

创建代表默认GPU设备的对象。

D = gpuDevice;

查询所有可用的GPU设备的计算能力。

ii = 1:gpuDeviceCount D = gpuDevice(ii);流(1,“设备%i具有ComputeCapability %s \n”...D.Index D.ComputeCapability)结束
设备1的ComputeCapability为7.5。设备2的ComputeCapability为6.1

如果你可以访问多个gpu,你可以使用一个并行池在多个gpu上并行执行计算。

要确定在MATLAB中可用的图形处理器的数量,请使用gpuDeviceCount函数。

availableGPUs = gpuDeviceCount (“可用”
availableGPUs = 3

启动一个并行池,使用尽可能多的可用gpu。为了获得最佳的性能,MATLAB默认为每个worker分配一个不同的GPU。

parpool (“本地”, availableGPUs);
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数量:3)。

要确定每个worker正在使用哪个GPU,调用gpuDevice在一个spmd块。的spmd块运行gpuDevice在每一个工人。

spmdgpuDevice结束

使用并行语言特性,例如parforparfeval,将您的计算分配给并行池中的工作线程。如果你使用gpuArray这些函数在worker的GPU上运行。有关更多信息,请参见在GPU上运行MATLAB函数.有关示例,请参见在多个gpu上运行MATLAB函数

完成计算后,关闭并行池。你可以使用gcp函数获取当前并行池。

删除(gcp (“nocreate”));

如果你想使用不同的gpu选择,那么你可以使用gpuDevice使用GPU设备索引在每个worker上选择一个特定的GPU。获取系统中各GPU设备的索引gpuDeviceCount函数。

假设您的系统中有三个可用的gpu,但您希望仅使用两个进行计算。获取设备索引。

[availableGPUs, gpuIndx] = gpuDeviceCount (“可用”
availableGPUs = 3
gpuIndx =1×31 2 3

定义你想要使用的设备的索引。

useGPUs = [1 3];

启动并行池。使用一个spmd块和gpuDevice使用设备索引将每个worker与你想要使用的一个gpu关联起来。的labindex函数标识每个工人的索引。

parpool (“本地”元素个数(useGPUs));
使用“本地”配置文件启动并行池(parpool)…连接到并行池(worker的数量:2)。
spmdgpuDevice (useGPUs (labindex));结束

作为一种最佳实践,为了获得最佳性能,为每个worker分配一个不同的GPU。

完成计算后,关闭并行池。

删除(gcp (“nocreate”));
介绍了R2010b