digitalmars.D.bugs - [Issue 2181] New: Constant-time std.gc.removeRange
- d-bugmail puremagic.com (34/34) Jun 26 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2181
- d-bugmail puremagic.com (6/6) Jun 26 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2181
http://d.puremagic.com/issues/show_bug.cgi?id=2181 Summary: Constant-time std.gc.removeRange Product: D Version: 1.032 Platform: All OS/Version: All Status: NEW Keywords: patch Severity: enhancement Priority: P2 Component: Phobos AssignedTo: bugzilla digitalmars.com ReportedBy: default_357-line yahoo.de When profiling my StackThreads benchmark, I discovered that removeRange was taking up 90+% of my time. Looking deeper, this seems to be because removeRange always scans the complete array of ranges until it finds the correct one. The proposed patch adds an optional size_t pointer to addRange, which points to a variable intended to store the current index of the added range in the ranges array. It is stored as a new field in the Range struct, and operations that shuffle ranges around (like removeRange), update it. Then, when removing a range, the pointer is passed to an overloaded removeRange (in the form of a ref parameter, to prevent a race condition [see NG]). The overloaded removeRange replaces the pointed-to index with the last index in the array (updating its pointer), then reduces array size by one. In my benchmark, this patch reduced time in removeRange to negligible, and since it doesn't interact with the rest of Phobos, it shouldn't cause any problems. I thus request its inclusion into mainline Phobos 2. Since 1 is supposed to be stable, I do not expect it to be included in Phobos1, although I will continue to use it myself. Thanks for any feedback, --feep --
Jun 26 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2181 Created an attachment (id=260) --> (http://d.puremagic.com/issues/attachment.cgi?id=260&action=view) GC patch for constant-time removeRange --
Jun 26 2008