> 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