问题:具有多个GPU的笔记本电脑具有Nvidia Optimus或AMD PowerXpress开关,如果IGPU上的负载过高,它们会使用笔记本电脑专用的GPU,我试图找到一种方法来操纵此开关,但没有成功。
一半的解决方案和问题:使用谷歌,我发现您可以使用以下代码启用/禁用切换:
extern "C" {
// http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf
__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
// http://developer.amd.com/community/blog/2015/10/02/amd-enduro-system-for-developers/
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
}
它确实会切换到专用GPU,但是如果我想通过从1更改为0进行恢复,则无法使用。
我要实现的目标:通过操纵此开关,我可以控制每个GPU,方法是使用 D3D11CreateDevice 或 CreateDevice 来使用每个GPU,而无需触发提到的开关,即使IGPU上的负载过高也无法处理
什么可以帮助您解决该问题:我发现switch在Mac OS上具有相同的作用:https://github.com/0xbb/gpu-switch
如何检查开关是否正常工作:由于笔记本电脑使用DirectX功能的一个屏幕, EnumerateAdapters(); 和 GetAdapterIdentifier 显示单个GPU,意思是默认情况下它应该显示IGPU,并使用我提到的代码将其切换到专用GPU,但是将值恢复为0则不会切换回IGPU。