6.5. 设备管理

本节介绍低级别 CUDA 驱动程序应用程序编程接口的设备管理功能。

函数

CUresult cuDeviceGet ( CUdevice* device, int  ordinal )
返回计算设备的句柄。
CUresult cuDeviceGetAttribute ( int* pi, CUdevice_attribute attrib, CUdevice dev )
返回有关设备的信息。
CUresult cuDeviceGetCount ( int* count )
返回具有计算能力的设备的数量。
CUresult cuDeviceGetDefaultMemPool ( CUmemoryPool* pool_out, CUdevice dev )
返回设备的默认内存池。
CUresult cuDeviceGetExecAffinitySupport ( int* pi, CUexecAffinityType type, CUdevice dev )
返回有关设备的执行亲和性支持的信息。
CUresult cuDeviceGetLuid ( char* luid, unsigned int* deviceNodeMask, CUdevice dev )
返回设备的 LUID 和设备节点掩码。
CUresult cuDeviceGetMemPool ( CUmemoryPool* pool, CUdevice dev )
获取设备当前的内存池。
CUresult cuDeviceGetName ( char* name, int  len, CUdevice dev )
返回设备的标识符字符串。
CUresult cuDeviceGetNvSciSyncAttributes ( void* nvSciSyncAttrList, CUdevice dev, int  flags )
返回此设备可以支持的 NvSciSync 属性。
CUresult cuDeviceGetTexture1DLinearMaxWidth ( size_t* maxWidthInElements, CUarray_format format, unsigned numChannels, CUdevice dev )
返回给定纹理元素大小的 1D 线性纹理中可分配的最大元素数。
CUresult cuDeviceGetUuid ( CUuuid* uuid, CUdevice dev )
返回设备的 UUID。
CUresult cuDeviceGetUuid_v2 ( CUuuid* uuid, CUdevice dev )
返回设备的 UUID (11.4+)。
CUresult cuDeviceSetMemPool ( CUdevice dev, CUmemoryPool pool )
设置设备当前的内存池。
CUresult cuDeviceTotalMem ( size_t* bytes, CUdevice dev )
返回设备上的总内存量。
CUresult cuFlushGPUDirectRDMAWrites ( CUflushGPUDirectRDMAWritesTarget target, CUflushGPUDirectRDMAWritesScope scope )
阻塞直到远程写入对指定的范围可见。

函数

CUresult cuDeviceGet ( CUdevice* device, int  ordinal )
返回计算设备的句柄。
参数
device
- 返回的设备句柄
ordinal
- 要获取句柄的设备编号
描述

*device中返回设备句柄,给定范围为 [0, cuDeviceGetCount()-1] 的序号。

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetAttribute, cuDeviceGetCount, cuDeviceGetName, cuDeviceGetUuid, cuDeviceGetLuid, cuDeviceTotalMem, cuDeviceGetExecAffinitySupport

CUresult cuDeviceGetAttribute ( int* pi, CUdevice_attribute attrib, CUdevice dev )
返回有关设备的信息。
参数
pi
- 返回的设备属性值
attrib
- 要查询的设备属性
dev
- 设备句柄
描述

*pi设备上属性的整数值attrib在设备dev上。支持的属性有

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetCount, cuDeviceGetName, cuDeviceGetUuid, cuDeviceGet, cuDeviceTotalMem, cuDeviceGetExecAffinitySupport, cudaDeviceGetAttribute, cudaGetDeviceProperties

CUresult cuDeviceGetCount ( int* count )
返回支持计算的设备的数量。
参数
count
- 返回的支持计算的设备数量
描述

*count计算能力大于或等于 2.0 且可用于执行的设备数量。如果没有此类设备,cuDeviceGetCount() 返回 0。

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetAttribute, cuDeviceGetName, cuDeviceGetUuid, cuDeviceGetLuid, cuDeviceGet, cuDeviceTotalMem, cuDeviceGetExecAffinitySupport, cudaGetDeviceCount

CUresult cuDeviceGetDefaultMemPool ( CUmemoryPool* pool_out, CUdevice dev )
返回设备的默认内存池。
描述

设备的默认内存池包含来自该设备的设备内存。

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuMemAllocAsync, cuMemPoolTrimTo, cuMemPoolGetAttribute, cuMemPoolSetAttribute, cuMemPoolSetAccess, cuDeviceGetMemPool, cuMemPoolCreate

CUresult cuDeviceGetExecAffinitySupport ( int* pi, CUexecAffinityType type, CUdevice dev )
返回设备执行关联性支持的信息。
参数
pi
- 如果设备支持执行关联性类型,则为 1type否则为 0
type
- 要查询的执行关联性类型
dev
- 设备句柄
描述

*pi是否设备支持执行关联性类型typedev支持的类型是

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetAttribute, cuDeviceGetCount, cuDeviceGetName, cuDeviceGetUuid, cuDeviceGet, cuDeviceTotalMem

CUresult cuDeviceGetLuid ( char* luid, unsigned int* deviceNodeMask, CUdevice dev )
返回设备的 LUID 和设备节点掩码。
参数
luid
- 返回的 LUID
deviceNodeMask
- 返回的设备节点掩码
dev
- 获取标识符字符串的设备
描述

返回标识信息 (luiddeviceNodeMask) 以允许将设备与图形 API 匹配。

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetAttribute, cuDeviceGetCount, cuDeviceGetName, cuDeviceGet, cuDeviceTotalMem, cuDeviceGetExecAffinitySupport, cudaGetDeviceProperties

CUresult cuDeviceGetMemPool ( CUmemoryPool* pool, CUdevice dev )
获取设备的当前内存池。
描述

返回为此设备提供的最后一个池 cuDeviceSetMemPool,如果从未调用 cuDeviceSetMemPool,则返回设备的默认内存池。默认情况下,当前内存池是设备的默认内存池。否则,返回的池必须已通过 cuDeviceSetMemPool 设置。

另请参阅

cuDeviceGetDefaultMemPool, cuMemPoolCreate, cuDeviceSetMemPool

CUresult cuDeviceGetName ( char* name, int  len, CUdevice dev )
返回设备的标识符字符串。
参数
name
- 返回的设备标识符字符串
len
- 存储在name
dev
- 获取标识符字符串的设备
描述

返回一个 ASCII 字符串,用于标识设备dev在指向的 NULL 终止字符串中name. len指定可能返回的字符串的最大长度。

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetAttribute, cuDeviceGetUuid, cuDeviceGetLuid, cuDeviceGetCount, cuDeviceGet, cuDeviceTotalMem, cuDeviceGetExecAffinitySupport, cudaGetDeviceProperties

CUresult cuDeviceGetNvSciSyncAttributes ( void* nvSciSyncAttrList, CUdevice dev, int  flags )
返回此设备可以支持的 NvSciSync 属性。
参数
nvSciSyncAttrList
- 返回支持的 NvSciSync 属性。
dev
- 获取 NvSciSync 属性的有效 Cuda 设备。
flags
- 描述 NvSciSync 用法的标志。
描述

nvSciSyncAttrList,此 CUDA 设备dev可以支持的 NvSciSync 的属性。nvSciSyncAttrList返回的

可用于创建与此设备的功能匹配的 NvSciSync 对象。nvSciSyncAttrList如果

中的 NvSciSyncAttrKey_RequiredPerm 字段已设置,则此 API 将返回 CUDA_ERROR_INVALID_VALUE

应用程序应将nvSciSyncAttrList设置为有效的 NvSciSyncAttrList,否则此 API 将返回 CUDA_ERROR_INVALID_HANDLE

Theflags

控制应用程序打算如何使用从

创建的 NvSciSync。nvSciSyncAttrList有效的标志是

必须至少设置其中一个标志,否则 API 返回 CUDA_ERROR_INVALID_VALUE。这两个标志彼此正交:开发人员可以同时设置这两个标志,以便在同一

中设置等待和信号特定属性。nvSciSyncAttrList.

请注意,此 API 使用等效于以下公共属性键值的值更新输入

:如果 CUDA_NVSCISYNC_ATTR_SIGNAL

中设置,则 NvSciSyncAttrKey_RequiredPerm 设置为nvSciSyncAttrList

  • 如果 CUDA_NVSCISYNC_ATTR_SIGNAL

    中设置,则 NvSciSyncAttrKey_RequiredPerm 设置为 NvSciSyncAccessPerm_SignalOnlyflags.

  • 如果 CUDA_NVSCISYNC_ATTR_WAIT

    中设置,则 NvSciSyncAccessPerm_WaitOnlyflags.

  • 如果 CUDA_NVSCISYNC_ATTR_WAITCUDA_NVSCISYNC_ATTR_SIGNAL 都在

    中设置,则 NvSciSyncAccessPerm_WaitSignalflags

  • NvSciSyncAttrKey_PrimitiveInfo 设置为device.

  • 在任何有效的

    上为 NvSciSyncAttrValPrimitiveType_SysmemSemaphoredevice如果

    是 Tegra 设备,则为 NvSciSyncAttrValPrimitiveType_Syncpoint。

  • 如果

    是 GA10X+,则为 NvSciSyncAttrValPrimitiveType_SysmemSemaphorePayload64b。NvSciSyncAttrKey_GpuId 设置为从此

    返回的相同 UUID,来自 cuDeviceGetUuiddevicedevice

CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_INVALID_HANDLE, CUDA_ERROR_INVALID_DEVICE, CUDA_ERROR_NOT_SUPPORTED, CUDA_ERROR_OUT_OF_MEMORY

另请参阅

cuImportExternalSemaphore, cuDestroyExternalSemaphore, cuSignalExternalSemaphoresAsync, cuWaitExternalSemaphoresAsync

CUresult cuDeviceGetTexture1DLinearMaxWidth ( size_t* maxWidthInElements, CUarray_format format, unsigned numChannels, CUdevice dev )
返回给定纹理元素大小的 1D 线性纹理中可分配的最大元素数。
参数
maxWidthInElements
- 返回给定

的可分配最大纹理元素数formatnumChannels.

format
- 纹理格式。
numChannels
- 每个纹理元素的通道数。
dev
- 设备句柄。
描述

maxWidthInElements给定

的 1D 线性纹理中可分配的最大纹理元素数formatnumChannels.

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetAttribute, cuDeviceGetCount, cuDeviceGetName, cuDeviceGetUuid, cuDeviceGet, cudaMemGetInfo, cuDeviceTotalMem

CUresult cuDeviceGetUuid ( CUuuid* uuid, CUdevice dev )
返回设备的 UUID。
参数
uuid
- 返回的 UUID
dev
- 获取标识符字符串的设备
描述

请注意,此 API 有一个较新版本:cuDeviceGetUuid_v2。它将在 12.0 版本中取代此版本,该版本为保持次要版本兼容性而保留。

返回 16 个八位字节,用于标识设备dev

指向的结构中uuid.

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetUuid_v2cuDeviceGetAttribute, cuDeviceGetCount, cuDeviceGetName, cuDeviceGetLuid, cuDeviceGet, cuDeviceTotalMem, cuDeviceGetExecAffinitySupport, cudaGetDeviceProperties

CUresult cuDeviceGetUuid_v2 ( CUuuid* uuid, CUdevice dev )
返回设备的 UUID (11.4+)。
参数
uuid
- 返回的 UUID
dev
- 获取标识符字符串的设备
描述

返回 16 个八位字节,用于标识设备dev

指向的结构中uuid。如果设备处于 MIG 模式,则返回其 MIG UUID,该 UUID 唯一标识订阅的 MIG 计算实例。

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetAttribute, cuDeviceGetCount, cuDeviceGetName, cuDeviceGetLuid, cuDeviceGet, cuDeviceTotalMem, cudaGetDeviceProperties

CUresult cuDeviceSetMemPool ( CUdevice dev, CUmemoryPool pool )
设置设备的当前内存池。
描述

内存池必须是指定设备的本地内存池。cuMemAllocAsync 从所提供流设备的当前内存池中分配内存。默认情况下,设备的当前内存池是其默认内存池。

注意

使用 cuMemAllocFromPoolAsync 以指定从与流运行设备不同的设备进行异步分配。

另请参阅

cuDeviceGetDefaultMemPool, cuDeviceGetMemPool, cuMemPoolCreate, cuMemPoolDestroy, cuMemAllocFromPoolAsync

CUresult cuDeviceTotalMem ( size_t* bytes, CUdevice dev )
返回设备上的总内存量。
参数
bytes
- 返回设备上可用的内存量,以字节为单位
dev
- 设备句柄
描述

*bytes设备上可用的总内存量dev以字节为单位。

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuDeviceGetAttribute, cuDeviceGetCount, cuDeviceGetName, cuDeviceGetUuid, cuDeviceGet, cuDeviceGetExecAffinitySupport, cudaMemGetInfo

CUresult cuFlushGPUDirectRDMAWrites ( CUflushGPUDirectRDMAWritesTarget target, CUflushGPUDirectRDMAWritesScope scope )
阻塞直到远程写入对指定范围可见。
参数
target
- 操作的目标,请参阅 CUflushGPUDirectRDMAWritesTarget
scope
- 操作的范围,请参阅 CUflushGPUDirectRDMAWritesScope
描述

阻塞直到通过诸如 nvidia_p2p_get_pages 等 API 创建的映射(有关更多信息,请参阅 https://docs.nvda.net.cn/cuda/gpudirect-rdma)对目标上下文的 GPUDirect RDMA 写入对指定范围可见。

如果范围等于或位于 CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING 指示的范围内,则此调用将为空操作,并且为了性能可以安全地省略。这可以通过比较两个枚举之间的数值来确定,较小的范围具有较小的值。

在支持通过硬件中的多个路径进行 GPUDirect RDMA 写入的平台上(请参阅 CU_MEM_RANGE_FLAG_DMA_BUF_MAPPING_TYPE_PCIE),用户应将这些路径视为属于单独的排序域。请注意,在这种情况下,CUDA 驱动程序会将 RDMA 写入排序和 RDMA 写入范围都报告为 ALL_DEVICES,并且对 cuFlushGPUDirectRDMA 的调用将为空操作,但是当同时使用这些多个路径时,用户有责任通过使用 CUDA 范围之外的机制来确保排序。

用户可以通过 CU_DEVICE_ATTRIBUTE_FLUSH_FLUSH_GPU_DIRECT_RDMA_OPTIONS 查询对此 API 的支持。

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。