我有關於以下問題的查詢:CUDA warp大小和控制發散
假設,我們有一個9×7的畫面(7個像素在x方向上和在y方向上的9個像素),多少經線將有控制背離假設4 * 4線程和每個warp 8線程塊?
塊和經紗在這裏將如何組織? x或水平方向,我可以假設每行2塊。類似地, 垂直方向,每塊3塊。但是,經線是如何組織的?有人可以指出經紗的線程ID以及發生控制分歧的情況(Thread ID等)。
感謝
我有關於以下問題的查詢:CUDA warp大小和控制發散
假設,我們有一個9×7的畫面(7個像素在x方向上和在y方向上的9個像素),多少經線將有控制背離假設4 * 4線程和每個warp 8線程塊?
塊和經紗在這裏將如何組織? x或水平方向,我可以假設每行2塊。類似地, 垂直方向,每塊3塊。但是,經線是如何組織的?有人可以指出經紗的線程ID以及發生控制分歧的情況(Thread ID等)。
感謝
假設,我們有一個9×7的畫面(7個像素在x方向上和在y方向上的9個像素),許多經紗將如何具有4×4級的線程控制發散假設塊每個warp有8個線程?
塊和經紗在這裏將如何組織?對於x或水平方向,我可以假設每行有2個塊。類似地,對於垂直方向,每列有3個塊。但是,如何組織經紗?
我會堅持你的榜樣,並嘗試提供線程ID,塊ID,變形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
----------------------------------------------------------------------------
並且其中控制發散發生的情況下(線程ID等的那些)
如上所述,發散作爲代碼的屬性,而不是線程的佈局,這個問題不能沒有代碼回答。
首先。非常感謝你的圖表。 (由於<15的聲望,我無法投票)。現在,我選擇了這個小尺寸(我知道這是不實用的),這樣就可以很容易地說明,如果有人會繪製圖表,就像您一樣。另外,對於行0(例如)和線程ID 4-6,假設BlockIdx.x,BlockIdx.y表示法以及水平x和垂直y,blockID將不是(1,0)嗎? – user915783 2015-01-27 06:45:51
我使用線性符號,因爲它比(x,y)更容易表示,並且更容易看出它們分配了哪些翹曲。但是這是一種雙射:任何線性索引'i'都可以用'(x,y)'表示,反之亦然,使用'i = x + y * xDim'和'(x = i%xDim,y = i/xDim)'。因此,對於線程4-6,它們的座標是(1,0)和(1,2),在塊0中(因爲您沒有指定柵格暗淡而沒有座標)。 – 2015-01-27 07:24:22
這個問題的整個前提是有缺陷的。在cuda中的經紗尺寸*總是* 32. – talonmies 2015-01-27 10:13:44