补充一下上一节cudaerror的内容,详细信息参考:
如何查询设备信息
一个数据结构:
cudaDeviceProp,CUDA设备属性表
int ECCEnabled 一个布尔值,表示设备是否支持差错校验
int asyncEngineCount 设备上异步机的数量
int canMapHostMemory 一个布尔值,表示设备是否将主机内存映射到CUDA设备地址空间
int clockRate 每千赫的时钟频率
int computeMode 表示设备的计算模式,默认(Default),独占(Exclusive),或者禁止(Prohibited)
int concurrentKernels 一个布尔值,表示设备是否支持在同一个环境中同时执行多个核函数
int concurrentManagedAccess 一个布尔值,表示设备是否能在CPU管理内存的同时访问他们
int deviceOverlap 一个布尔值,表示设备是否可以同时执行一个cudaMemory()调用和一个核函数调用
int globalL1CacheSupported 一个布尔值,表示设备是否支持L1全局高速缓存
int hostNativeAtomicSupported 一个布尔值,表示设备与主机之间的连接是否支持本地原子操作
int integrated 一个布尔值,表示设备是否是一个集成GPU(即该GPU属于芯片组的一部分而非独立的GPU)
int isMultiGpuBoard 一个布尔值,表示设备是否在多GPU板上
int kernelExecTimeoutEnabled 一个布尔值,表示在该设备上执行的核函数是否存在运行时限制
int l2CacheSize L2高速缓存的大小,单位为字节
int localL1CacheSupported 一个布尔值,表示设备是否支持L1本地高速缓存
int major 设备计算功能集(Compute Capability)的主版本号
int managedMemory 一个布尔值,表示设备是否支持分配该系统上的管理内存
int maxGridSize[3] 在一个线程格(Grid)中,每一维可以包含的线程块数量
int maxSurface1D 一维表面的最大大小
int maxSurface1DLayered[2] 一维层表面的最大维数
int maxSurface2D[2] 二维表面的最大维数
int maxSurface2DLayered[3] 二维层表面的最大维数
int maxSurface3D[3] 三维表面的最大维数
int maxSurfaceCubemap 立方体映射表面的最大维数
int maxSurfaceCubemapLayered[2] 立方体映射层表面的最大维数
int maxTexture1D 一维纹理的最大大小
int maxTexture1DLayered[2] 一维层纹理的最大维数
int maxTexture1DLinear 线性存储器约束的一维纹理的最大大小
int maxTexture1DMipmap 一维mipmapped纹理的最大大小
int maxTexture2D[2] 二维纹理的最大维数
int maxTexture2DGather[2] 二维纹理的最大维数(如果执行纹理集合操作)
int maxTexture2DLayered[3] 二维层纹理的最大维数
int maxTexture2DLinear[3] 修正存储器约束的二维纹理的最大维数(宽度,高度,修正量)
int maxTexture2DMipmap[2] 二维mipmapped纹理的最大维数
int maxTexture3D[3] 三维纹理的最大维数
int maxTexture3DAlt[3] 交互三维纹理的最大维数
int maxTextureCubemap 立方体映射纹理的最大维数
int maxTextureCubemapLayered[2] 立方体映射层纹理的最大维数
int maxThreadsDim[3] 在多维线程块数组中,每一维可以包含的最大线程数量
int maxThreadsPerBlock 在一个线程块中可以包含的最大线程数量
int maxThreadsPerMultiProcessor 在一个多处理器中可以包含的最大线程数量
size_t memPitch 在内存复制中最大的修正量(Pitch),单位为字节
int memoryBusWidth 全局内存总线带宽,单位为位
int memoryClockRate 顶点内存每千赫的时钟频率
int minor 设备计算功能集的次版本号
int multiGpuBoardGroupID 在同一多GPU板上一组设备的唯一标识
int multiProcessorCount 设备上多处理器的数量
char name[256] 标识设备的ASCII字符串
int pageableMemoryAccess 在不调用其上的cudaHostRegister的情况下,设备是否支持访问页式内存
int pciBusID 设备的PCI总线ID
int pciDeviceID 设备的PCI设备ID
int pciDomainID 设备的PCI域ID
int regsPerBlock 每个线程块中可用的32位寄存器数量
int regsPerMultiprocessor 每个多处理器中可用的32位寄存器数量
size_t sharedMemPerBlock 在一个线程块(Block)中可使用的最大共享内存数量,单位为字节
size_t sharedMemPerMultiprocessor 在一个多处理器(Multiprocessor)中可使用的最大共享内存数量,单位为字节
int singleToDoublePrecisionPerfRatio 单精度性能(每秒浮点操作)与双精度性能的比值
int streamPrioritiesSupported 一个布尔值,表示设备是否支持流优先级
size_t surfaceAlignment 设备的表面对齐要求
int tccDriver 一个布尔值,1代表设备是使用TCC驱动的Tesla设备,0代表其它
size_t textureAlignment 设备的纹理对齐(Texture Alignment)要求
size_t texturePitchAlignment 设备根据内存复制中最大修正量修正的纹理对齐要求
size_t totalConstMem 常量内存的总量
size_t totalGlobalMem 设备上全局内存的总量,单位为字节
int unifiedAddressing 表示设备是否和主机共享统一的地址空间
int warpSize 在一个线程束(Warp)中包含的线程数量
几个函数:
__host__ __device__ cudaError_t cudaGetDevice ( int* device )返回当前正在使用的设备号
__host__ __device__ cudaError_t cudaGetDeviceCount ( int* count )返回有计算功能的设备数量
__host__ cudaError_t cudaChooseDevice ( int* device, const cudaDeviceProp* prop )选择最符合标准的计算设备
__host__ cudaError_t cudaGetDeviceProperties ( cudaDeviceProp* prop, int device )返回计算设备的信息
__host__ cudaError_t cudaSetDevice ( int device )设置GPU可执行程序使用的设备
一个小的demo,输出一些GPU的属性信息:
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 execution 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.regsPerBlock );
printf( "Threads in warp: %d\n", prop.warpSize );
printf( "Max threads per block: %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" );
}
}
更多细节参见:http://docs.nvidia.com/cuda/cuda-runtime-api/structcudaDeviceProp.html#axzz4kWODHrub(5.3)