Forcer les GPU NVIDIA par programmation dans Optimus ordinateurs portables
Je suis de la programmation d'un DirectX jeu, et lorsque je l'exécute sur un ordinateur portable Optimus le GPU est utilisé, ce qui entraîne des performances horribles. Si je force le GPU NVIDIA en utilisant le menu contextuel ou en renommant mon exécutable bf3.exe ou une autre célèbre jeu nom de l'exécutable, les performances attendues.
Évidemment, il n'est ni une solution acceptable pour quand je dois redistribuer mon jeu, donc, il y a un moyen de faire de la force de l'ordinateur portable pour utiliser le GPU NVIDIA?
J'ai déjà essayé d'utiliser DirectX pour énumérer les adaptateurs (IDirect3D9::GetAdapterCount, IDirect3D9::GetAdapterIdentifier) et ça ne fonctionne pas: 1 seul GPU qui est rapporté (celui en cours d'utilisation).
Vous devez vous connecter pour publier un commentaire.
L'Optimus livre blanc à http://www.nvidia.com/object/LO_optimus_whitepapers.html est pas clair sur exactement ce qu'il faut avant de basculer vers le GPU est faite. Le livre blanc dit que DX, DXVA, et CUDA appels sont détectés et sera la cause de la GPU d'être allumé. Mais en outre, la décision est basée sur les profils maintenu par NVIDIA et, bien sûr, l'un n'existe pas encore pour votre jeu.
Une chose à essayer serait de faire un CUDA appel, par exemple pour
cuInit(0);
. Contrairement à DX et DXVA, il n'y a pas de voie pour l'Intel carte graphique intégrée à la poignée, de sorte qu'il doit forcer un passage vers le GPU.cuInit
avant de créer mon contexte OpenGL, et j'ai un processeur Intel contexte pas une NVidia un.Selon http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf à partir de 302 pilotes, il suffit de lier statiquement à l'une des bibliothèques suivantes: vcamp110.dll, vcamp110d.dll, nvapi.dll, nvapi64.dll, opencl.dll, nvcuda.dll, cudart*.*, ou à l'exportation d'un NvOptimusEnablement variable dans votre programme: