2013-09-29 76 views
2

我有一個NVIDIA GT650M,具有以下屬性:CUDA |多處理器數量的利息 - 與SMS混亂

(2) Multiprocessors, (192) CUDA Cores/MP:  384 CUDA Cores 
Maximum number of threads per multiprocessor: 2048 

我只是來流多處理器(SM),與實際的多處理器之間的混亂了。 SM和多處理器是不同的東西,對吧? 例如,使用可視化剖析器,我得到一個虛擬內核,只有在1個線程的1個塊啓動時纔會等待並持續370ms。 我可以用一個SM的4個1024線程塊啓動它,它仍然可以持續370ms。這是正常的,因爲任務使用2個芯片的多處理器,每個處理器使用2048個併發線程(只要我使用5個塊×1024,需要740ms,正常)。 同樣,我可以使用4個SM同時啓動4個1024個線程的一個塊,它仍然需要370ms,好。

問題的第一部分只是爲了確定我們不應該混淆SM和多處理器?就像我在有些時候甚至在這裏看到的答案一樣:CUDA - Multiprocessors, Warp size and Maximum Threads Per Block: What is the exact relationship? 因此,不能明確地控制通過多處理器調度任務的方式,因爲(據我所知)沒有運行時功能允許它正確嗎?所以,如果我有一個卡,每個多處理器有2個多處理器和2048個線程,或者另一個有4個多處理器,每個處理器有1024個線程,那麼給定的程序將以相同的方式執行?

其次,我想知道哪種用法更好,擁有更少的內核的多處理器或相反?到目前爲止,我的理解讓我說,使用少量內核的更多多處理器(對於每個多處理器的給定最大線程)將更適合於具有較少/簡單操作的更大規模並行性,而每個多處理器具有更多內核(現在我正在討論我幾乎不知道的東西),將會有更多專用的ALU用於加載/存儲操作和複雜的數學函數,因此它將更適合於每個線程需要更多操作的內核。

+0

SM和多處理器是一回事。沒有API函數可以控制線程塊到SM上的調度。 –

+1

這整個問題似乎是基於一個簡單的誤解的無意義的論文。 – talonmies

+0

如果在視頻卡屬性中給出了SM和多處理器,那麼爲什麼當說只有兩個多處理器時,我能夠同時啓動更多的SM嗎? –

回答

2

這似乎是混淆術語。

「SM」(SM = Streaming Multiprocessor)和「multiprocessor」指的是同樣的東西,即硬件單元,它是GPU上的主要執行單元。這些術語涉及特定的硬件資源。不同的GPU可能有不同數量的SM。可以使用CUDA deviceQuerysample code爲特定GPU找到SM的數量。

處於「啓動」狀態的CUDA程序的元素是線程塊。 A 網格是與內核啓動相關的所有線程塊的集合。各個線程塊在單個SM上執行。您可以在內核中啓動大量線程塊,或多或少獨立於您正在運行的GPU。然後線程塊將以特定GPU提供的任何速率進行處理,並且是SMs。

沒有API函數可以直接控制線程塊到SM的調度。通過使用CUDA stream priorities可以獲得對同時運行的不同內核的線程塊調度的某種級別的間接控制。