Array append performance revisited

Chad J gamerchad at __spam.is.bad__gmail.com
Tue Sep 30 21:18:25 PDT 2008


dsimcha wrote:
> == Quote from dsimcha (dsimcha at yahoo.com)'s article
>> A while back, there were some discussions about capacity fields, etc. on this
>> forum.  I was looking at the GC implementation, and, if we want to speed up
>> array appends in a dead simple way without really much, I think we can gain a
>> lot by simply making the size cache in gcx.d thread-local in D2.  When
>> appending to arrays in multiple threads, not only is one paying for frequent
>> size cache lookups, but one is also having all of their threads block on this
>> synchronization.
>> We have:
>> struct Gcx {
>>     void *p_cache;
>>     size_t size_cache;
>> }
>> Would it help to just make these two variables thread-local?
> 
> Never mind, this is a *very* bad idea for obvious reasons.  When I wrote the
> initial post, I only thought of the case where each array that's being appended to
> is, for all practical purposes, owned by a single thread.

Well, there are probably going to be programs where that is the case, 
namely as determined by escape analysis or in pure functions.  So have 
one code/data path for the special case of single-thread arrays, and 
another for the general case.  Maybe that would work?  Not sure if it 
would be so dead simple though.



More information about the Digitalmars-d mailing list