在我的GPU上,使用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 发布于 2017-05-10 16:22:56
Threads per Warp x Max Warps per Multiprocessor = Max Threads per Multiprocessor
32x48= 1536
Max Warps per Multiprocessor实际上是Maximum number of **resident** warps per multiprocessor的意思,Max Threads per Multiprocessor是Maximum number of **resident** threads per multiprocessor。
看看这。在表14中,您将看到上述规则适用于每个计算能力。
数字1536意味着每个多处理器(cuda中的流式处理器称为SM )最多可以有1536个活动线程。这并不意味着您只能启动1536个线程。您可以在调用CUDA内核时启动超过1536个线程,但是每个SM只能包含1536个线程。而且,这并不意味着1536个线程同时在物理上执行。Warp是执行的单位,到目前为止,在各代数据自动化系统中是32种。
以下是来自这里的引文。
相比之下,CUDA设备上最小的并行执行单元包括32个线程(称为线程的翘曲)。现代NVIDIA GPU可以在有16个多处理器的GPU上同时支持每个多处理器最多1536个活动线程(见CUDA C编程指南的特性和规范),这将导致24,000多个并发活动线程。
编辑
另一个问题是:
你还能强调为什么每个多处理器的最大翘曲数是48而不是2(因为核数和寄存器大小= 65536字节都是2的幂)?
每个SM的核数并不总是2的幂。此外,CPU核心和CUDA核心之间也有一些细微的区别。以具有计算能力3.x的设备为例(链接)。
多处理器包括:
正如您所看到的,CUDA核(192)的数量不是2的幂,而CPU核是通用的,而CUDA核不执行单精度浮点超越功能。这些操作由其他一些特殊职能单位处理。看看这。
而且,在你的问题中,它说Registers per Multiprocessor是32K。这意味着每SM有32K 32位寄存器。所以总寄存器大小是128 is。
考虑到这一切,我认为Max Warps per Multiprocessor没有理由成为2的力量。
https://stackoverflow.com/questions/43897824
复制相似问题