主要内容

gpuDevice

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

描述

一个GPUDevice对象表示计算机中的图形处理器(GPU)。你可以使用GPU来运行MATLAB®支持的代码万博1manbetxgpuArray变量或执行CUDA内核使用CUDAKernel对象。

你可以使用GPUDevice对象来检查你的GPU设备的属性,重置GPU设备,或等待你的GPU完成计算的执行。要取得GPUDevice对象,则使用gpuDevice函数。控件还可以选择或取消选择GPU设备gpuDevice函数。如果可以访问多个gpu,请使用gpuDevice函数选择一个特定的GPU设备来执行你的代码。

您不需要使用GPUDevice对象在GPU上运行函数。有关如何使用支持gpu的函数的更多信息,请参见在图形处理器上运行MATLAB函数

创建

描述

gpuDevice显示当前选择的GPU设备的属性。如果当前没有选择的设备,gpuDevice选择默认设备,但不清除。当您想要检查GPU设备的属性时,请使用此语法。

例子

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

例子

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

例子

gpuDevice ([]),带空参数(相对于无参数),取消选择GPU设备并清空其内存gpuArray而且CUDAKernel变量。这种语法不会将GPU设备选择为当前设备。

输入参数

全部展开

GPU设备的索引,用范围内的整数指定1gpuDeviceCount

例子:gpuDevice (1);

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

属性

全部展开

此属性是只读的。

GPU设备的名称,指定为字符数组。分配给设备的名称来源于GPU设备模型。

此属性是只读的。

GPU设备的索引,用范围内的整数指定1gpuDeviceCount.使用该索引选择特定的GPU设备。

此属性是只读的。

GPU设备的计算能力,指定为字符数组。要在MATLAB中使用选定的GPU设备,ComputeCapability必须满足要求的规格GPU计算要求

此属性是只读的。

标志,用于支持双精万博1manbetx度操作,指定为逻辑值01真正的

此属性是只读的。

当前使用的GPU设备驱动程序版本,指定为一个标量值。要在MATLAB中使用选定的GPU设备,DriverVersion必须满足要求的规格GPU计算要求

此属性是只读的。

CUDA工具包版本采用MATLAB当前版本,指定为标量值。

此属性是只读的。

CUDAKern万博1manbetxel执行期间每个块支持的最大线程数,指定为一个标量值。

例子:1024

此属性是只读的。

一个线程块在CU万博1manbetxDAKernel执行期间可以使用的最大支持共享内存量,指定为一个标量值。

例子:49152

此属性是只读的。

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

此属性是只读的。

线程块网格的最大大小,指定为一个向量。

此属性是只读的。

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

此属性是只读的。

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

此属性是只读的。

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

此属性是只读的。

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

此属性是只读的。

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

此属性是只读的。

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

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

此属性是只读的。

标志,用于支持重叠万博1manbetx传输,指定为逻辑值01

此属性是只读的。

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

此属性是只读的。

标志,支持将主机内万博1manbetx存映射到CUDA地址空间,指定为逻辑值01

此属性是只读的。

由逻辑值指定的支持万博1manbetx设备的标志01.并非所有设备都受支持;万博1manbetx例如,设备配备不足ComputeCapability

此属性是只读的。

可用设备的标志,由逻辑值指定01.此属性指示设备是否可在当前MATLAB会话中使用。不支万博1manbetx持的设备Device万博1manbetxSupported的属性0总是不可用的。设备也可能不可用,如果它ComputeMode属性设置为“独家线程”“独家过程”,或“禁止”

此属性是只读的。

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

对象的功能

您可以通过以下功能识别、选择、复位、等待GPU设备:

gpuDeviceCount GPU设备数量
重置 重置GPU设备并清空其内存
等待(GPUDevice) 等待GPU计算完成

以下功能也可使用:

parallel.gpu.GPUDevice.isAvailable (indx) 返回逻辑1真正的如果索引指定的GPUindx支持并万博1manbetx能够被选择。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”NVIDIA RTX A5000”“8.6”真的真的2”住宅区P620”“6.1”真的假的

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

要使用其他设备,请调用gpuDevice使用另一个设备的索引。

gpuDevice (2)
ans = CUDADevice与属性:名称:'Quadro P620'索引:2 ComputeCapability: '6.1' SupportsDouble: 1 Driv万博1manbetxerVersion: 11.6000 ToolkitVersion: 11.2000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 (49.15 KB) MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475e+09 65535 65535] SIMDWidth: 32 TotalMemory: 2147287040 (2.15 GB) AvailableMemory: 1617716430 (1.62 GB) MultiprocessorCount: 4 ClockRateKHz: 1354000 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout:1 CanMapHostMemory: 1 Device万博1manbetxSupported: 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中使用的gpu的数量,请使用gpuDeviceCount函数。

availableGPUs = gpuDeviceCount(“可用”
availableGPUs = 3

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

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

要识别每个工作人员使用的GPU,请调用gpuDevice在一个spmd块。的spmd块运行gpuDevice对每一个工人。

spmdgpuDevice结束

使用并行语言特性,例如parforparfeval,将计算分配给并行池中的工作人员。如果你使用gpuArray在你的计算中启用函数,这些函数在worker的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使用设备索引将每个工作人员与你想使用的一个gpu关联起来。的spmdIndex函数标识每个worker的索引。

parpool (“过程”元素个数(useGPUs));
使用“Processes”配置文件启动并行池(parpool)…连接到并行池(工人数量:2)。
spmdgpuDevice (useGPUs (spmdIndex));结束

作为最佳实践和最佳性能,为每个worker分配不同的GPU。

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

删除(gcp (“nocreate”));

版本历史

在R2010b中引入