Jak mogę sprawdzić, ile pamięci karty graficznej używam?

15

Chcę programowo określić w czasie wykonywania, ile pamięci karty wideo jest używane przez mój program. W szczególności zastanawiam się, jak to zrobić na komputerze z systemem Windows za pomocą OpenGL, ale interesują mnie sposoby, jak to zrobić na innych platformach.

Wiem, że istnieją narzędzia, które pokażą mi użycie pamięci podczas działania mojego programu, ale chcę mieć możliwość zapytania tych informacji z mojego kodu.

Hitesh
źródło
PS Już odpowiedziałem na twoje pytanie, ale byłoby to bardziej odpowiednie dla stackoverflow.com, ponieważ jest to tylko ogólne pytanie programistyczne. Jeśli moja odpowiedź nie jest wystarczająco dokładna, możesz ją tam ponownie opublikować i zobaczyć, jakie odpowiedzi udzielają.
Ricket
Używam też stackoverflow, ale wciąż uczę się, jakie pytania są tutaj ważne.
Hitesh
3
To pytanie wydaje się tutaj w porządku. W końcu zapewne dostał abswer, którego potrzebował. Zobacz to: meta.gamedev.stackexchange.com/questions/3/...
tetradê

Odpowiedzi:

14

Możesz znaleźć pamięć wideo karty Nvidia za pomocą rozszerzenia NVX_gpu_memory_info lub karty ATI za pomocą ATI_meminfo . Oto fragment kodu , który znalazłem i który może pomóc Ci zacząć.


Jednak Paul Nettle z flipcode zastanawia się, dlaczego ktoś chciałby znaleźć dostępną pamięć wideo, mówiąc :

Powód, dla którego ustalenie ilości pamięci wideo jest trudne (a czasem niemożliwe), jest bardzo podobny do powodów, dla których OpenGL nie pozwala zablokować bufora ramki i uzyskać do niego bezpośredni dostęp.

I wyjaśnia dalej, że „ilość pamięci wideo” może w rzeczywistości nic nie znaczyć . Zgadzam się z nim z rozumowaniem, że na przykład ilość „wolnej” pamięci w komputerze z systemem Windows Vista / 7 jest nieistotna; mam nadzieję, że nie ma wolnej pamięci, ponieważ wolna pamięć to zmarnowana pamięć. Ale zawsze są obszary pamięci przeznaczone na pamięci podręczne, które są czyszczone przez system Windows, jeśli aplikacja ich potrzebuje.

Ricket
źródło
Kilka świetnych zasobów. Powinienem mieć szansę wypróbować to za kilka dni.
Hitesh
+1, fragmenty są świetne. Jednak nie do końca zgadzam się z tym, że nic nie znaczę - zawsze lepiej jest sprawdzić ilość pamięci, niż pozwolić na awarię programu.
Kornel Kisielewicz
Cóż, ale myślę, że nie chodziło o to, że nie powinieneś sprawdzać ilości pamięci, ale że ilość pamięci nie jest wyraźnym wskaźnikiem czegokolwiek. Kiedy na karcie zabraknie pamięci, może to oznaczać, że się nie powiedzie, lub może oznaczać, że dane tekstury zostaną automatycznie zamienione i zastąpione w razie potrzeby. Pamięć 0 może w rzeczywistości nie oznaczać krytycznego błędu braku pamięci.
Ricket
1
Osobiście planuję użyć tego jako prostej wskazówki do śledzenia wycieków i oglądania mojej kompatybilności sprzętowej. Używasz „20mb”? Tak, to prawdopodobnie będzie działać dzisiaj na czymkolwiek na rynku. Używasz „500mb” w prostej grze z pół tuzinem dynamicznie alokowanych tekstur z dużą ilością rezygnacji? Ups, coś prawdopodobnie poszło nie tak z moim śmieciem.
ZorbaTHut,
1
Niestety, specyfikacja GL mówi, że kiedy sterownik zwraca GL_OUT_OF_MEMORY, jest teraz w nieokreślonym stanie, więc gdy tylko zabraknie pamięci, jesteś w zasadzie SOL. Dla gry, która nie jest taka zła, ale dla aplikacji takich jak np. Photoshop, która jest niedopuszczalna.
gman