[Openmcl-devel] Understanding the impact of consing

Gary Byers gbyersnm at gmail.com
Sat Aug 6 19:48:31 PDT 2016


I enjoyed reading your blog post,


One thing that people seem not to realize is that the cost of consing

depends on how and for how long the allocated object is referenced.  Most

of the work done by the GC involves  the non-garbage objects that survive,

and it is easy to see this.


(defun keep (n l)
   (unless (zerop n)
     (keep (1- n) (cons l nil))))

(defun drop (n l)
   (unless (zerop n)
     (drop (1- n) (cdr (cons l nil)))))

Try calling

(time (drop (ash 256 30) nil))

.and then try calling

(time (keep (ash 256 30) nil))


each call will allocate around 4 gb (and you may need to ensure

that you have adequate physical memory in the KEEP case.  I think

uou'll likely find that consing short-lived data is often very cheap,

and that preventing the the gc from reclaiming memory can be a very costly

thing to do.


at one point, the blog post speculates that



triggering the GC more frequently [may be] helping somehow by compacting 
the remaining garbag





note that the gc may compact or otherwise reorganize the non-garbage 
(the live data that survives the gc.)
.
Doing so may may reduce the number of cache lines, pages, and other 
finite resources code needs to
process that data, and that can be a measurably good thing.

On 08/06/2016 07:21 AM, Max Rottenkolber wrote:
> Hi everyone,
>
> I have written a blog post about the challenges I encountered during the
> development of MaxPC,¹ a combinatory parsing library. In one section I talk
> about how consing affects performance on CCL (or not), and I don't have answers
> to some of my observations. I would be extremely grateful to someone with a
> better understanding of CCL internals than me to fact/sanity check the section
> “To Cons, or Not to Cons?” specifically:
>
>    http://mr.gy/blog/maxpc.html#section-3-2
>
> (I would include a text version, but without the diagram it makes little
> sense.) Understanding what’s going on might require reading the source (links
> to the relevant sections are in the benchmark diagram description), which is
> probably too much to ask, but who knows, maybe someone finds this as
> interesting as I do.
>
> Thanks in advance to anyone who donates their attention.
>
> Cheers,
> max
>
> [1]: https://github.com/eugeneia/maxpc
>
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> https://lists.clozure.com/mailman/listinfo/openmcl-devel




More information about the Openmcl-devel mailing list