Comments (5)
@jean-emmanuel I will have a look at this in an hour or two.. it does look odd, perhaps the highly optimised C and Fortran code in numpy skips some registration process, or the copying of the bytes is optimised into a transfer of ownership in some way?
from pi3d.
Running the same test on a system with an integrated graphic card (and shared video memory) gave different results (same pi3d/numpy version):
- the numpy array is allocated only once in python unless filled with a random value, I guess numpy detects the data is the same and reuses it. Somehow numpy behaves differently here... EDIT: creating the array with numpy.full instead of numpy.zero fixes it.
- the memory is released as expected: half of it with
free_after_load
, the other half when textures are unloaded
from pi3d.
Yes it's very odd. Showing the memory with free
doesn't seem to take into account GC released space in this circumstance. If I do something like
if len(textures) > 50:
textures.pop(0)
when it's building the list then the memory stops being consumed although new Texture objects are being created. Similarly if the else
block sets textures to [] and memory to 0 then the process is repeated ad infinitum but the amount of memory consumed stays the the max. If I put the Texture.file_string = None into the Texture.free_after_load() method (where it should be, as you point out. Just in time for the next release of pi3d!) then the memory usage shown by free
is higher but the first time textures is deleted it does drop. However subsequent resets don't reduce the memory usage. The memory usage does depend on what the numpy array is filled with (zero, ones, full, random) which is bizarre.
I might do some more experiments and get info from gc
from pi3d.
Hmm, from what I understand memory management in opengl is hardware/driver dependent and nvidia driver may well keep memory allocated in ram as well as in vram (for swapping I guess). It may not be an issue with other hardwares (it isn't with that aforementioned intel integrated graphic card).
from pi3d.
Running the script with a system ram consumption limit made it a lot slower but eventually all the textures got into the vram while ram usage stood under the limit (which was 4x lower than the total allocated vram), this could well corroborate the nvidia-swap theory.
from pi3d.
Related Issues (20)
- problems running on fedora28 HOT 8
- position a gui element in corner of windows - track resizes? HOT 2
- "X11 needs to be running" on Ubuntu Desktop 19.10 (intel cpu/gpu) HOT 4
- Name only shows for 1 second, and disappears. HOT 2
- How to add touchscreen support HOT 2
- 'assert r' error due to old API usage and advice on latest API usage HOT 16
- pi3d on Ubuntu 20.04 HOT 11
- DISPLAY_CONFIG_NO_RESIZE makes the window resizable
- pi3d.Slice() unexpected angle HOT 4
- Blue Screen (Not BSOD) on relaunch of pi3d HOT 9
- gltf support? HOT 2
- problem running examples in CLI mode (no context) HOT 2
- Run PictureFrame.py without indexing? HOT 1
- Win 10 not every example is working HOT 6
- AttributeError: 'NoneType' object has no attribute 'glActiveTexture' HOT 6
- AttributeError: 'DisplayOpenGL' object has no attribute 'context' HOT 1
- Not work on Win 10 Py 3.11 HOT 2
- pi3d 2.49 not working with Pillow 10.0.0
- Windows Exception in DisplayOpenGL.py HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pi3d.