运行时环境层

运行过程与结果与NV相同

OpenXLA 可以通过底层库(例如 CUDA Runtime 或 CUDA Driver API)与 GPU 交互,但它不是直接用于设备查询或管理的工具。OpenXLA 的主要作用是为机器学习模型提供跨硬件的优化执行支持。OpenXLA 依赖于 CUDA API 进行设备信息查询。

  • 定义了一个宏 CHECK_CUDA,用于检查 CUDA API 调用是否成功。如果失败,获取错误信息并退出程序。
  • 调用 cuInit(0) 初始化 CUDA 驱动程序。必须在所有 CUDA API 调用之前执行。
  • 使用 cuDeviceGetCount(&deviceCount) 获取系统中可用的 CUDA 设备数量,并打印出来。
  • 使用 cuDeviceGet(&device, i) 获取每个 CUDA 设备的句柄,用于后续查询设备信息。
  • 使用 cuDeviceGetName(name, sizeof(name), device) 获取每个设备的名称(例如 GPU 型号)。
  • 使用 cuDeviceGetAttribute(&major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, device)cuDeviceGetAttribute(&minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, device) 获取设备的计算能力主版本和次版本。
  • 使用 cuDeviceTotalMem(&totalMem, device) 获取设备的总内存大小(以字节为单位),并转换为 MB 打印出来。
#include <stdio.h>
#include <cuda.h>

// CUDA 错误检查宏
#define CHECK_CUDA(call) do { \
    CUresult result = call; \
    if (result != CUDA_SUCCESS) { \
        const char *errStr; \
        cuGetErrorString(result, &errStr); \
        printf("CUDA Error: %s\n", errStr); \
        return -1; \
    } \
} while (0)

int main() {
    // 初始化 CUDA Driver API
    CHECK_CUDA(cuInit(0));

    // 获取设备数量
    int deviceCount = 0;
    CHECK_CUDA(cuDeviceGetCount(&deviceCount));

    printf("CUDA 设备数量: %d\n", deviceCount);

    // 遍历每个设备,获取设备信息
    for (int i = 0; i < deviceCount; ++i) {
        CUdevice device;
        char name[128];
        int major = 0, minor = 0;

        // 获取设备句柄
        CHECK_CUDA(cuDeviceGet(&device, i));

        // 获取设备名称
        CHECK_CUDA(cuDeviceGetName(name, sizeof(name), device));

        // 获取设备的计算能力 (Compute Capability)
        CHECK_CUDA(cuDeviceGetAttribute(&major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, device));
        CHECK_CUDA(cuDeviceGetAttribute(&minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, device));

        // 获取设备的总内存
        size_t totalMem = 0;
        CHECK_CUDA(cuDeviceTotalMem(&totalMem, device));

        printf("设备 %d: %s\n", i, name);
        printf("  计算能力: %d.%d\n", major, minor);
        printf("  总内存: %zu MB\n", totalMem / (1024 * 1024));
    }

    return 0;
}

结果:

CUDA 设备数量: 1
设备 0: NVIDIA GeForce RTX 4080 SUPER
  计算能力: 8.9
  总内存: 16072 MB