cuda warp 大小和控制发散

cuda warp size and control divergence

我对以下问题有疑问:

假设,我们有一张 9*7 的图片(x 方向 7 个像素,y 方向 9 个像素),假设 4*4 个线程块和每个 warp 8 个线程,多少个 warp 会有控制发散?

这里的块和经线将如何组织? 对于 x 或水平方向,我可以假设每个 row.Similarly 有 2 个块, 对于垂直方向,每列 3 个块。 但是,经线将如何组织?有人可以指出 warps 的线程 ID,以及发生控制分歧的情况(线程 ID 等)。

谢谢

Suppose, we have a 9*7 picture (7 pixels in the x direction and 9 pixels in the y direction), how many warps will have control divergence assuming block of 4*4 threads and 8 threads per warp?

  1. 分歧是 程序 (代码)的 属性,而不是 block/warp 布局本身。如果您的算法在图像中的所有像素上都以相同的方式运行,那么无论线程的数量及其组织如何,都不会出现任何差异。如果您的算法在扭曲边界上分支,则也不会有分歧。因此,在没有看到您的代码的情况下,您的问题在技术上是无法回答的。
  2. 如果您是 运行 一个包含 16 个线程和每个 warp 8 个线程的块(在 CUDA 硬件上物理上不可能:warp 由 32 个线程组成并且它们的大小不可配置)那么你还不如 ​​运行 根本没有 GPU。这些数字 太小,无法从任何硬件加速中获益。

How will the blocks and warps be organized here? for x or horizontal direction, i can assume 2 blocks per row.Similarly, for vertical direction, 3 blocks per column. But, How will the warps are organized?

我将坚持使用您的示例并尝试提供线程 ID、块 ID、warp ID 的架构。请记住,这种布局实际上在 CUDA 硬件上是不可能的。

Image     Global Thread IDs      Block IDs              Local Thread IDs
□□□□□□□ | 00 01 02 03 04 05 06 | 00 00 00 00 00 00 00 | 00 01 02 03 04 05 06
□□□□□□□ | 07 08 09 10 11 12 13 | 00 00 00 00 00 00 00 | 07 08 09 10 11 12 13
□□□□□□□ | 14 15 16 17 18 19 20 | 00 00 01 01 01 01 01 | 14 15 00 01 02 03 04
□□□□□□□ | 21 22 23 24 25 26 27 | 01 01 01 01 01 01 01 | 05 06 07 08 09 10 11
□□□□□□□ | 28 29 30 31 32 33 34 | 01 01 01 01 02 02 02 | 12 13 14 15 00 01 02
□□□□□□□ | 35 36 37 38 39 40 41 | 02 02 02 02 02 02 02 | 03 04 05 06 07 08 09
□□□□□□□ | 42 43 44 45 46 47 48 | 02 02 02 02 02 02 03 | 10 11 12 13 14 15 00
□□□□□□□ | 49 50 51 52 53 54 55 | 03 03 03 03 03 03 03 | 01 02 03 04 05 06 07
□□□□□□□ | 56 57 58 59 60 61 62 | 03 03 03 03 03 03 03 | 08 09 10 11 12 13 14
----------------------------------------------------------------------------
Image     Global Warp IDs        Block IDs              Local Warp IDs
□□□□□□□ | 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00
□□□□□□□ | 00 01 01 01 01 01 01 | 00 00 00 00 00 00 00 | 00 01 01 01 01 01 01
□□□□□□□ | 01 01 02 02 02 02 02 | 00 00 01 01 01 01 01 | 01 01 00 00 00 00 00
□□□□□□□ | 02 02 02 03 03 03 03 | 01 01 01 01 01 01 01 | 00 00 00 01 01 01 01
□□□□□□□ | 03 03 03 03 04 04 04 | 01 01 01 01 02 02 02 | 01 01 01 01 00 00 00
□□□□□□□ | 04 04 04 04 04 05 05 | 02 02 02 02 02 02 02 | 00 00 00 00 00 01 01
□□□□□□□ | 05 05 05 05 05 05 06 | 02 02 02 02 02 02 03 | 01 01 01 01 01 01 00
□□□□□□□ | 06 06 06 06 06 06 06 | 03 03 03 03 03 03 03 | 00 00 00 00 00 00 00
□□□□□□□ | 07 07 07 07 07 07 07 | 03 03 03 03 03 03 03 | 01 01 01 01 01 01 01
----------------------------------------------------------------------------

and the cases where control divergence happens(Thread ids etc for those)

如前所述,发散是属性代码而不是线程布局,没有代码无法回答这个问题。