Cuda实战-03 显卡设备信息

请看下列代码:


#include <stdio.h>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>

__global__ void mykernel(void) {
    printf("Hello World From GPU!\n");
}

int main(){
    //获取显卡数量
    int deviceCount;
    cudaGetDeviceCount(&deviceCount);
    printf("Device Count = %d \n", deviceCount);
    //获取显卡属性
    cudaDeviceProp deviceProp;
    cudaGetDeviceProperties(&deviceProp, 0);  //获取0号显卡属性,如果有两张显卡,就有0号显卡和1号显卡
    printf("Device Name = %s \n",deviceProp.name);
    return 0;
}

其中cudaDeviceProp是一个结构体形式,具体描述如下:

struct cudaDeviceProp {
    
    char name[256];   //设备名称,如"GeForce GTX 940M"
    
    //内存信息,单位为字节B
    size_t totalGlobalMem;   //全局内存大小
    size_t sharedMemPerBlock;  //共享内存大小
    size_t totalConstMem;   //常量内存大小
    int maxTexture1D; //纹理内存大小:一维最大值
    int maxTexture2D[2]; //纹理内存大小:二维最大值
    int maxTexture3D[3]; //纹理内存大小:三维最大值
    int regsPerBlock;   //每个块的位寄存器个数
    int memoryBusWidth;   //内存带宽,bit

    //运行信息,Grid-->Block-->Thread
    int clockRate;   //显卡时钟频率,Hz
    int memoryClockRate;  //内存时钟频率
    int major;  //设备计算能力的主要修订版号
    int minor;  //设备计算能力的辅助修订版号
    int warpSize;   //束的大小
    int maxThreadsPerBlock;   //每个块中最大线程数
    int maxThreadsDim[3];   //一个块中每个维度的最大线程数
    int maxGridSize[3];   //一个网格的每个维度的最大块数量
    int multiProcessorCount; // 设备上的处理器的数量
    int maxThreadsPerMultiProcessor;  //每个处理器上面的最大线程数量
    
    //同步信息
    int deviceOverlap; // 一个布尔值,表示该装置是否能够同时进行cudamemcpy()和内核执行
    int kernelExecTimeoutEnabled; // 一个布尔值,该值表示在该设备上执行的内核是否有运行时的限制
    int integrated; // 返回一个布尔值,表示设备是否是一个集成的GPU(即部分的芯片组、没有独立显卡等)
    int canMapHostMemory; // 表示设备是否可以映射到CUDA设备主机内存地址空间的布尔值
    int computeMode; // 一个值,该值表示该设备的计算模式:默认值,专有的,或禁止的
    int concurrentKernels; // 一个布尔值,该值表示该设备是否支持在同一上下文中同时执行多个内核
    
    //其他信息
    int maxTexture2DArray[3]; // 二维纹理阵列支持的最大尺寸
    size_t textureAlignment; // 该设备对纹理对齐的要求

可以尝试这个更全的案例:

#include <iostream>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"

using namespace std;

void GetCudaImfo() {
    int deviceCount;
    cudaGetDeviceCount(&deviceCount);
    int dev;
    for (dev = 0; dev < deviceCount; dev++) {
        int driver_version(0), runtime_version(0);
        cudaDeviceProp deviceProp;
        cudaGetDeviceProperties(&deviceProp, dev);
        if (dev == 0)
            if (deviceProp.minor = 9999 && deviceProp.major == 9999)
                cout << endl;
        cout << "使用GPU device " << dev << ": " << deviceProp.name << endl;
        cudaDriverGetVersion(&driver_version);
        cout << "CUDA驱动版本:" << driver_version / 1000 << "." << (driver_version % 1000) / 10 << endl;
        cudaRuntimeGetVersion(&runtime_version);
        cout << "CUDA运行时版本:" << runtime_version / 1000 << "." << (runtime_version % 1000) / 10 << endl;
        cout << "设备计算能力:" << deviceProp.major << "." << deviceProp.minor << endl;
        cout << "显卡时钟频率:" << deviceProp.clockRate * 1e-6f << " GHz" << endl;
        cout << "内存时钟频率:" << deviceProp.memoryClockRate * 1e-3f << " MHz" << endl;
        cout << "内存总线带宽:" << deviceProp.memoryBusWidth << " bit" << endl;
        cout << "总显存大小:" << deviceProp.totalGlobalMem / (1024.0 * 1024.0) << " MB" << endl;
        cout << "总常量内存大小:" << deviceProp.totalConstMem / 1024.0 << " KB" << endl;
        cout << "SM数量:" << deviceProp.multiProcessorCount << endl;
        cout << "每个SM最大线程数:" << deviceProp.maxThreadsPerMultiProcessor << endl;
        cout << "每个线程块(block)共享内存大小:" << deviceProp.sharedMemPerBlock / 1024.0 << " KB" << endl;
        cout << "每个线程块(block)的最大线程数:" << deviceProp.maxThreadsPerBlock << endl;
        cout << "每个线程块(block)的最大可用寄存器数:" << deviceProp.regsPerBlock << endl;
        cout << "线程束(wrap)尺寸:" << deviceProp.warpSize << endl;
        cout << "每个线程块(block)各个维度最大尺寸:" << deviceProp.maxThreadsDim[0] << " x " << deviceProp.maxThreadsDim[1] << " x " << deviceProp.maxThreadsDim[2] << endl;
        cout << "每个线程格(grid)各个维度最大尺寸:" << deviceProp.maxGridSize[0] << " x " << deviceProp.maxGridSize[1] << " x " << deviceProp.maxGridSize[2] << endl;
        cout << "最大存储间距:" << deviceProp.memPitch / (1024.0 * 1024.0) << " MB" << endl;
    }
}


int main()
{
    GetCudaImfo();

    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦星辰.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值