Cuda 为什么在我的Compute Capability 2.0 GPU上每个多处理器的最大线程数是1536?

Cuda 为什么在我的Compute Capability 2.0 GPU上每个多处理器的最大线程数是1536?,cuda,gpu,fermi,Cuda,Gpu,Fermi,在我的GPU上,计算能力为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

在我的GPU上,计算能力为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  

每个扭曲的线程数
x
每个多处理器的最大扭曲数
=
每个多处理器的最大线程数

32 x 48=1536

Max Warps per multi-processor
实际上意味着
每个多处理器**驻留**Warps的最大数量
,而
Max Threads per multi-processor
每个多处理器**驻留**线程的最大数量

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

数字1536意味着每个多处理器(对于cuda中的流处理器称为SM)最多可以有1536个活动线程。这并不意味着只能启动1536个线程。在对CUDA内核的一次调用中可以启动1536个以上的线程,但每个SM只能包含1536个线程。而且,这并不意味着1536个线程同时在物理上执行Warp是执行单位,迄今为止,CUDA的所有代中都有32个执行单位

以下引用自

相比之下,CUDA设备上最小的可执行并行单元包含32个线程(称为线程扭曲)。现代NVIDIA GPU在具有16个多处理器的GPU上,每个多处理器可同时支持多达1536个活动线程(请参阅《CUDA C编程指南》的功能和规范),这将导致超过24000个并发活动线程


编辑

另一个问题是:

您还可以强调一下为什么每个多处理器的最大扭曲数是48而不是2的幂(因为内核数和寄存器大小=65536字节都是2的幂)

每个SM的内核数并不总是2的幂。CPU内核和CUDA内核之间也有一些细微的区别。以具有计算能力3.x的设备为例()

多处理器包括:

  • 192个用于算术运算的CUDA核
  • 32个用于单精度浮点超越函数的特殊函数单元
  • 4个warp调度程序
如您所见,CUDA内核(
192
)的数量不是2的幂,而CPU内核是通用的,CUDA内核不执行单精度浮点超越函数。这些操作由其他一些特殊功能单元处理。退房

另外,在你的问题中,它说每个多处理器的寄存器数是32K。这意味着每个SM有32K 32位寄存器。因此,总寄存器大小为128KB


考虑到所有这些,我不认为每个多处理器的
最大扭曲数是2的幂。

每个扭曲数
x
每个多处理器的最大扭曲数
=
每个多处理器的最大线程数

32 x 48=1536

Max Warps per multi-processor
实际上意味着
每个多处理器**驻留**Warps的最大数量
,而
Max Threads per multi-processor
每个多处理器**驻留**线程的最大数量

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

数字1536意味着每个多处理器(对于cuda中的流处理器称为SM)最多可以有1536个活动线程。这并不意味着只能启动1536个线程。在对CUDA内核的一次调用中可以启动1536个以上的线程,但每个SM只能包含1536个线程。而且,这并不意味着1536个线程同时在物理上执行Warp是执行单位,迄今为止,CUDA的所有代中都有32个执行单位

以下引用自

相比之下,CUDA设备上最小的可执行并行单元包含32个线程(称为线程扭曲)。现代NVIDIA GPU在具有16个多处理器的GPU上,每个多处理器可同时支持多达1536个活动线程(请参阅《CUDA C编程指南》的功能和规范),这将导致超过24000个并发活动线程


编辑

另一个问题是:

您还可以强调一下为什么每个多处理器的最大扭曲数是48而不是2的幂(因为内核数和寄存器大小=65536字节都是2的幂)

每个SM的内核数并不总是2的幂。CPU内核和CUDA内核之间也有一些细微的区别。以具有计算能力3.x的设备为例()

多处理器包括:

  • 192个用于算术运算的CUDA核
  • 32个用于单精度浮点超越函数的特殊函数单元
  • 4个warp调度程序
如您所见,CUDA内核(
192
)的数量不是2的幂,而CPU内核是通用的,CUDA内核不执行单精度浮点超越函数。这些操作由其他一些特殊功能单元处理。退房

另外,在你的问题中,它说每个多处理器的寄存器数是32K。这意味着每个SM有32K 32位寄存器。因此,总寄存器大小为128KB


考虑到所有这些,我不认为每个多处理器的
最大扭曲数是2的幂。

Devngle已经这样做了。顺便说一句,2.x是费米而不是麦克斯韦…我不明白你从哪里得到的256…这对我来说似乎也有点武断。他可能只是想说明它不是2的幂。@Shadow:是的,我的意思正是你提到的。devngle已经说过了。顺便说一句,2.x是费米而不是麦克斯韦…我不明白你从哪里得到的256…看起来