系统软件层

该程序使用OpenCL API 列出了系统中所有可用的 NVIDIA 设备,包括设备名称、驱动版本、计算单元数量和全局内存大小,并创建和销毁了一个OpenCL上下文。

  • 获取OpenCL平台:使用clGetPlatformIDs获取系统中的所有 OpenCL 平台。

  • 检查NVIDIA平台:遍历平台列表,使用clGetPlatformInfo检查是否为 NVIDIA 平台。

  • 获取设备信息:通过clGetDeviceIDs获取 NVIDIA 平台中的所有设备,并使用clGetDeviceInfo获取每个设备的详细信息,如设备名称、驱动版本和全局内存大小。

  • 创建和销毁上下文:使用clCreateContext创建一个 OpenCL 上下文,并在使用后释放该上下文。

    示例代码:

#include <iostream> #include <cuda.h> // Check the return value of CUDA functions and print error message on failure void checkCudaErrors(CUresult result) { if (result != CUDA_SUCCESS) { const char *errorStr; cuGetErrorString(result, &errorStr); std::cerr << "CUDA Error: " << errorStr << std::endl; exit(EXIT_FAILURE); } } // Print information about a CUDA device void printDeviceInfo(CUdevice device) { int driverVersion = 0; char deviceName[256]; // Get device name checkCudaErrors(cuDeviceGetName(deviceName, sizeof(deviceName), device)); int computeCapabilityMajor, computeCapabilityMinor; // Get the major and minor version of compute capability checkCudaErrors(cuDeviceGetAttribute(&computeCapabilityMajor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, device)); checkCudaErrors(cuDeviceGetAttribute(&computeCapabilityMinor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, device)); size_t totalGlobalMem; checkCudaErrors(cuDeviceTotalMem(&totalGlobalMem, device)); checkCudaErrors(cuDriverGetVersion(&driverVersion)); // Print device details std::cout << "Device Name: " << deviceName << std::endl; std::cout << "Compute Capability: " << computeCapabilityMajor << "." << computeCapabilityMinor << std::endl; std::cout << "CUDA Driver Version: " << driverVersion / 1000 << "." << (driverVersion % 100) / 10 << std::endl; std::cout << "Total Global Memory: " << totalGlobalMem / (1024 * 1024) << " MB" << std::endl; } int main() { // Initialize CUDA checkCudaErrors(cuInit(0)); // Get the number of available CUDA devices int deviceCount; checkCudaErrors(cuDeviceGetCount(&deviceCount)); std::cout << "Number of CUDA Devices: " << deviceCount << std::endl; CUdevice device; // Iterate through each device and print its information for (int i = 0; i < deviceCount; i++) { checkCudaErrors(cuDeviceGet(&device, i)); printDeviceInfo(device); std::cout << std::endl; } CUcontext context; // Create a CUDA context and set it as the current context checkCudaErrors(cuCtxCreate(&context, 0, deviceCount > 0 ? device : 0)); checkCudaErrors(cuCtxSetCurrent(context)); std::cout << "CUDA context created successfully." << std::endl; checkCudaErrors(cuCtxDestroy(context)); return 0; }

结果:

Platform Name: NVIDIA CUDA Device Name: NVIDIA GeForce RTX 4080 SUPER Driver Version: 550.107.02 Max Compute Units: 80 Global Memory Size: 16072 MB OpenCL context created successfully.