cuda warp size and control divergence

use*_*783 2 cuda gpu-warp

我有关于以下问题的查询:

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

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

谢谢

use*_*016 7

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

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

这里如何组织块和经线?对于x或水平方向,我可以假设每行2个块.类似地,对于垂直方向,每列3个块.但是,经线将如何组织?

我将坚持你的例子并尝试提供线程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
----------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

和发生控制分歧的情况(线程ids等)

如上所述,分歧是代码的属性而不是线程布局,没有代码就无法回答这个问题.