2017-07-27 45 views
3

啓動CUDA運行時需要一定的時間來協調設備和主機的UVM存儲器映射;見:「持久模式」實際上會降低CUDA啓動時間嗎?

現在,它已經向我建議使用Persistence Mode會顯著緩解這一現象。以什麼方式?我的意思是,當持久性模式打開時,會發生什麼或者什麼情況不會發生,並且存在使用CUDA的進程?

文檔說:

餘輝模式是,保持在沒有客戶端連接到它甚至初始化的目標GPU用戶設置的驅動程序屬性術語。

但是 - 「保持初始化」是什麼意思?稍後,有關持久性守護程序(與持久性模式不同)的部分說:

只要有一個或多個客戶端打開設備文件,GPU狀態就會保持加載到驅動程序中。一旦所有客戶端都關閉了設備文件,GPU狀態將被卸載,除非啓用了持久性模式。

那麼究竟是什麼卸載?去哪裏卸貨?它與內存大小有何關係?如果系統中沒有發生重大事件,爲什麼需要花費很多時間加載它?

+1

您是否閱讀過任何[文檔](http://docs.nvidia.com/deploy/driver-persistence/index.html)? –

+0

@RobertCrovella:見編輯。 – einpoklum

回答

4

有2個主要部分在GPU/CUDA啓動順序:

  1. 設備初始化時間
  2. CUDA上下文 「懶惰」 初始化

現代CUDA GPU可以在存在其中幾個power states。當前的電源狀態可通過nvidia-smiNVML或通過NVML觀察到(但請注意,運行像nvidia-smi這樣的工具的效果可能會改變GPU的電源狀態。)當GPU未用於任何目的時(即,它在技術上處於空閒狀態:GPU上沒有實例化任何類型的上下文)並且未啓用持久性模式,GPU與GPU驅動程序配合使用時會自動將其電源狀態降至非常低的水平,有時還包括完整的場景。

將GPU移至低功耗狀態的過程將涉及關閉或修改各種硬件的行爲。例如,減少內存時鐘,減少內核時鐘,關閉顯示輸出,關閉內存子系統,關閉各種內部子系統(如時鐘發生器),甚至關閉芯片的主要部分,如計算內核,高速緩存等。甚至可能是芯片「完全」掉電。現代GPU具有可控電源傳輸系統,無論是片上還是片外,都可以實現這種行爲。爲了逆轉這一過程,GPU驅動程序軟件必須小心地(按照規定的順序)給模塊上電,等待硬件建立時間,然後應用模塊級復位,然後開始初始化模塊中的控制寄存器。例如,啓動內存將涉及開啓片上DRAM控制模塊,打開DRAM電源,打開內存引腳驅動器,設置壓擺率,打開內存時鐘,初始化內存時鐘發生器PLL用於所需的操作,並且在許多情況下,將存儲器初始化爲某種已知狀態。例如,正確的ECC使用要求將存儲器初始化爲已知狀態,該狀態可能並非全是零,而是涉及必須計算和存儲的ECC標籤。這種「ECC擦洗」是documentation中提到的「耗時」過程的一個示例。

根據確切的電源狀態,驅動程序必須採取任何數量的操作才能使GPU進入下一個更高功耗狀態(或「性能狀態」),P0爲最高狀態。一旦perf狀態高於一定的水平(比如說P8),那麼GPU可能能夠支持某些類型的上下文(例如計算上下文),但可能在性能水平降低的情況下(除非你在P0上)。

這些操作需要時間,並且持久性模式通常會保持GPU處於power/perf狀態P2或P0,這意味着如果希望在GPU上打開上下文,則基本上不需要執行上述任何步驟。

但是,打開GPU上下文可能會涉及其自身的啓動成本,而GPU無法或無法跟蹤啓動成本。例如,打開UVA regime中的計算上下文需要主機操作系統請求「虛擬分配」,以及系統中所有處理器(所有「可見」GPU以及CPU)的內存映射,被「協調一致」,這樣每個人都有獨特的工作空間,並且空間中64位指針的數值可以用來唯一確定該指針的「所有權」或「意義/內省」。

大多數情況下,通過使GPU處於持久性模式,與打開CUDA上下文相關的活動(除了將設備置於可支持上下文的狀態的過程之外)不會受到影響或受益。由於設備初始化和CUDA上下文創建都可能影響感知的「CUDA啓動時間」,因此持久性模式可以改善/減輕整體感知的啓動時間,但是它不能將其減少到零,因爲一些活動與上下文創建不在其範圍之內。

+0

......並且這些虛擬分配在大小或數量上取決於主機內存大小,因此隨着內存大小的增加,持久性模式的影響變得不那麼明顯。我對嗎?此外,在噢,僅僅100毫秒左右的閒置之後,GPU是否真的會將自己降到低功耗水平? ...無論如何,謝謝你的詳細解答。 – einpoklum

+3

虛擬分配不是有關持久性模式問題的一部分,它是做什麼的。但是,是的,更大的分配請求可能需要更多時間。這主要是發生這種情況(系統調用)在Linux等操作系統上的功能。是的,GPU可能會積極管理電源。一些功率狀態轉換(例如,P0-> P2)可能在短時間內發生。其他功率狀態轉換(例如P2-> P8)可能花費更長的時間,例如,秒。 –