Pracuję nad opartą na linuksie aplikacją OpenGL w języku C++, wykorzystując sterowniki 64-bitowe Nvidia 290.10. Próbuję zmniejszyć jego ślad pamięci, ponieważ wykorzystuje sporo danych na żywo.Używanie sterty libGL
Używam valgrind/massif do analizy użycia sterty, a jednocześnie pomógł mi zoptymalizować różne rzeczy, teraz największy fragment pamięci stosu jest przydzielany przez libGL. Bez względu na to, jak ustawiam próg, masyw nie pozwala mi zobaczyć szczegółowo skąd pochodzą te alokacje, tylko że jest to libGL. W godzinach szczytu widzę około 250 MB przydzielonych przez libGL (z całkowitego wykorzystania sterty wynoszącego 900 MB). Posiadam podobną ilość pamięci na karcie graficznej, jak VBO i tekstury (głównie jedna duża tekstura 4096 * 4096).
Wygląda na to, że podobna ilość pamięci, jaką ładuję do pamięci GPU, jest przydzielana do sterty przez bibliotekę libGL. Przydziały libGL również osiągają szczyt gdy objętość VBO osiąga szczyt. Czy to normalne? Myślałem, że jedną z zalet posiadania dużej ilości pamięci GPU jest to, że utrzymuje ona pamięć RAM za darmo?
jakiego użycia określiłeś dla VBO w 'glBufferData'? – KillianDS
W przypadku większości VBO jest to GL_STATIC_DRAW. W jednym przypadku jest to GL_STREAM_DRAW, ale zachowanie jest takie samo, nawet jeśli ta część aplikacji jest wyłączona. – pholz
@KillianDS nie ma znaczenia, ponieważ użycie jest tylko wskazówką, a nie obowiązkową. Również OpenGL musi zachować kopię z różnych powodów. – datenwolf