CUDA小记(5)something before programming(二)

本文介绍了CUDA设备属性表cudaDeviceProp的详细信息,包括各种设备特性参数及其含义,并提供了查询GPU属性信息的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

补充一下上一节cudaerror的内容,详细信息参考:

http://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__TYPES.html#group__CUDART__TYPES_1g3f51e3575c2178246db0a94a430e0038(4.31)


如何查询设备信息
一个数据结构:
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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值