NVML API 参考指南 (PDF) - vR570 (旧版本) - 最近更新于 2025 年 1 月 29 日 - 发送反馈

4.16.1. CPU 和内存亲和性

[设备查询]

本章节介绍与 CPU 和内存亲和性相关的 NVML 操作。

定义

#define NVML_AFFINITY_SCOPE_NODE 0
NUMA 节点亲和性查询的范围。
#define NVML_AFFINITY_SCOPE_SOCKET 1
处理器插槽亲和性查询的范围。

函数

nvmlReturn_t nvmlDeviceClearCpuAffinity ( nvmlDevice_t device )
nvmlReturn_t nvmlDeviceGetCpuAffinity ( nvmlDevice_t device, unsigned int  cpuSetSize, unsignedlong* cpuSet )
nvmlReturn_t nvmlDeviceGetCpuAffinityWithinScope ( nvmlDevice_t device, unsigned int  cpuSetSize, unsignedlong* cpuSet, nvmlAffinityScope_t scope )
nvmlReturn_t nvmlDeviceGetMemoryAffinity ( nvmlDevice_t device, unsigned int  nodeSetSize, unsignedlong* nodeSet, nvmlAffinityScope_t scope )
nvmlReturn_t nvmlDeviceGetNumaNodeId ( nvmlDevice_t device, unsigned int* node )
nvmlReturn_t nvmlDeviceSetCpuAffinity ( nvmlDevice_t device )

定义

#define NVML_AFFINITY_SCOPE_NODE 0

#define NVML_AFFINITY_SCOPE_SOCKET 1

函数

nvmlReturn_t nvmlDeviceClearCpuAffinity ( nvmlDevice_t device )
参数
device
目标设备的标识符
返回值

描述

清除调用线程的所有亲和性绑定。请注意,这是版本 8.0 的一项更改,因为旧版本会清除调用进程及其所有子进程的亲和性。

适用于 Kepler 或更新的完全支持的设备。仅在 Linux 上支持。

nvmlReturn_t nvmlDeviceGetCpuAffinity ( nvmlDevice_t device, unsigned int  cpuSetSize, unsignedlong* cpuSet )
参数
device
目标设备的标识符
cpuSetSize
cpuSet 数组的安全访问大小
cpuSet
数组引用,用于返回 CPU 的位掩码,64 位机器上每个 unsigned long 为 64 个 CPU,32 位机器上为 32 个 CPU
返回值

描述

检索一个 unsigned int 数组(大小为 cpuSetSize),其中包含设备的理想 CPU 亲和性的位掩码。例如,如果处理器 0、1、32 和 33 对于设备是理想的,并且 cpuSetSize == 2,则 result[0] = 0x3,result[1] = 0x3。这等效于使用 NVML_AFFINITY_SCOPE_NODE 调用 nvmlDeviceGetCpuAffinityWithinScope

适用于 Kepler 或更新的完全支持的设备。仅在 Linux 上支持。

nvmlReturn_t nvmlDeviceGetCpuAffinityWithinScope ( nvmlDevice_t device, unsigned int  cpuSetSize, unsignedlong* cpuSet, nvmlAffinityScope_t scope )
参数
device
目标设备的标识符
cpuSetSize
cpuSet 数组的安全访问大小
cpuSet
数组引用,用于返回 CPU 的位掩码,64 位机器上每个 unsigned long 为 64 个 CPU,32 位机器上为 32 个 CPU
scope
更改默认行为的范围
返回值

描述

检索一个 unsigned int 数组(大小为 cpuSetSize),其中包含设备在节点或插槽内的理想 CPU 亲和性的位掩码。例如,如果处理器 0、1、32 和 33 对于设备是理想的,并且 cpuSetSize == 2,则 result[0] = 0x3,result[1] = 0x3

注意

如果请求的范围不适用于目标拓扑,API 将回退到报告设备直接的非 I/O 祖先的 CPU 亲和性。

适用于 Kepler 或更新的完全支持的设备。仅在 Linux 上支持。

nvmlReturn_t nvmlDeviceGetMemoryAffinity ( nvmlDevice_t device, unsigned int  nodeSetSize, unsignedlong* nodeSet, nvmlAffinityScope_t scope )
参数
device
目标设备的标识符
nodeSetSize
nodeSet 数组的安全访问大小
nodeSet
数组引用,用于返回 NODE 的位掩码,64 位机器上每个 unsigned long 为 64 个 NODE,32 位机器上为 32 个 NODE
scope
更改默认行为的范围
返回值

描述

检索一个 unsigned int 数组(大小为 nodeSetSize),其中包含设备在节点或插槽内的理想内存亲和性的位掩码。例如,如果 NUMA 节点 0、1 在插槽内对于设备是理想的,并且 nodeSetSize == 1,则 result[0] = 0x3

注意

如果请求的范围不适用于目标拓扑,API 将回退到报告设备直接的非 I/O 祖先的内存亲和性。

适用于 Kepler 或更新的完全支持的设备。仅在 Linux 上支持。

nvmlReturn_t nvmlDeviceGetNumaNodeId ( nvmlDevice_t device, unsigned int* node )
参数
device
设备句柄
node
设备的 NUMA 节点 ID
返回值

描述

获取给定 GPU 设备的 NUMA 节点。这仅适用于 GPU 是 NUMA 节点的平台。

nvmlReturn_t nvmlDeviceSetCpuAffinity ( nvmlDevice_t device )
参数
device
目标设备的标识符
返回值

描述

使用 nvmlDeviceGetCpuAffinity() 中给出的指南,为调用线程和设备设置理想的亲和性。请注意,这是版本 8.0 的一项更改。旧版本会为调用进程及其所有子进程设置亲和性。目前最多支持 1024 个处理器。

适用于 Kepler 或更新的完全支持的设备。仅在 Linux 上支持。


NVML API 参考指南 (PDF) - vR570 (旧版本) - 最近更新于 2025 年 1 月 29 日 - 发送反馈