Ich arbeite an einem Linux-basierten C++ OpenGL-Anwendung, die Verwendung der Nvidia 290.10 64-Bit-Treiber. Ich versuche, seinen Speicherbedarf zu reduzieren, da es ziemlich viele Live-Daten verwendet.libGL Heap-Verwendung
Ich habe Valgrind/Massif verwendet, um die Heap-Nutzung zu analysieren, und während es mir geholfen hat, verschiedene Dinge zu optimieren, wird jetzt der größte Teil des verwendeten Heap-Speichers von libGL zugewiesen. Egal, wie ich die Schwelle setze, lässt mich das Massiv nicht im Detail sehen, wo diese Zuweisungen herkommen, nur dass es libGL ist. Zu Spitzenzeiten sehe ich etwa 250 MB, die von libGL zugewiesen wurden (von 900 MB Gesamtspeicherauslastung). Ich habe eine ähnliche Menge an Speicher auf der Grafikkarte, wie VBOs und Texturen (meist eine große 4096 * 4096 Textur).
So scheint es, als ob eine ähnliche Menge an Speicher wie das, was ich in den GPU-Speicher hochlade, auf dem Heap durch libGL zugewiesen wird. Die libGL-Zuweisungen erreichen auch ihren Höhepunkt, wenn das Volumen von VBOs ihren Höchstwert erreicht. Ist das normal? Ich dachte einer der Vorteile von viel GPU-Speicher ist, dass es den RAM frei hält?
Welche Verwendung haben Sie für den VBO in 'glBufferData' angegeben? – KillianDS
Für den Großteil der VBOs ist es GL_STATIC_DRAW. In einem Fall ist es GL_STREAM_DRAW, aber das Verhalten ist dasselbe, auch wenn dieser Teil der Anwendung deaktiviert ist. – pholz
@KillianDS spielt keine Rolle, denn die Verwendung ist nur ein Hinweis, nicht zwingend erforderlich. Auch OpenGL muss aus verschiedenen Gründen eine Kopie behalten. – datenwolf