Boost logo

Boost :

Subject: Re: [boost] [atomic] Support for specialized instructions
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2013-11-21 06:48:34


On Thu, Nov 21, 2013 at 1:04 PM, Tim Blechmann <tim_at_[hidden]> wrote:
>
> hmmm, i see your points ... however in a way, i'd prefer if this
> functionality could be built upon boost.atomic, mainly to keep API
> compatibility with std::atomics.

I suppose, the extensions could be made just as functions. What I
don't like about this approach is the need to cast pointers to
atomic<> to pointers to the underlying integers. We have a few places
in Boost.Sync with such code and it really bothers me. Do you think we
could at least add a method to get the pointer or reference to the
internal storage inside atomic<>?

> with compiler-support for c++11 atomics, the first two instructions
> could probably be generated by a smart compiler ...

Although theoretically possible, I don't think that current compilers
are able to transform a CAS loop with an operation to an in-place
operation. Especially, if CAS is implemented in inline assembler. It's
a little easier with inc/dec but in practice I've never seen such
transformation done automatically.

> bts/btr may be
> useful, but i suppose they are rather specific to x86? i wonder, how
> would they map to arm?

AFAIK, ARM implements atomic ops with LL/SC instructions, so it should
be flexible enough to implement it. I'm not very familiar with the
architecture though.

> but, yes ... if you think it is reasonable to add them, please go ahead!

Thanks.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk