Sto lavorando a un'applicazione OpenGL C++ basata su linux, utilizzando i driver a 64 bit Nvidia 290.10. Sto cercando di ridurre il suo ingombro di memoria in quanto utilizza un gran numero di dati live.utilizzo heap libGL
Sto usando valgrind/massif per analizzare l'utilizzo dell'heap e, mentre mi ha aiutato a ottimizzare varie cose, ormai il grosso pezzo di memoria heap utilizzato è allocato da libGL. A prescindere da come imposto la soglia, il massiccio non mi permette di vedere in dettaglio da dove provengono queste allocazioni, solo che è libGL. Nelle ore di punta, vedo circa 250 MB allocati da libGL (su un totale di 900 MB di utilizzo dell'heap). Ho una quantità di memoria simile sulla scheda grafica, come VBO e Textures (principalmente una grande trama 4096 * 4096).
Quindi sembra come se una quantità di memoria simile a quella che carica nella memoria della GPU sia allocata nell'heap da libGL. Le allocazioni libGL hanno anche un picco quando il volume dei picchi VBOs. È normale? Ho pensato che uno dei vantaggi di avere un sacco di memoria GPU è che mantiene la RAM libera?
quale utilizzo hai specificato per il VBO in 'glBufferData'? – KillianDS
Per la maggior parte dei VBO, è GL_STATIC_DRAW. In un caso è GL_STREAM_DRAW, ma il comportamento è lo stesso anche se questa parte dell'applicazione è disabilitata. – pholz
@KillianDS non importa, perché l'utilizzo è solo un suggerimento, non obbligatorio. Anche OpenGL deve tenere una copia in giro per vari motivi. – datenwolf