struct cudaDeviceProp{
char name[256];
// 设备名称(例如,“Geforce GTX 280”)
size_t totalGlobalMem;
// 设备上全局内存的总量,单位为字节
size_t sharedMemPerBlock;
// 在一个线程块(block)中可使用的最大共享内存数量,单位为字节
int regsPerBlock;
// 每个线程块中可用的32位寄存器数量
int warpSize;
// 在一个线程束(warp)中包含的线程数量
size_t memPitch;
// 在内存复制中最大的修正量(Pitch),单位为字节
int maxThreadsPerBlock;
// 在一个线程块中可以包含的最大线程数量
int maxThreadsDim[3];
// 在多维线程块数组中,每一维可以包含的最大线程数量
int maxGridSize[3];
// 在一个线程格(grid)中,每一维包含的线程块数量
size_t totalConstMem;
// 常量内存的总量
int major;
// 设备计算功能集的主版本号
int minor;
// 设备上计算功能集的次版本号
int clockRate;
//
size_t textureAlignment;
// 设备的纹理对齐要求
int deviceOverlap;
// 一个布尔值,表示该设备是否可以同时执行一个cudaMemory()调用和一个核函数的调用
int multiProcessorCount;
// 设备上多处理器的数量
int kernelExecTimeoutEnabled;
// 一个布尔值,表示该设备上执行的核函数是否存在运行时限制
int integrated;
// 一个布尔类型的值,表示设备是否是一个集成GPU(即该GPU属于芯片组的一部分而非独立的GPU)
int canMapHostMemory;
// 一个布尔类型的值,表示设备是否将主机内存映射到CUDA设备地址空间
int computeMode;
// 表示设备的计算模式,默认(default),独占(Exclusive),或者禁止(Prohibited)
int maxTexture1D;
// 一维纹理数的最大维数
int maxTexture2D;
// 二维纹理数的最大维数
int maxTexture3D;
//三维纹理数的最大维数
int maxTexture2DArray[3];
//二维纹理数组的最大维数
int concurrentKernels;
//一个bool类型的值,表示设备是否支持在同一个上下文中同时执行多个核函数
}
#include "book.h"
int main(void)
{
cudaDeviceProp prop;
int count;
HANDLE_ERROR(cudaGetDeviceCount(&count));
for (int i = 0; i < count; i++)
{
HANDLE_ERROR(cudaGetDeviceProperties(&prop, i));
printf(" ---General Information for device %d ----\n", i);
printf("Name: %s\n", prop.name);
printf("Compute capability: %d.%d\n", prop.major, prop.minor);
printf("Clock rate: %d\n", prop.clockRate);
printf("Device copy overlap: ");
if (prop.deviceOverlap)
printf("Enabled\n");
else
printf("Disabled\n");
printf("Kernel execition timeout :");
if (prop.kernelExecTimeoutEnabled)
printf("Enabled\n");
else
printf("Disabled\n");
printf(" ---Memory Information for device %d ---\n", i);
printf("Total global mem: %ld\n", prop.totalGlobalMem);
printf("Total constant Mem:%ld\n", prop.totalConstMem);
printf("Max mem pitch: %ld\n", prop.memPitch);
printf("Texture Alignment: %ld\n", prop.textureAlignment);
printf(" ---MP Information for device %d---\n", i);
printf("Multiprocessor count: %d\n", prop.multiProcessorCount);
printf("Shared mem per mp: %ld\n", prop.sharedMemPerBlock);
printf("Registers per mp: %d\n", prop.warpSize);
printf("Threads in warp: %d\n", prop.maxThreadsPerBlock);
printf("Max thread dimensions: (%d, %d, %d)\n", prop.maxThreadsDim[0], prop.maxThreadsDim[1], prop.maxThreadsDim[2]);
printf("Max grid dimensions: (%d, %d, %d)\n", prop.maxGridSize[0], prop.maxGridSize[1], prop.maxGridSize[2]);
printf("\n");
}
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(Hello-world CUDA)
set(CMAKE_CUDA_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)
set(CUDA_NVCC_FLAGS -O3;-G;-g)
set(CUDA_INCLUDE_DIR /usr/local/cuda/include)
set(BOOK_INCLUDE /home/wang/projects/cuda-examples/includes)
set(LIBS_DIR /usr/local/cuda/lib64)
include_directories(${CUDA_INCLUDE_DIR} ${BOOK_INCLUDE})
link_directories(${LIBS_DIR})
add_executable(${PROJECT_NAME} main.cu)
target_link_libraries(${PROJECT_NAME} libcudart.so)
信息打印:
---General Information for device 0 ----
Name: NVIDIA Tegra X1
Compute capability: 5.3
Clock rate: 921600
Device copy overlap: Enabled
Kernel execition timeout :Enabled
---Memory Information for device 0 ---
Total global mem: 4156661760
Total constant Mem:65536
Max mem pitch: 2147483647
Texture Alignment: 512
---MP Information for device 0---
Multiprocessor count: 1
Shared mem per mp: 49152
Registers per mp: 32
Threads in warp: 1024
Max thread dimensions: (1024, 1024, 64)
Max grid dimensions: (2147483647, 65535, 65535)