[英]Enable high-performance GPU for a .NET app
用戶抱怨我的應用程序(使用Direct3D 11渲染一些重型3D內容以實現類似CAD的功能)在雙GPU系統上的英特爾GPU上運行。
發現NvOptimusEnablement
/ AmdPowerXpressRequestHighPerformance
導出變量。 但是,應用程序有.NET前端,無法從那里導出東西。 雖然有一些解決方法 ,但重新編譯步驟會破壞調試器(不能再設置斷點)並使調試符號無效,我需要它們才能可靠地工作。
還有其他想法嗎?
是否可以在安裝時創建nVidia應用程序配置文件?
或者,我如何使用NVApi選擇高性能GPU?
我使用自定義WIX操作創建了一個C ++ DLL,它在安裝時創建/更新應用程序的配置文件,並在卸載時將其刪除。
雖然幾乎沒有記錄,但官方的nVidia API具有所需的NvAPI_DRS_ *功能。
這是一個工作流程: NvAPI_Initialize
(如果失敗則表示用戶沒有nVidia GPU,這不是錯誤), NvAPI_DRS_CreateSession
, NvAPI_DRS_LoadSettings
, NvAPI_DRS_FindProfileByName
。
如果未找到,則NvAPI_DRS_CreateProfile
和三次調用NvAPI_DRS_SetSetting
,設置三個DWORD屬性:
然后,調用NvAPI_DRS_GetProfileInfo
得到應用,其次是數NvAPI_DRS_EnumApplications
,並搜索EXE路徑。
卸載時,我刪除的完整個人資料,通過調用NvAPI_DRS_FindProfileByName
然后NvAPI_DRS_DeleteProfile
。
在重新安裝和升級時,我同時執行這兩項操作,先刪除然后添加
最后不要忘記NvAPI_DRS_SaveSettings
。
PS最意想不到的是,nVidia“規范化”存儲在NVDRS_APPLICATION :: appName字段中的路徑,它們將它們轉換為小寫,並將'\\'
替換為'/'
。 由於這種“規范化”,沒有標准的字符串比較函數可以用於它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.