我有一個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用於加載/存儲操作和複雜的數學函數,因此它將更適合於每個線程需要更多操作的內核。
SM和多處理器是一回事。沒有API函數可以控制線程塊到SM上的調度。 –
這整個問題似乎是基於一個簡單的誤解的無意義的論文。 – talonmies
如果在視頻卡屬性中給出了SM和多處理器,那麼爲什麼當說只有兩個多處理器時,我能夠同時啓動更多的SM嗎? –