Comment savoir quelle quantité de mémoire de carte vidéo j'utilise?

15

Je veux déterminer par programme lors de l'exécution la quantité de mémoire de carte vidéo utilisée par mon programme. Plus précisément, je me demande comment le faire sur une machine Windows en utilisant OpenGL, mais je suis également intéressé par des moyens de le faire sur d'autres plates-formes.

Je sais qu'il existe des utilitaires qui me montreront l'utilisation de la mémoire pendant l'exécution de mon programme, mais je veux pouvoir interroger ces informations à partir de mon code.

Hitesh
la source
PS J'ai déjà répondu à votre question, mais cela aurait été mieux adapté à stackoverflow.com car il s'agit simplement d'une question de programmation générale. Si ma réponse n'est pas suffisamment approfondie, vous pouvez la republier et voir quelles réponses ils donnent.
Ricket
Je suis également sur stackoverflow, mais j'apprends toujours le mélange des questions valables ici.
Hitesh
3
Cette question semble parfaitement correcte ici. Après tout, il a probablement obtenu la réponse dont il avait besoin. Voir ceci: meta.gamedev.stackexchange.com/questions/3/…
Tetrad

Réponses:

14

Vous pouvez trouver la mémoire vidéo d'une carte Nvidia en utilisant l' extension NVX_gpu_memory_info , ou une carte ATI en utilisant ATI_meminfo . Voici un extrait de code que j'ai trouvé qui pourrait vous aider à démarrer.


Cependant, Paul Nettle sur flipcode se demande pourquoi on voudrait trouver la mémoire vidéo disponible, en disant :

La raison pour laquelle il est difficile (et parfois impossible) de déterminer la quantité de mémoire vidéo est très similaire aux raisons pour lesquelles OpenGL ne vous permettra pas de verrouiller le tampon de trame et d'y accéder directement.

Et poursuit en expliquant, en substance, qu'une «quantité de mémoire vidéo» pourrait ne rien signifier réellement . Je suis d'accord avec lui sur le raisonnement selon lequel, par exemple, la quantité de mémoire "libre" dans une machine Windows Vista / 7 n'est pas pertinente; j'espère qu'il n'y a pas de mémoire libre, car la mémoire libre est de la mémoire gaspillée. Mais il existe toujours des zones de mémoire dédiées aux caches qui sont effacées par Windows, si une application en avait besoin.

Ricket
la source
De grandes ressources. Je devrais avoir la chance de l'essayer dans quelques jours.
Hitesh
+1, les extraits sont super. Cependant, je ne suis pas entièrement d'accord pour ne rien dire - il est toujours préférable de vérifier la quantité de mémoire que de laisser votre programme spectaculaire échouer.
Kornel Kisielewicz
Eh bien, mais je pense que le point n'était pas nécessairement que vous ne devriez pas vérifier la quantité de mémoire, mais que la quantité de mémoire n'est pas un indicateur clair de quoi que ce soit. Lorsque la carte manque de mémoire, cela peut signifier qu'elle échouera, ou cela pourrait signifier que vos données de texture seront simplement échangées et retirées automatiquement si nécessaire. 0 mémoire peut ne pas réellement signifier une erreur fatale de mémoire insuffisante.
Ricket
1
Personnellement, je prévois de l'utiliser comme une simple directive pour suivre les fuites et surveiller la compatibilité de mon matériel. Vous utilisez "20 Mo"? Oui, cela fonctionnera probablement sur n'importe quoi sur le marché aujourd'hui. Utiliser "500mb" sur un jeu simple avec une demi-douzaine de textures allouées dynamiquement avec beaucoup de désabonnement? Oups, quelque chose a probablement mal tourné avec ma collecte des ordures.
ZorbaTHut
1
Malheureusement, la spécification GL dit que lorsque le pilote retourne GL_OUT_OF_MEMORY, il est maintenant dans une période indéterminée, donc une fois que vous manquez de mémoire, vous êtes essentiellement SOL Pour un jeu qui n'est pas si mauvais mais pour une application comme Photoshop, c'est inacceptable.
gman