主要内容

gpuDevice

查询或选择GPU设备

描述

A.GPUDevice对象表示计算机中的图形处理单元(GPU)。您可以使用GPU执行CUDA内核或MATLAB代码。

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

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

创造

描述

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

实例

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

实例

D=gpuDevice(IDX)选择由索引指定的GPU设备IDX. 如果不支持指定的GPU设备,则会发生错误。此语法重置指定的设备并清除其万博1manbetx内存,即使当前已选择该设备(相当于重置功能)。所有工作空间变量表示gpuArray库达克内尔变量现在无效,必须从工作区中清除或重新定义。

实例

gpuDevice([]),使用空参数(与无参数相反),取消选择GPU设备并清除其内存gpuArray库达克内尔变量。此语法不会将任何GPU设备选作当前设备。

输入参数

全部展开

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

例子:gpuDevice(1);

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64

性质

全部展开

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

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

GPU设备的计算能力,指定为字符数组。在MATLAB中使用选定的GPU设备®,计算能力必须符合中的要求规范GPU版万博1manbetx本支持.

万博1manbetx支持双精度运算,指定为逻辑值0对于错误的1.对于符合事实的.

当前正在使用的GPU设备驱动程序版本,指定为标量值。要在MATLAB中使用选定的GPU设备,驾驶室必须符合中的要求规范GPU版万博1manbetx本支持.

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

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

例子:1024

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

例子:49152

螺纹块的每个尺寸中的最大尺寸,以矢量形式指定。螺纹块的每个尺寸不得超过这些尺寸。此外,螺纹块尺寸的乘积不得超过MaxThreadsPerBlock.

螺纹块网格的最大大小,指定为向量。

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

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

数据可用的总内存(字节),指定为标量值。此属性仅适用于当前选定的设备。这个值可以与英伟达报告的数值不同。®内存缓存导致的系统管理接口。

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

GPU的峰值时钟频率,单位为kHz,指定为标量值。

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

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

万博1manbetx支持重叠传输,指定为逻辑值01..

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

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

万博1manbetx支持的设备,由逻辑值指定01.。并非所有设备都受支持;例如,设备容量不足万博1manbetx计算能力.

当前选定的设备,由逻辑值指定01..

目标函数

您可以使用以下功能识别、选择、重置或等待GPU设备:

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

还提供以下功能:

parallel.gpu.GPUDevice.isAvailable(idx) 如果索引指定的GPUidx支持并万博1manbetx能够被选择。idx可以是整数或整数向量;默认索引是当前设备。
parallel.gpu.GPUDevice.getDevice(idx) 返回一个GPUDevice对象而不选择它。

有关函数的完整列表,请使用方法作用于GPUDevice对象:

方法('parallel.gpu.GPUDevice')

您可以使用以下命令获取任何对象函数的帮助:

帮助parallel.gpu.GPUDevice。函数名

哪里函数名函数的名称。例如,获取有关可用,类型:

help parallel.gpu.GPUDevice.isAvailable

例子

全部崩溃

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

gpuDeviceCount
2.

当有多个设备时,第一个设备是默认设备gpuDevice函数来确定是否要使用该函数。

d=gpuDevice
d=CUDADevice with properties:Name:'GeForce GTX 1080'索引:1计算能力:'6.1'支持双:1驱动服务器版本:10工具套件版本:10 万博1manbetxMaxThreadsPerBlock:1024 MaxShmemPerBlock:49152 MaxThreadBlockSize:[1024 1024 64]MaxGridSize:[2.1475e+09 65535 65535]SIMDWidth:32总内存:8.5899e+09可用内存:7.0053e+09多处理器计数:20时钟频率kHz:1733500计算模式:“默认”GPUOverlapsTransfers:1内核执行时间:1 CanMapHostMemory:1设备支持:1设备选择:1

如果D是您要使用的设备,您可以继续。要在GPU上运行计算,请使用gpuArray启用的功能。有关详细信息,请参阅在GPU上运行MATLAB函数.

要使用其他设备,请拨打gpuDevice使用其他设备的索引。

GPU设备(2)

创建一个表示默认GPU设备的对象。

g=GPU设备;

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

对于ii=1:gpuDeviceCount g=gpuDevice(ii);fprintf(1,'设备%i具有计算能力%s\n',...g、 索引,g.计算能力)终止
设备1具有计算能力3.5设备2具有计算能力2.0

如果您可以访问多个GPU,则可以使用并行池在多个GPU上并行执行计算。

启动一个与GPU数量相同的并行池。要确定可用GPU的数量,请使用gpuDeviceCount默认情况下,MATLAB为每个工人分配不同的GPU以获得最佳性能。

帕尔普(“本地”,gpuDeviceCount);

要确定每个工作人员正在使用哪个GPU,请调用gpuDevicespmd块这个spmd分段运行gpuDevice对每一个工人。

spmdgpuDevice终止

使用并行语言功能,例如帕弗帕菲尔,将计算分发给并行池中的工作人员。如果使用gpuArray在您的计算中启用函数,这些函数在工作程序的GPU上运行。有关更多信息,请参阅在GPU上运行MATLAB函数. 有关示例,请参见在多个GPU上运行MATLAB函数.

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

删除(gcp)(“不创造”));

如果您想使用不同的GPU选择,那么可以使用gpuDevice在每个辅助进程上选择一个特定的GPU。例如,定义一个数组Gpundices,它包含要在每个辅助进程上激活的GPU的索引。然后,启动一个并行池,其中包含要选择的GPU数量,并使用spmd阻止运行gpuDevice在每个工人身上labindex函数标识每个辅助进程。使用此函数将辅助进程与GPU索引关联。

gpuIndices=[13];parpool(numel(gpuIndices));spmdgpuDevice(gpuIndices(labindex));终止

作为最佳实践,为了获得最佳性能,请为每个工作人员分配不同的GPU。

R2010b中引入