为什么我的Compute Capability 2.0 GPU上的每个多处理器1536的Max Threads?

时间:2017-05-10 16:13:49

标签: cuda gpu fermi

在我的GPU上,使用Compute Capability 2.0,每个多处理器的最大线程数是1536.为什么它不是2的幂?

以下是我的GPU的一些细节:

Physical Limits for GPU Compute Capability: 2.0   
Threads per Warp                            32  
Max Warps per Multiprocessor                48  
Max Thread Blocks per Multiprocessor        8  
Max Threads per Multiprocessor              1536  
Maximum Thread Block Size                   1024  
Registers per Multiprocessor                32768  
Max Registers per Thread Block              32768  
Max Registers per Thread                    63  
Shared Memory per Multiprocessor (bytes)    16384  
Max Shared Memory per Block                 16384  
Register allocation unit size               64  
Register allocation granularity             warp  
Shared Memory allocation unit size          128  
Warp allocation granularity                 2  

1 个答案:

答案 0 :(得分:5)

Threads per Warp x Max Warps per Multiprocessor = Max Threads per Multiprocessor

32 x 48 = 1536

Max Warps per Multiprocessor实际上代表Maximum number of **resident** warps per multiprocessorMax Threads per Multiprocessor代表Maximum number of **resident** threads per multiprocessor

检查this。在表14中,您将看到上述规则适用于每个计算功能。

数字1536表示每个多处理器(在cuda中称为 SM Streaming Processor )最多可以有1536个活动线程。这并不意味着您只能启动1536个线程。您可以在调用CUDA内核时启动超过1536个线程,但每个SM只能包含1536个线程。此外,这并不意味着1536个线程同时在物理上执行 Warp 是执行的单位,在今天的所有CUDA中都是32个。

以下引用来自here

  

相比之下,CUDA设备上最小的并行可执行单元包括32个线程(称为线程扭曲)。现代NVIDIA GPU每个多处理器可以同时支持多达1536个活动线程(参见CUDA C编程指南的特性和规格)在具有16个多处理器的GPU上,这会产生超过24,000个并发活动线程。

修改

另外一个问题是:

  

你能否强调为什么每个多处理器的Max Warps为48而不是2的幂(因为内核数和寄存器大小= 65536字节都是2的幂)?

每个SM的核心数量并不总是2的幂。此外, CPU核心 CUDA核心之间存在一些细微差别。以计算能力3.x为例(link)。

  

多处理器包括:

     
      
  • 用于算术运算的192个CUDA核心,
  •   
  • 32个用于单精度浮点超越函数的特殊功能单元,
  •   
  • 4个warp调度程序。
  •   

如您所见,CUDA核心的数量(192)不是2的幂,而CPU核心是通用的,CUDA核心不执行单精度浮点超越函数。这些操作由其他一些特殊功能单元处理。检查this

此外,在您的问题中,它说Registers per Multiprocessor是32K。这意味着每个SM有32K 32位寄存器。因此总寄存器大小为128KB。

考虑到所有这一切,我认为Max Warps per Multiprocessor没有理由成为2的力量。