系统软件层
该程序使用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.