2013-07-15 27 views
1

我的GPU是能力2.1的,用2個SM的居民塊的最大數量,並且每個SM的塊的最大數目有48個核。根據CUDA-C編程指南中提供的技術規範,網格的最大塊數爲65535,每個多處理器的最大駐留塊數爲8.GPU/CUDA:一個網格和每個多處理器

我很困惑我可以啓動多少塊。如果每個SM的塊數最多爲8,那麼這是否意味着如果只有2個SM,我最多可以啓動16個塊?但我成功推出了更多的塊。

也許有喜歡的活動塊和不活動塊這樣的事情?如果這是事實,那麼這些塊如何安排?非活動狀態是否等待全部8個活動塊完成?但是,這帶來了同步問題...


一些更多的問題......如果有48個內核每個SM,則可以有3個在同一時間執行一半的經線。但共享內存只有32家銀行。如果兩個線程同時嘗試從同一個波段讀取,即使它們屬於不同的半變形,它們也不會產生銀行衝突嗎?

回答

1

根據CUDA-C編程指南中規定的技術規範,網格塊的最大數量是65535,而每多塊居住的最大數目是8個

我感到困惑多少我可以啓動的塊。如果每個SM的塊數最多爲8,那麼這是否意味着如果只有2個SM,我最多可以啓動16個塊?

塊的最大數量(網格中的每個維度)是CUDA調度程序可以處理的限制。除最近的Kepler GPU之外,每個維度的限制是65535。

實際上活動的塊的數量依賴於很多東西。每個SM可以啓動的塊的數量有一個嚴格的限制,但如果每塊使用大量的共享內存,寄存器或線程,則數量也可能更小。

調度切換出不活動塊(被拖延各種原因即塊)和交換機中活躍的。啓動大量的區塊比實際上可能使SMs儘可能活躍。

但是,這帶來了同步問題...

不要假設CUDA塊才能啓動。它們可以按順序處理,唯一的同步點是在主機上完成內核和cudaDeviceSynchronize

+0

「他們可以不按順序處理」是否意味着也必須保存在SM的背景和資源(即,共享存儲器和寄存器)非活動塊? – night

+0

我無法解釋這些事情是如何在內部實現的。我的教育猜測是,如果共享內存/寄存器使用率存在壓力,切換會更加保守。 –

+1

@Pavan計算能力1.0 - 3.0確定性順序的進程塊(因架構而異)。計算能力3.x支持CUDA Dynamic Parallelism(CDP)的亂序處理。 CDP確實需要額外的內存分配來保存塊狀態,以便允許子內核的正向進度。 –