4.11. 初始化和清理
本章介绍处理 NVML 初始化和清理的方法。用户有责任在调用任何其他方法之前调用 nvmlInit_v2(),并在不再使用 NVML 时调用 nvmlShutdown()。
定义
- #define NVML_INIT_FLAG_NO_ATTACH 2
- 不要附加 GPU。
- #define NVML_INIT_FLAG_NO_GPUS 1
- 当未找到 GPU 时,nvmlInit() 不要失败。
函数
- nvmlReturn_t nvmlInitWithFlags ( unsigned int flags )
- nvmlReturn_t nvmlInit_v2 ( void )
- nvmlReturn_t nvmlShutdown ( void )
函数
- nvmlReturn_t nvmlInitWithFlags ( unsigned int flags )
-
参数
- flags
- 行为修饰符标志
返回值
- NVML_SUCCESS 如果 NVML 已正确初始化
- NVML_ERROR_DRIVER_NOT_LOADED 如果 NVIDIA 驱动程序未运行
- NVML_ERROR_NO_PERMISSION 如果 NVML 没有与驱动程序通信的权限
- NVML_ERROR_UNKNOWN 在任何意外错误时
描述
nvmlInitWithFlags 是 nvmlInit() 的变体,它允许传递一组布尔值来修改 nvmlInit() 的行为。除了 “flags” 参数外,它与 nvmlInit_v2 完全相似。
适用于所有产品。
- nvmlReturn_t nvmlInit_v2 ( void )
-
返回值
- NVML_SUCCESS 如果 NVML 已正确初始化
- NVML_ERROR_DRIVER_NOT_LOADED 如果 NVIDIA 驱动程序未运行
- NVML_ERROR_NO_PERMISSION 如果 NVML 没有与驱动程序通信的权限
- NVML_ERROR_UNKNOWN 在任何意外错误时
描述
初始化 NVML,但暂不初始化任何 GPU。
注意-
nvmlInit_v3 引入了一个 “flags” 参数,允许传递布尔值来修改 nvmlInit() 的行为。
-
在 NVML 5.319 中,新的 nvmlInit_v2 已取代 nvmlInit"_v1"(NVML 4.304 及更旧版本中的默认设置),后者会初始化系统中的所有 GPU 设备。
这允许 NVML 在系统中其他 GPU 不稳定或处于不良状态时与 GPU 通信。使用此 API 时,GPU 将在 nvmlDeviceGetHandleBy* 函数中被发现和初始化。
注意为了将 nvmlInit_v2 与 nvmlInit"_v1" 进行对比,当任何检测到的 GPU 处于不良或不稳定状态时,NVML 4.304 nvmlInit"_v1" 将会失败。
适用于所有产品。
此方法应在调用库中的任何其他方法之前调用一次。维护初始化的引用计数。只有当引用计数达到零时才会发生关闭。
- nvmlReturn_t nvmlShutdown ( void )
-
描述
通过释放先前使用 nvmlInit_v2() 分配的所有 GPU 资源来关闭 NVML。
适用于所有产品。
此方法应在完成 NVML 工作后调用,对于每次调用 nvmlInit_v2() 调用一次。维护初始化的引用计数。只有当引用计数达到零时才会发生关闭。为了向后兼容,如果 nvmlShutdown() 的调用次数多于 nvmlInit(),则不会报告错误。