繁体   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