> On Dec 17, 2016, at 11:13 AM, Brian Gesiak via swift-dev 
> <swift-dev@swift.org> wrote:
> 
> Hello all!
> 
> I really enjoyed Chris Lattner's slides from his talk at IBM 
> <http://researcher.watson.ibm.com/researcher/files/us-lmandel/lattner.pdf 
> <http://researcher.watson.ibm.com/researcher/files/us-lmandel/lattner.pdf>>. 
> 
> The speaker notes mention ARC:
> 
> "There are two principle downsides to ARC that people cite: one is the need 
> for atomic increment/decrements, which can be slow." [...] "The performance 
> problems it can cause are real in some important cases"
> 
> Can someone point me to a good resource that explains these problems? I guess 
> atomic reference count changes create overhead in multithreaded applications? 
> Are there more detailed explorations into this topic?

With a proper concurrency model, I believe you can make most reference counting 
operations local (my opinion). I have done some explorations in this area in 
the past using what I call thread local vs global reference counts and using 
marked concurrency boundaries to mediate transitions in between them (moving 
from thread local -> atomic of course if one escapes in an undefined way).

If you are interested in the perf difference with ARC atomics, Roman recently 
added a mode to the compiler called -assume-single-threaded that uses 
non-atomic reference counts anywhere.

There are some interesting optimizations in this area as well, specifically 
even today, COW gives a nice guarantee of thread localness allowing you to 
eliminate atomic reference counts once you have a uniqued cow data structure.

Michael

> 
> Thanks!
> 
> - Brian Gesiak
> 
> _______________________________________________
> swift-dev mailing list
> swift-dev@swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to