原文地址:

paper閱讀01-GPU Scheduling on the NVIDIA TX2: Hidden Details Revealed?

www.findhao.net
圖標

以前讀完論文並沒有寫keynotes的習慣,頂多在mendeley上做些標註,但是過段時間再看,還是需要花費一定的時間來理順思路。所以準備從現在開始對閱讀過的論文做一些自己認為重要的備註。

GPU Scheduling on the NVIDIA TX2: Hidden Details Revealed

2017 IEEE Real-Time Systems Symposium (RTSS) (2017)

Paris, France

Dec 5, 2017 to Dec 8, 2017

ISSN: 2576-3172

ISBN: 978-1-5386-1415-0

主要是對NVIDIA GPU未公開的調度機制在Jetson TX2上做了測試驗證。涉及到的Queue都是FIFO模式。

TX2有兩個execution engine (EE),一個copy engine (CE) 。一個EE可以同時執行多個kernels,一個CE一次只能執行一個copy操作,EE和CE可以並發。

同一個stream裏的操作是串列的,不同stream裏操作的執行取決於GPU調度策略。默認所有操作都在NULL Stream,而且他的優先順序也比較奇葩。

複製操作必須等到同一個stream裏之前的kernel發射以後,才能開始。

多個stream裏的操作將被按照發射順序放進EE的隊列裏進行任務的分派assign。也就是說,只有在隊首的Kernel才會被挑選進入EE queue。

論文裏的圖都是一個EE queue做的模型,在從多個Stream Queue中挑選任務的規則應該是按照發射時間先後。

後面好像沒有對兩個EE queue進行分析,所以在多個EE queue情況下,Kernel的分派策略沒有說明,不知道是否還是按照Kernel的發射順序。

對於EE queue中的任務是否要被分派至SM上,則是大家熟知的規則:寄存器、線程、Shared memory。

不同架構的硬體限制在相應的白皮書或者cuda samples路徑的common tools文件夾中有計算occupancy的excel表格,第三個sheet就是每一種架構的硬體限制信息。

maxregcount可以用來限制寄存器數量。

其實這個參數的使用環境限制挺大的,在寄存器限制還是64的上古架構非常有用,但是目前的寄存器限制一般是255 per thread。

我感覺ptxas目前的寄存器分配策略非常低效,因為看起來它在儘可能減少寄存器的使用數量,而不是提供多個不同寄存器需求級別的分配策略。導致即便硬體提供了255的限制,編譯出來的寄存器數量還是遠遠小於255。一般情況下,寄存器分配策略中,更多的寄存器,意味著更少的指令,更快的速度。

NULL Stream是個特殊的stream,前面的討論都是user specified stream。

論文中Figure5的我有的疑問是,K2:0為什麼不調度到SM1的1.0-2.0時間上去?看起來作者認為NULL Stream裏的kernel必須等待其他stream裏的kernel完成?但是在其總結的規律裏,只跟launch time有關而不是end time。

Stream 也有優先順序的設置。後面的我目前不是特別關心,沒有仔細閱讀。不過總體來看就是一個正常的優先順序調度策略,當然包括設置的優先順序和資源優先順序兩個參數。

總的來說這篇文章不錯,在實驗中驗證了部分Nvidia的調度策略,明確了大家推測已久的一些規則。


推薦閱讀:
相關文章