Hi Morten,
 
> Hi Honnappa, Konstantin, Bruce and Gavin,
> 
> You might find this ring algorithm optimization article interesting:
> https://rigtorp.se/ringbuffer/
> 
> 
> It adds the following optimization:
> 
> The single-producer put() operation keeps a cache of the consumer's index. If 
> the cached consumer index indicates that there was still
> sufficient room in the ring after the previous put() operation, it doesn't 
> need to fetch the actual consumer index, and thus avoids a
> potential L1 cache miss (because the actual consumer index is written by the 
> consumer threads).
> 
> If the cached index doesn't indicate that there is sufficient room in the 
> ring, the operation behaves like without the optimization, i.e. it
> proceeds to fetch the actual consumer index (and writes it to its cache) and 
> determines if there is sufficient room in the ring.
> 
> 
> Similarly, the single-consumer get() operation caches the producer's index to 
> determine if there were still sufficient objects present in
> the ring after the previous get() operation.
> 

Indeed, that sounds like an interesting idea and worth to explore.
Thinking a bit more - it probably could be extended to classic MP/MC case too -
If we can update cons/prod head and this cached value atomically (CAS64?).
Thanks
Konstantin

Reply via email to