我的GPU是能力2.1的,用2個SM的居民塊的最大數量,並且每個SM的塊的最大數目有48個核。根據CUDA-C編程指南中提供的技術規範,網格的最大塊數爲65535,每個多處理器的最大駐留塊數爲8.GPU/CUDA:一個網格和每個多處理器
我很困惑我可以啓動多少塊。如果每個SM的塊數最多爲8,那麼這是否意味着如果只有2個SM,我最多可以啓動16個塊?但我成功推出了更多的塊。
也許有喜歡的活動塊和不活動塊這樣的事情?如果這是事實,那麼這些塊如何安排?非活動狀態是否等待全部8個活動塊完成?但是,這帶來了同步問題...
一些更多的問題......如果有48個內核每個SM,則可以有3個在同一時間執行一半的經線。但共享內存只有32家銀行。如果兩個線程同時嘗試從同一個波段讀取,即使它們屬於不同的半變形,它們也不會產生銀行衝突嗎?
「他們可以不按順序處理」是否意味着也必須保存在SM的背景和資源(即,共享存儲器和寄存器)非活動塊? – night
我無法解釋這些事情是如何在內部實現的。我的教育猜測是,如果共享內存/寄存器使用率存在壓力,切換會更加保守。 –
@Pavan計算能力1.0 - 3.0確定性順序的進程塊(因架構而異)。計算能力3.x支持CUDA Dynamic Parallelism(CDP)的亂序處理。 CDP確實需要額外的內存分配來保存塊狀態,以便允許子內核的正向進度。 –