设备属性
在 CUDA 编程中,我们可以了解和使用 GPU 的设备属性。这些属性提供了关于 CUDA 设备的详细属性,允许开发者根据设备的能力优化程序。
我们直接看到代码清单 1,了解如何查询设备属性。
cudaGetDeviceCount 函数用于获取系统中可用 CUDA 设备的数量。count 参数返回可用 CUDA 设备的数量。
- cudaError_t cudaGetDeviceCount(int* count);
cudaGetDeviceProperties 函数用于查询某个 CUDA 设备的详细属性。device 参数,指定要查询设备的索引号,从 0 开始计数。prop 参数是 cudaDeviceProp 结构体指针,里面包含了各种设备属性。
- cudaError_t cudaGetDeviceProperties(struct cudaDeviceProp *prop, int device);
我们了解以下几个重要且常用的属性:
1. name:表示 CUDA 设备的名称,是一个字符串。
2. multiProcessorCount:表示 GPU 设备上多处理器的数量。每个多处理器是一组能够执行并行操作的核心。
3. clockRate:表示 GPU 的核心时钟频率。
4. major/minor:表示 GPU 的主版本号和次版本号。这两者指示了 GPU 的计算能力。
5. totalGlobalMem:表示 GPU 全局内存的大小,单位是字节。全局内存是指 GPU 的主内存,所有的线程都可以访问,但访问速度比寄存器和共享内存慢。
6. totalConstMem:表示 GPU 常量内存的大小,单位是字节。常量内存是只读的,所以多个线程访问它时,会非常快。
7. sharedMemPerBlock:表示每个块上可用的共享内存大小,单位是字节。共享内存提供了比全局内存更快的访问速度,它在同一个块中的所有线程之间是共享的。
8. sharedMemPerMultiprocessor:表示每个处理器上可用的共享内存大小,单位是字节。它被同一个多处理器上的所有线程块共享。
9. regsPerBlock:表示每个块可用的寄存器总数。
10. warpSize:表示一个 warp 的大小,即 GPU 上并行执行的线程数。
11. maxThreadsPerBlock:表示每个块中可以包含的最大线程数。
12. maxThreadsPerMultiProcessor:表示每个处理器可以同时支持的最大线程数。
13. maxGridSize:表示每个网格各个维度上可以达到的最大尺寸。
14. maxThreadsDim:表示每个块在各个维度上可以包含的最大线程数。
我本机设备打印的内容如下:
- Device 0: NVIDIA GeForce RTX 2060 SUPER
- Number of multiprocessors: 34
- Clock rate: 1815000
- Compute capability: 7.5
- Total amount of global memory: 8388160.00 KB
- Total amount of constant memory: 64.00 KB
- Total amount of shared memory per block: 48.00 KB
- Total amount of shared memory per MP: 64.00 KB
- Total amount of registers available per block: 65536
- Warp size: 32
- Maximum number of threads per block: 1024
- Maximum number of threads per multiprocessor: 1024
- Maximum number of warps per multiprocessor: 32
- Maximum grid size: (2147483647,65535,65535)
- Maximum block dimension: (1024,1024,64)