什么是共享GPU內(nèi)存?它是否造成了內(nèi)存的浪費?(Windows11平臺)
我不是計算機專業(yè)出身,因此僅嘗試對標(biāo)題所示的問題給出自己的經(jīng)驗性的解釋
先用生產(chǎn)線打個比方便于理解,之后看看在實機上這套說法能不能解釋這個問題。
假設(shè)你有10條生產(chǎn)線(內(nèi)存)上擺滿了需要處理的零件(內(nèi)存占用),但是每條生產(chǎn)線只有一個工人在工作。這時候可以將每條生產(chǎn)線看作是每個工人所獨占的,但是每個部件都由1個工人負(fù)責(zé)你的工人就會干的很辛苦,生產(chǎn)速度也無法提高

為了加快生產(chǎn)速度,你讓一些其他的工人(GPU、視頻采集卡)來幫助你一起處理生產(chǎn)線上的零件,此時這條生產(chǎn)線被GPU和CPU或者其他輔助硬件共享了

接下來看看在實際應(yīng)用中的情況,用Adobe Pr和ffmpeg分別對比硬件加速和只有軟件編碼情況下的內(nèi)存以及共享GPU內(nèi)存



Adobe Pr HEVC硬編

可以看到,Adobe Pr圖形界面即使什么工作都不做相比于ffmpeg軟件本身都占用大量內(nèi)存,Adobe Pr硬編相比于軟編雖然共享GPU內(nèi)存增加了0.9G但是總的內(nèi)存占用并沒有增加(甚至還稍微降低了,可以理解為處理速度增加后生產(chǎn)線上可以更快的將處理完畢的零件卸下來,而生產(chǎn)線傳遞未處理零件的速度是有上限的)。
而真正只調(diào)用CPU的無圖形界面的ffmpeg,沒有產(chǎn)生額外的GPU共享內(nèi)存。因此GPU共享內(nèi)存實際上就是CPU將本來要處理的一部分?jǐn)?shù)據(jù)讓GPU一起幫忙處理。可能有人會問“為什么不放在顯存中處理?明明顯存速度更快而且占用率也低”。答案是可以用顯存存放,但是并不會減少內(nèi)存的占用。因為CPU不能直接操控顯存上的數(shù)據(jù),它只能將顯存中的數(shù)據(jù)傳輸?shù)絻?nèi)存或者緩存才能使用,而我們的日常應(yīng)用有許多任務(wù)都是需要CPU和GPU合作處理的,無法讓GPU獨立完成自然不能用顯存取代GPU共享內(nèi)存,頂多是讓同一份資料同時占據(jù)顯存和內(nèi)存,以便于GPU幫助處理。
測試所用軟件版本:
Windows 11 Version 22H2?KB5027303
ffmpeg?2023-03-27-git-f7abe92bd7-full_build
Adobe Premiere Pro 23.0