Wie kann ich feststellen, wie viel Grafikkartenspeicher ich verwende?

15

Ich möchte zur Laufzeit programmgesteuert ermitteln, wie viel Grafikkartenspeicher von meinem Programm verwendet wird. Insbesondere frage ich mich, wie es auf einem Windows-Computer mit OpenGL gemacht werden soll, bin aber auch an Möglichkeiten interessiert, dies auf anderen Plattformen zu tun.

Ich weiß, dass es Dienstprogramme gibt, die mir die Speichernutzung während der Ausführung meines Programms anzeigen, aber ich möchte in der Lage sein, diese Informationen aus meinem Code abzufragen.

Hitesh
quelle
PS Ich habe Ihre Frage bereits beantwortet, aber dies wäre besser für stackoverflow.com geeignet gewesen, da es sich nur um eine allgemeine Programmierfrage handelt. Wenn meine Antwort nicht gründlich genug ist, können Sie sie gerne dort erneut posten und sehen, welche Antworten sie geben.
Ricket
Ich bin auch auf Stackoverflow, aber ich lerne immer noch, welche Fragen hier gültig sind.
Hitesh
3
Diese Frage scheint hier völlig in Ordnung zu sein. Immerhin hat er wahrscheinlich die Antwort bekommen, die er brauchte. Siehe dies: meta.gamedev.stackexchange.com/questions/3/…
Tetrad

Antworten:

14

Sie finden den Videospeicher einer Nvidia-Karte mit der Erweiterung NVX_gpu_memory_info oder einer ATI-Karte mit ATI_meminfo . Hier ist ein Codeausschnitt, den ich gefunden habe, der Ihnen den Einstieg erleichtern könnte.


Paul Nettle von flipcode fragt sich jedoch, warum man den verfügbaren Videospeicher finden möchte und sagt :

Der Grund, warum es schwierig (und manchmal unmöglich) ist, die Größe des Videospeichers zu bestimmen, ist sehr ähnlich zu den Gründen, warum Sie mit OpenGL nicht den Bildpuffer sperren und direkt darauf zugreifen können.

Und erklärt im Wesentlichen, dass eine "Größe des Videospeichers" möglicherweise gar nichts bedeutet . Ich stimme ihm in der Begründung zu, dass beispielsweise die Größe des "freien" Speichers in einem Windows Vista / 7-Computer irrelevant ist. hoffentlich gibt es keinen freien Speicher, weil freier Speicher Speicher verschwendet wird. Es gibt jedoch immer einige Speicherbereiche für Caches, die von Windows gelöscht werden, falls eine Anwendung diese benötigt.

Ricket
quelle
Einige großartige Ressourcen. Ich sollte in ein paar Tagen die Gelegenheit haben, es auszuprobieren.
Hitesh
+1, die Schnipsel sind großartig. Ich bin mir jedoch nicht ganz einig, dass es nichts zu bedeuten hat - es ist immer besser, die Speicherkapazität zu überprüfen, als das Spektrum Ihres Programms ausfallen zu lassen.
Kornel Kisielewicz
Nun, aber ich denke, es ging nicht unbedingt darum, dass Sie die Speicherkapazität nicht überprüfen sollten, sondern dass die Speicherkapazität kein eindeutiger Indikator für irgendetwas ist. Wenn die Speicherkapazität der Karte erschöpft ist, kann dies bedeuten, dass sie ausfällt oder dass Ihre Texturdaten bei Bedarf nur automatisch ausgetauscht werden. 0 memory bedeutet möglicherweise nicht wirklich einen schwerwiegenden Fehler wegen zu wenig Arbeitsspeicher.
Ricket
1
Persönlich plane ich, dies als einfache Richtlinie zum Verfolgen von Lecks und zum Überwachen der Hardwarekompatibilität zu verwenden. Verwenden Sie "20mb"? Ja, das läuft wahrscheinlich auf allem, was heute auf dem Markt ist. Verwenden Sie "500mb" für ein einfaches Spiel mit einem halben Dutzend dynamisch zugewiesenen Texturen mit viel Abwanderung? Hoppla, mit meiner Müllabfuhr ist wahrscheinlich etwas schief gelaufen.
ZorbaTHut
1
Leider besagt die GL-Spezifikation, dass der Treiber, wenn er GL_OUT_OF_MEMORY zurückgibt, jetzt einen unbestimmten Wert hat. Wenn Sie also nicht mehr genügend Speicher haben, sind Sie im Grunde ein SOL.
gman