Quoting Nicolai Hähnle (2017-10-10 09:30:31)
> On 10.10.2017 04:45, Timothy Arceri wrote:
> > While modern pthread mutexes are very fast, they still incur a call to an
> > external DSO and overhead of the generality and features of pthread mutexes.
> > Most mutexes in mesa only needs lock/unlock, and the idea here is that we 
> > can
> > inline the atomic operation and make the fast case just two intructions.
> > Mutexes are subtle and finicky to implement, so we carefully copy the
> > implementation from Ulrich Dreppers well-written and well-reviewed paper:
> > 
> >    "Futexes Are Tricky"
> >    http://www.akkadia.org/drepper/futex.pdf
> > 
> > We implement "mutex3", which gives us a mutex that has no syscalls on
> > uncontended lock or unlock.  Further, the uncontended case boils down to a
> > cmpxchg and an untaken branch and the uncontended unlock is just a locked 
> > decr
> > and an untaken branch.  We use __builtin_expect() to indicate that 
> > contention
> > is unlikely so that gcc will put the contention code out of the main code
> > flow.
> > 
> > A fast mutex only supports lock/unlock, can't be recursive or used with
> > condition variables.  We keep the pthread mutex implementation around as
> > full_mtx_t for the few places where we use condition variables or recursive
> > locking.  For platforms or compilers where futex and atomics aren't 
> > available,
> > mtx_t falls back to the pthread mutex.
> > 
> > The pthread mutex lock/unlock overhead shows up on benchmarks for CPU bound
> > applications.  Most CPU bound cases are helped and some of our internal
> > bind_buffer_object heavy benchmarks gain up to 10%.
> > 
> > Signed-off-by: Kristian Høgsberg <[email protected]>
> > Signed-off-by: Timothy Arceri <[email protected]>
> > ---
> >   configure.ac          |   3 ++
> >   src/util/simple_mtx.h | 146 
> > ++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Add to util/Makefile.sources

Also add to util/meson.build

Dylan

Attachment: signature.asc
Description: signature

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to