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;
}
复制代码

 

posted @   Wangtn  阅读(353)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示