Como posso saber quanta memória de placa de vídeo estou usando?

15

Desejo determinar programaticamente em tempo de execução quanta memória da placa de vídeo está sendo usada pelo meu programa. Especificamente, estou pensando em como fazê-lo em uma máquina Windows usando o OpenGL, mas também estou interessado em maneiras de fazê-lo em outras plataformas.

Eu sei que existem utilitários por aí que me mostrarão o uso de memória enquanto meu programa está sendo executado, mas eu quero poder consultar essas informações do meu código.

Hitesh
fonte
PS: Eu já respondi sua pergunta, mas isso seria mais adequado para o stackoverflow.com, pois é apenas uma questão de programação geral. Se minha resposta não for completa o suficiente, você pode repassá-la e ver quais respostas elas darão.
Ricket 30/08/10
Também estou no stackoverflow, mas ainda estou aprendendo a mistura de quais perguntas são válidas aqui.
Hitesh
3
Esta questão parece perfeitamente bem aqui. Afinal, ele provavelmente conseguiu a resposta que precisava. Veja isto: meta.gamedev.stackexchange.com/questions/3/…
Tetrad

Respostas:

14

Você pode encontrar a memória de vídeo de uma placa Nvidia usando a extensão NVX_gpu_memory_info ou uma placa ATI usando ATI_meminfo . Aqui está um trecho de código que encontrei que pode ajudar você a começar.


No entanto, Paul Nettle no flipcode se pergunta por que alguém iria querer encontrar a memória de vídeo disponível, dizendo :

A razão pela qual é difícil (e às vezes impossível) determinar a quantidade de memória de vídeo é muito semelhante às razões pelas quais o OpenGL não permite bloquear o buffer de quadros e acessá-lo diretamente.

E continua explicando, em essência, que uma "quantidade de memória de vídeo" pode não significar nada . Concordo com ele no raciocínio de que, por exemplo, a quantidade de memória "livre" em uma máquina com Windows Vista / 7 é irrelevante; espero que não haja memória livre, porque memória livre é memória desperdiçada. Mas sempre há algumas áreas de memória dedicadas aos caches que são limpas pelo Windows, caso um aplicativo precise delas.

Ricket
fonte
Alguns ótimos recursos. Eu deveria ter a chance de experimentá-lo em alguns dias.
Hitesh
+1, os trechos são ótimos. No entanto, não concordo plenamente em não significar nada - é sempre melhor verificar a quantidade de memória do que deixar seu programa espetacularmente falhar.
Kornel Kisielewicz 30/08/10
Bem, mas acho que o ponto não era necessariamente que você não deveria verificar a quantidade de memória, mas que a quantidade de memória não é um indicador claro de nada. Quando o cartão fica sem memória, isso pode significar que ele falhará ou seus dados de textura serão trocados automaticamente, conforme necessário. Memória 0 pode não significar realmente um erro fatal de falta de memória.
Ricket 30/08/10
11
Pessoalmente, planejo usar isso como uma diretriz simples para rastrear vazamentos e observar minha compatibilidade de hardware. Usando "20mb"? Sim, isso provavelmente funcionará com qualquer coisa no mercado hoje. Usando "500mb" em um jogo simples, com meia dúzia de texturas alocadas dinamicamente e com muita rotatividade? Ops, algo provavelmente deu errado na minha coleta de lixo.
precisa saber é o seguinte
11
Infelizmente, a especificação GL diz que, quando o driver retorna GL_OUT_OF_MEMORY, agora ele é indeterminado. Assim, quando você fica sem memória, fica basicamente SOL Para um jogo que não é tão ruim, mas para um aplicativo como o Photoshop, isso é inaceitável.
Gman #