¿Cómo puedo saber cuánta memoria de la tarjeta de video estoy usando?

15

Quiero determinar mediante programación en tiempo de ejecución cuánta memoria de la tarjeta de video está utilizando mi programa. Específicamente, me pregunto cómo hacerlo en una máquina con Windows usando OpenGL, pero también me interesan las formas de hacerlo en otras plataformas.

Sé que existen utilidades que me mostrarán el uso de la memoria a medida que se ejecuta mi programa, pero quiero poder consultar esa información desde mi código.

Hitesh
fuente
PD: ya respondí tu pregunta, pero esto habría sido más adecuado para stackoverflow.com ya que es solo una pregunta de programación general. Si mi respuesta no es lo suficientemente exhaustiva, puede volver a publicarla allí y ver qué respuestas dan.
Ricket
También estoy en stackoverflow, pero todavía estoy aprendiendo la combinación de qué preguntas son válidas aquí.
Hitesh
3
Esta pregunta parece perfectamente bien aquí. Después de todo, probablemente obtuvo la respuesta que necesitaba. Vea esto: meta.gamedev.stackexchange.com/questions/3/…
Tetrad

Respuestas:

14

Puede encontrar la memoria de video de una tarjeta Nvidia usando la extensión NVX_gpu_memory_info , o una tarjeta ATI usando ATI_meminfo . Aquí hay un fragmento de código que encontré que podría ayudarlo a comenzar.


Sin embargo, Paul Nettle en flipcode se pregunta por qué querría encontrar la memoria de video disponible, y dice :

La razón por la que es difícil (y a veces imposible) determinar la cantidad de memoria de video es muy similar a las razones por las que OpenGL no le permite bloquear el búfer de cuadros y acceder a él directamente.

Y continúa explicando, en esencia, que una "cantidad de memoria de video" en realidad podría no significar nada . Estoy de acuerdo con él en el razonamiento de que, por ejemplo, la cantidad de memoria "libre" en una máquina con Windows Vista / 7 es irrelevante; ojalá no haya memoria libre, porque la memoria libre es memoria desperdiciada. Pero siempre hay algunas áreas de memoria dedicadas a cachés que Windows borra, en caso de que una aplicación las necesite.

Ricket
fuente
Algunos buenos recursos. Debería tener la oportunidad de probarlo en un par de días.
Hitesh
+1, los fragmentos son geniales. Sin embargo, no estoy totalmente de acuerdo en que no signifique nada; siempre es mejor verificar la cantidad de memoria que dejar que su programa falle espectacularmente.
Kornel Kisielewicz
Bueno, pero creo que el punto no es necesariamente que no se debe verificar la cantidad de memoria, sino que la cantidad de memoria no es un indicador claro de nada. Cuando la tarjeta se queda sin memoria, puede significar que fallará, o puede significar que sus datos de textura se intercambien automáticamente dentro y fuera según sea necesario. 0 memoria podría no significar un error fatal de falta de memoria.
Ricket
1
Personalmente, planeo usar esto como una guía simple para rastrear fugas y ver mi compatibilidad de hardware. ¿Usando "20mb"? Sí, eso probablemente funcionará con cualquier cosa en el mercado hoy. ¿Usando "500mb" en un juego simple con media docena de texturas asignadas dinámicamente con mucha rotación? Vaya, algo probablemente salió mal con mi recolección de basura.
ZorbaTHut
1
Desafortunadamente, la especificación GL dice que cuando el controlador devuelve GL_OUT_OF_MEMORY ahora está en un estado indeterminado, así que una vez que se queda sin memoria, básicamente eres SOL.
gman