【发布时间】:2015-12-27 14:59:56
【问题描述】:
根据我对 Kepler GPU 和一般 CUDA 的了解,当单个 SMX 单元在块上工作时,它会启动由 32 个线程组成的 warp。现在这是我的问题:
1) 如果 SMX 单元可以在 64 个 warp 上工作,这意味着每个 SMX 单元有 32x64 = 2048 个线程的限制。但是 Kepler GPU 有 4 个 warp 调度器,那么这是否意味着在一个 GPU 内核中只能同时处理 4 个 warp?如果是这样,这是否意味着我真的应该寻找具有 128 个线程的倍数的块(假设线程没有分歧)而不是推荐的 32 个?当然,这会忽略任何分歧,甚至忽略全局内存访问之类的情况会导致 warp 停止并让调度程序切换到另一个的情况。
2) 如果以上是正确的,那么单个 SMX 单元同时在 128 个线程上工作的最佳结果是什么?对于具有 14 个 SMX 单元的 GTX Titan 之类的东西,总共 128x14 = 1792 个线程?我看到网上的数字不是这样的。 Titan 可以同时运行 14x64(每个 SMX 的最大扭曲)x32(每个 SMX 的线程)= 28,672。 SMX 单元怎么会启动 warp,并且只有 4 个 warp 调度程序?他们不能一次启动每个 SMX 的所有 2048 个线程吗?也许我对 GPU 可以同时启动的最大线程数的定义感到困惑,你可以排队吗?
感谢您对此的回答和澄清。
【问题讨论】:
-
您的编程相关工作在哪里?