struct cudaDeviceProp { char name[256]; /**< 设备的ASCII标识 */ size_t totalGlobalMem; /**< 可用的全局内存量,单位字节 */ size_t totalConstMem; /**< 可用的常量内存量,单位字节 */ size_t sharedMemPerBlock; /**< 每个block可用的共享内存量,单位字节 */ int regsPerBlock; /**< 每个block里可用32位寄存器数量 */ int warpSize; /**< 在线程warp块大小*/ size_t memPitch; /**< 允许的内存复制最大修正,单位字节*/ int maxThreadsPerBlock; /**< 每个block最大线程数量 */ int maxThreadsDim[3]; /**< 一block里每个维度最大线程量 */ int maxGridSize[3]; /**< 一格里每个维度最大数量 */ int clockRate; /**< 时钟频率,单位千赫khz */ int major; /**< 计算功能主版本号*/ int minor; /**< 计算功能次版本号*/ size_t textureAlignment; /**< 对齐要求的纹理 */ int deviceOverlap; /**< 判断设备是否可以同时拷贝内存和执行内核。已过时。改用asyncEngineCount */ int multiProcessorCount; /**< 设备上的处理器数量 */ int kernelExecTimeoutEnabled; /**< 内核函数是否运行受时间限制*/ int integrated; /**< 设备是不是独立的 */ int canMapHostMemory; /**< 设备能否映射主机cudaHostAlloc/cudaHostGetDevicePointer */ int computeMode; /**< 计算模式,有默认,独占,禁止,独占进程(See ::cudaComputeMode) */ int maxTexture1D; /**< 1D纹理最大值 */ int maxTexture2D[2]; /**< 2D纹理最大维数*/ int maxTexture3D[3]; /**< 3D纹理最大维数 */ int maxTexture1DLayered[2]; /**< 最大的1D分层纹理尺寸 */ int maxTexture2DLayered[3]; /**< 最大的2D分层纹理尺寸 */ size_t surfaceAlignment; /**< 表面的对齐要求*/ int concurrentKernels; /**< 设备是否能同时执行多个内核*/ int ECCEnabled; /**< 设备是否支持ECC */ int pciBusID; /**< 设备的PCI总线ID */ int pciDeviceID; /**< PCI设备的设备ID*/ int pciDomainID; /**<PCI设备的域ID*/ int tccDriver; /**< 1如果设备是使用了TCC驱动的Tesla设备,否则就是0 */ int asyncEngineCount; /**< 异步Engine数量 */ int unifiedAddressing; /**< 设备是否共享统一的地址空间与主机*/ int memoryClockRate; /**<峰值内存时钟频率,单位khz*/ int memoryBusWidth; /**< 全局内存总线宽度,单位bit*/ int l2CacheSize; /**< L2 cache大小,单位字节 */ int maxThreadsPerMultiProcessor;/**< 每个多处理器的最大的常驻线程 */ };
示例:
#include "stdio.h" #include <cuda_runtime.h> int main(){ cudaDeviceProp prop; int count; int i; cudaGetDeviceCount(&count); fprintf(stderr,"CudaDeviceNumber======%d\n",count); for(i=0;i<count;i++){ cudaGetDeviceProperties(&prop,i); fprintf(stderr,"---General Infomation for device %d---\n",i); fprintf(stderr,"Name: %s\n",prop.name); fprintf(stderr,"Total global mem: %ld\n",prop.totalGlobalMem); fprintf(stderr,"Total constant mem: %ld\n",prop.totalConstMem); fprintf(stderr,"Shared mem per mp: %ld\n",prop.sharedMemPerBlock); fprintf(stderr,"Threads in warp: %d\n",prop.warpSize); fprintf(stderr,"Max threads per block: %d\n",prop.maxThreadsPerBlock); } return 0; }
运行结果:
fangbing@casis-node1:~/test$ nvcc readDeviceProp.cu -o readDeviceProp
fangbing@casis-node1:~/test$ ./readDeviceProp
CudaDeviceNumber======4
---General Infomation for device 0---
Name: Tesla K80
Total global mem: 12079136768
Total constant mem: 65536
Shared mem per mp: 49152
Threads in warp: 32
Max threads per block: 1024
---General Infomation for device 1---
Name: Tesla K80
Total global mem: 12079136768
Total constant mem: 65536
Shared mem per mp: 49152
Threads in warp: 32
Max threads per block: 1024
---General Infomation for device 2---
Name: Tesla K80
Total global mem: 12079136768
Total constant mem: 65536
Shared mem per mp: 49152
Threads in warp: 32
Max threads per block: 1024
---General Infomation for device 3---
Name: Tesla K80
Total global mem: 12079136768
Total constant mem: 65536
Shared mem per mp: 49152
Threads in warp: 32
Max threads per block: 1024