簡體   English   中英

為.NET應用程序啟用高性能GPU

[英]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_CreateSessionNvAPI_DRS_LoadSettingsNvAPI_DRS_FindProfileByName

如果未找到,則NvAPI_DRS_CreateProfile和三次調用NvAPI_DRS_SetSetting ,設置三個DWORD屬性:

  1. SHIM_MCCOMPAT_ID = SHIM_MCCOMPAT_ENABLE
  2. SHIM_RENDERING_MODE_ID = SHIM_RENDERING_MODE_ENABLE
  3. SHIM_RENDERING_OPTIONS_ID = SHIM_RENDERING_OPTIONS_DEFAULT_RENDERING_MODE

然后,調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM