请看下列代码:
#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;
}