[Mesa-dev] [PATCH 0/5] [RFC] r600g/compute: Adding support for defragmenting compute_memory_pool
Bruno Jiménez
brunojimen at gmail.com
Wed Jul 16 14:12:42 PDT 2014
Hi,
This series finally adds support for defragmenting the pool for
OpenCL buffers in the r600g driver. It is mostly a rewritten of
the series that I wrote some months ago.
For defragmenting the pool I have thought of two different
possibilities:
- Creating a new pool and moving every item here in the correct
position. This has the advantage of being very simple to
implement and that it allows the pool to be grown at the
same time. But it has a couple of problems, namely that it
has a high memory peak usage (sum of current pool + new pool)
and that in the case of having a pool not very fragmented you
have to copy every item to its new place.
- Using the same pool by moving the items in it. This has the
advantage of using less memory (sum of current pool + biggest
item in it) and that it is easier to handle the case of
only having few elements out of place. The disadvantages
are that it doesn't allow growing the pool at the same time
and that it may involve twice the number of item-copies in
the worst case.
I have chosen to implement the second option, but if you think
that it is better the first one I can rewrite the series for it.
(^_^)
The worst case I have mentioned is this: Imagine that you have
a series of items in which the first is, at least, 1 'unit'
smaller than the rest. You now free this item and create a new
one with the same size [why would anyone do this? I don't know]
For now, the defragmenter code is so dumb that it will move
every item to the front of the pool without trying first to
put this new item in the available space.
Hopefully situations like this won't be very common.
If you want me to explain any detail about any of the patches
just ask. And as said, if you prefer the first version of the
defragmenter, just ask. [In fact, after having written this,
I may add it for the case grow+defrag]
Also, no regressions found in piglit.
Thanks in advance!
Bruno
Bruno Jiménez (5):
r600g/compute: Add a function for moving items in the pool
r600g/compute: Add a function for defragmenting the pool
r600g/compute: Defrag the pool if it's necesary
r600g/compute: Quick exit if there's nothing to add to the pool
r600g/compute: Remove unneeded code from compute_memory_promote_item
src/gallium/drivers/r600/compute_memory_pool.c | 196 ++++++++++++++++++-------
src/gallium/drivers/r600/compute_memory_pool.h | 13 +-
2 files changed, 156 insertions(+), 53 deletions(-)
--
2.0.1
More information about the mesa-dev
mailing list