2

我说的是具有计算能力 3.5 (GK110) 的 nvidia GPU:

在每个 GPU 核心上,最多有 64 个活动 warp,硬件如何处理 warp 退休?来自不同网格块的扭曲甚至流可以在 GPU 的单个核心上同时工作(核心是指多处理器,因为它们本质上是多核 GPU 的核心)?

一个核心能否从一个流中快速退出已完成的经纱并将其他经纱从其他流加载到同一个核心?

我之所以问这个问题是因为要做出艰难的决定:

(1) 我可以编写代码来从不同的流中启动多个线程,大约 2/3 启动的 warp 基本上什么都不做,并且很快就会退休。

或者:

(2) 我可以编写代码来准确启动所需的线程数,但是每个线程都将包含非常繁重的索引计算(通过求解多个索引方程,仅计算正确索引所涉及的计算量将与, 如果不是更多, (1)) 中的实际计算。

因此,如果 GK110 可以快速退出空经纱并用新经纱替换它们,那么(1)将优于(2),因为它可以完全避免不必要的索引计算。

到目前为止,琐碎的案例测试显示这两个作品大致相同,但我不确定(1)在非琐碎案例中是否会更好。

4

1 回答 1

2

在每个 GPU 核心上,最多有 64 个活动 warp。硬件如何处理 warp 退役?来自不同网格块甚至流的扭曲能否在 GPU 的单个核心上同时工作(核心是指多处理器,因为它们本质上是多核 GPU 的核心)?

是的,来自不同线程块的扭曲可以共同驻留并准备在单个 SM 上执行。这些不同的线程块可能来自相同的内核或不同的内核,来自不同的流。此处描述了来自不同内核的线程块并发执行。

一个核心能否从一个流中快速退出已完成的经线,并将其他流中的其他经线加载到同一个核心?

是的。工作分工首先由 threadblock 处理,然后再分配 warp。首先在 SM 上安排一个线程块,然后选择要执行的 warp 的过程。只要 SM 上有可用的线程块插槽(并且没有其他调度限制,例如共享内存或寄存器使用),任何可用内核的新线程块都可以在 cc 3.5 SM 上调度。

于 2013-03-11T04:06:59.290 回答