cudaMemGetInfo獲取的可用視訊記憶體和全部視訊記憶體有問題和實際有出入?CPU多執行緒呼叫GPU
阿新 • • 發佈:2019-02-10
我在vs上執行cuda程式,用cudaMemGetInfo獲得的總的視訊記憶體是3g,但是實際應該有4g。可用的視訊記憶體是3028M,那就是用了44M,但是用GPU-Z和nvidia-smi都顯示用了800多M,不知道為什麼是這樣?
問題:就是CPUpthread_create建立多個執行緒,執行GPU程式碼,會不會有問題?[size=18.9999980926514px]答:沒有任何問題的。你的這個模型(開多個CPU執行緒,每個執行緒單獨處理1個stream上的kernel啟動或者複製任務)其實是最經典的模型。完全無任何問題的。請大膽使用。最常見的是,只有1張卡的時候,同時使用2-3個執行緒,分別建立2-3個streams,處理該GPU上的多組任務。以及,在多張卡的時候,也可以進一步的將執行緒數量擴大N倍(N是你的GPU數量),然後每2-3個執行緒對付一個GPU,這樣程式設計起來邏輯簡單,充分壓榨GPU。
(是不是一個伺服器
(2各執行緒同時訪問GPU,會不會有衝突?)這要看你的具體的操作了。如果兩個stream裡的kernel操作的資料毫無關係,則可以隨意進行,如果2個stream裡的kernel*可能*同時操作一段緩衝區的位置,儘量使用原子操作保證資料操作如你所想。這是對一張卡上的來說的多卡,非pascal,在P2P Access下,多個stream裡的kernel同時操作特定某張卡的特定位置,不能用原子操作的,
以及,需要說明的是,對一張卡上多個流,並不一定必須使用多個CPU執行緒的,你完全可以只使用1個執行緒,但是使用多個往往更簡潔,方便。