我目前正在使用CUDA
開發nVidia GTX 480。根據規範,該卡有15個流式多處理器(SM),每個核心有32個CUDA
核心。顯示驅動程序本身使用了哪些CUDA資源?
我的代碼與每個32個內核的N
塊一起使用。
理想情況下,如果N <= 15
,我認爲,由於每個塊可以分配到不同的SM,每個塊將運行速度與單個塊一樣快。對於'N> 15',當塊開始共享SM時,每個塊的性能應該衰減。如果maxocc
是我的內核的最大佔用率,那麼性能應該停滯在N > 15*maxocc
,因爲並非所有塊都可以在SM上進行調度。
這也是幾乎我在實踐中觀察:每個塊的性能開始衰變爲N = 12
和性能停滯爲N = 57
,即這是因爲如果有佔用短信三個額外的塊。
我沒有其他運行的程序使用GTX 480.但是,該卡連接到運行文本控制檯的外部顯示器,即不是X-windows。
現在的問題:有誰知道如果使用GTX 480驅動控制檯佔用CUDA
資源?如果是這樣,究竟有多少?我該如何避免這種情況,即,如何完全禁用視頻輸出而不關閉CUDA
設備?
感謝您的回覆!調度器會讓SM閒置似乎有點奇怪。你對它的工作原理有很好的參考?由於我在非Windows機器上,我無法使用Parallel Nsight來驗證這一點。 – Pedro
我無法找到此行爲的參考。建議網格發起足夠的工作來填充設備。如果啓動不填充設備,則可能會出現一些調度工件。如果您對調查行爲感興趣,則可以使用PTX特殊變量%smid(請參見內聯PTX示例)來創建每個SM軟件計數器。在您的內核開始時讀取%smid,並讓每個warp(或block)以原子方式遞增該SM的軟件計數器。 –
在爲我的代碼添加彙編調用來驗證這一點之前,我真的很想知道這種行爲是由nVidia在某處描述的,而不僅僅是一種預感。您是否有任何關於調度程序的工作原理? – Pedro