cuda获取硬件信息
int gpu_count = -1; cudaGetDeviceCount(&gpu_count); std::cout << "gpu count: " << gpu_count << std::endl;
多显卡环境中设置显卡
cudaSetDevice(0)
多显卡环境下当cuda运算结束后需要reset显卡设备
cudaDeviceReset()
查询当前正在使用的设备号
int device_id; cudaGetDevice(&device_id); std::cout << "device id: " << device_id << std::endl;
cuda提供了一个内置结构体,可以查询到设备的很多信息
struct cudaDeviceProp { char name[256]; //器件的名字 size_t totalGlobalMem; //Global Memory 的byte大小 size_t sharedMemPerBlock; //线程块可以使用的共用记忆体的最大值。byte为单位,多处理器上的所有线程块可以同时共用这些记忆体 int regsPerBlock; //线程块可以使用的32位寄存器的最大值,多处理器上的所有线程快可以同时实用这些寄存器 int warpSize; //按线程计算的wrap块大小 size_t memPitch; //做内存复制是可以容许的最大间距,允许通过cudaMallocPitch()为包含记忆体区域的记忆提复制函数的最大间距,以byte为单位。 int maxThreadsPerBlock; //每个块中最大线程数 int maxThreadsDim[3]; //块各维度的最大值 int maxGridSize[3]; //Grid各维度的最大值 size_t totalConstMem; //常量内存的大小 int major; //计算能力的主代号 int minor; //计算能力的次要代号 int clockRate; //时钟频率 size_t textureAlignment; //纹理的对齐要求 int deviceOverlap; //器件是否能同时执行cudaMemcpy()和器件的核心代码 int multiProcessorCount; //设备上多处理器的数量 int kernelExecTimeoutEnabled; //是否可以给核心代码的执行时间设置限制 int integrated; //这个GPU是否是集成的 int canMapHostMemory; //这个GPU是否可以讲主CPU上的存储映射到GPU器件的地址空间 int computeMode; //计算模式 int maxTexture1D; //一维Textures的最大维度 int maxTexture2D[2]; //二维Textures的最大维度 int maxTexture3D[3]; //三维Textures的最大维度 int maxTexture2DArray[3]; //二维Textures阵列的最大维度 int concurrentKernels; //GPU是否支持同时执行多个核心程序 };
可以在程序开始时加上验证
int gpu_count = -1; cudaGetDeviceCount(&gpu_count); if (gpu_count < 1) { std::cout << "no gpu device !" << std::endl; exit(0); }
查看SM个数,单个SM寄存器数量和单个SM上shared memory大小
#include <iostream> int main() { // 获取当前设备 IDint device; cudaGetDevice(&device); // 获取设备属性 cudaDeviceProp deviceProp; cudaGetDeviceProperties(&deviceProp, device); // 输出每个 SM 的寄存器数量和共享内存容量 std::cout << "Device " << device << " specifications:" << std::endl; std::cout << "Number of SMs: " << deviceProp.multiProcessorCount << std::endl; std::cout << "Registers per SM: " << deviceProp.regsPerMultiprocessor << std::endl; std::cout << "Shared memory per SM (bytes): " << deviceProp.sharedMemPerMultiprocessor << " bytes" << std::endl; return0; }
无情的摸鱼机器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!