Author: Armin Rigo <[email protected]>
Branch: array-overallocation-in-nursery
Changeset: r67807:c5de838f9d3b
Date: 2013-11-03 09:36 +0100
http://bitbucket.org/pypy/pypy/changeset/c5de838f9d3b/
Log: Be more eager in overallocating lists (but not extra eager in this
checkin; need to measure...)
diff --git a/rpython/rtyper/lltypesystem/rlist.py
b/rpython/rtyper/lltypesystem/rlist.py
--- a/rpython/rtyper/lltypesystem/rlist.py
+++ b/rpython/rtyper/lltypesystem/rlist.py
@@ -156,22 +156,34 @@
entry.
"""
# This over-allocates proportional to the list size, making room
- # for additional growth. The over-allocation is mild, but is
- # enough to give linear-time amortized behavior over a long
- # sequence of appends() in the presence of a poorly-performing
- # system malloc().
- # The growth pattern is: 0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ...
+ # for additional growth. The over-allocation is eager for small
+ # lists, and mild for large ones (but enough to give linear-time
+ # amortized behavior over a long sequence of appends()).
+ #
+ # The idea is that small lists exist in the nursery; if they
+ # survive, they will be copied out of it by the GC, which will
+ # reduce their allocated_length down to their used_length.
+ #
+ # The growth pattern is:
+ # 0, 8, 16, 32, (doubling region, adding 'newsize')
+ # 48, 72, 108, (adding 'newsize >> 1')
+ # 135, 168, 210, (adding 'newsize >> 2')
+ # 236, ... (adding 'newsize >> 3' from now on)
if newsize <= 0:
ll_assert(newsize == 0, "negative list length")
l.items = _ll_new_empty_item_array(typeOf(l).TO)
return
elif overallocate:
- if newsize < 9:
- some = 3
+ if newsize <= 4:
+ new_allocated = 8
+ elif newsize < 32:
+ new_allocated = newsize + newsize
+ elif newsize < 128:
+ new_allocated = newsize + (newsize >> 1)
+ elif newsize < 224:
+ new_allocated = newsize + (newsize >> 2)
else:
- some = 6
- some += newsize >> 3
- new_allocated = newsize + some
+ new_allocated = newsize + (newsize >> 3)
else:
new_allocated = newsize
# new_allocated is a bit more than newsize, enough to ensure an amortized
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit