我说的是具有计算能力 3.5 (GK110) 的 nvidia GPU:
在每个 GPU 核心上,最多有 64 个活动 warp,硬件如何处理 warp 退休?来自不同网格块的扭曲甚至流可以在 GPU 的单个核心上同时工作(核心是指多处理器,因为它们本质上是多核 GPU 的核心)?
一个核心能否从一个流中快速退出已完成的经纱并将其他经纱从其他流加载到同一个核心?
我之所以问这个问题是因为要做出艰难的决定:
(1) 我可以编写代码来从不同的流中启动多个线程,大约 2/3 启动的 warp 基本上什么都不做,并且很快就会退休。
或者:
(2) 我可以编写代码来准确启动所需的线程数,但是每个线程都将包含非常繁重的索引计算(通过求解多个索引方程,仅计算正确索引所涉及的计算量将与, 如果不是更多, (1)) 中的实际计算。
因此,如果 GK110 可以快速退出空经纱并用新经纱替换它们,那么(1)将优于(2),因为它可以完全避免不必要的索引计算。
到目前为止,琐碎的案例测试显示这两个作品大致相同,但我不确定(1)在非琐碎案例中是否会更好。