首页 文章

CUDA:总共有多少并发线程?

提问于
浏览
41

我有一个GeForce GTX 580,我想说明可以(理想情况下)实际并行运行的线程总数,以便与2或4个多核CPU进行比较 .

deviceQuery为我提供了以下可能的相关信息:

CUDA Capability Major/Minor version number:    2.0
(16) Multiprocessors x (32) CUDA Cores/MP:     512 CUDA 
Maximum number of threads per block:           1024

我想我听说每个CUDA核心都可以并行运行warp,并且warp是32个线程 . 说卡可以并行运行512 * 32 = 16384个线程,或者我离开了,CUDA内核是不是真的并行运行?

3 回答

  • 0

    GTX 580可以同时运行16 * 48个并发warp(每个32个线程) . 那就是16个多处理器(SM)* 48个驻留warp每个SM * 32个线程每个warp = 24,576个线程 .

    不要混淆并发和吞吐量 . 上面的数字是其资源可以同时存储在芯片上的最大线程数 - 可以驻留的数量 . 在CUDA术语中,我们也将此称为最大占用率 . 硬件在warp之间不断切换,以帮助覆盖或(16)内存访问的(大)延迟以及算术流水线的(小)延迟 .

    虽然每个SM可以有48个常驻warp,但它只能在每个时钟周期发出一小部分指令(GTX 580的平均值介于1和2之间,但这取决于程序指令组合) .

    因此,您可能最好比较吞吐量,这是由可用的执行单元以及硬件如何执行多个问题决定的 . 在GTX580上,有512个FMA执行单元,但也有整数单元,特殊功能单元,存储器指令单元等,它们可以以各种组合双重发布(即同时发出来自2个经线的独立指令) .

    考虑到以上所有因素太难了,所以大多数人都会对两个指标进行比较:

    • 峰值GFLOP / s(GTX 580为512 FMA单位每个FMA 2个触发 1544e6个周期/秒= 1581.1 GFLOP / s(单精度))

    • 您感兴趣的应用程序的测量吞吐量 .

    最重要的比较总是在实际应用中测量挂钟时间 .

  • 9

    通过与2核或4核CPU进行比较,您可以陷入某些陷阱:

    • 并发线程数与实际并行运行的线程数不匹配 . 当然,您可以在GTX 580上同时启动24576个线程,但最佳值在大多数情况下会降低 .

    • 2或4核CPU可以拥有任意多个并发线程!与GPU类似,从某些方面添加更多线程无济于事,甚至可能会减慢速度 .

    • “CUDA核心”是单个标量处理单元,而CPU核心通常是更大的东西,包含例如4宽SIMD单元 . 要比较苹果与苹果,您应该将公布的CPU核心数乘以4以匹配NVIDIA称之为核心的数据 .

    • CPU支持超线程,它允许单个内核以轻微的方式同时处理2个线程 . 因此,操作系统实际上可能会看到比硬件核心多2倍的“逻辑核心” .

    总结一下:为了公平比较,由于SIMD和超线程,你的4核CPU实际上可以同时运行32个“标量线程” .

  • 57

    我意识到这有点晚了但我觉得无论如何我都会帮忙 . 从第10页开始,CUDA Fermi架构白皮书:

    每个SM都有两个warp调度程序和两个指令调度单元,允许同时发出和执行两个warp .

    对我来说,这意味着每个SM可以同时运行2 * 32 = 64个线程 . 我不知道这是否意味着GPU可以同时运行16 * 64 = 1024个线程 .

相关问题