qthreads
qthreads copied to clipboard
Lightweight locality-aware user-level threading runtime.
As reported by @ronawho > I'm seeing failures for a couple types of tests. > > One failure for tests that sleep, [here](https://github.com/chapel-lang/chapel/blob/4c48d6191fa2ea46e2dcb8964a6b2d2327f865a4/runtime/src/tasks/qthreads/tasks-qthreads.c#L950-L983) it seems like when doing sleeps from...
This adds the API calls needed to help the thread sanitizer correctly carry its happens-before relationships across context swaps.
I'm seeing a handful of thread sanitizer errors about race conditions in the `qutil` code. One example: apparently the macro invoked at https://github.com/sandialabs/qthreads/blob/a2d1dbadb80a161a4a287c1056348808b022ba04/src/qutil.c#L152, https://github.com/sandialabs/qthreads/blob/a2d1dbadb80a161a4a287c1056348808b022ba04/src/qutil.c#L156, and https://github.com/sandialabs/qthreads/blob/a2d1dbadb80a161a4a287c1056348808b022ba04/src/qutil.c#L160 includes both a read...
The current implementation of FEB synchronization depends on the guarantees of x86 loads and stores. For example, when running the `hello_world_multi` test with thread sanitizer enabled numerous data races show...
The thread sanitizer is flagging several issues with the Sherwood threadqueue too. Here are a few of them: Non-atomic write: https://github.com/sandialabs/qthreads/blob/a2d1dbadb80a161a4a287c1056348808b022ba04/src/threadqueues/sherwood_threadqueues.c#L322 Non-atomic read: https://github.com/sandialabs/qthreads/blob/a2d1dbadb80a161a4a287c1056348808b022ba04/src/threadqueues/sherwood_threadqueues.c#L845 Something non-atomic is still happening in...
The thread sanitizer is flagging various issues in the distrib threadqueue. A few examples: Non-atomic write: https://github.com/sandialabs/qthreads/blob/a2d1dbadb80a161a4a287c1056348808b022ba04/src/threadqueues/distrib_threadqueues.c#L207 Non-atomic read: https://github.com/sandialabs/qthreads/blob/a2d1dbadb80a161a4a287c1056348808b022ba04/src/threadqueues/distrib_threadqueues.c#L265 Non-atomic read: https://github.com/sandialabs/qthreads/blob/a2d1dbadb80a161a4a287c1056348808b022ba04/src/threadqueues/distrib_threadqueues.c#L216 Non-atomic write: https://github.com/sandialabs/qthreads/blob/a2d1dbadb80a161a4a287c1056348808b022ba04/src/threadqueues/distrib_threadqueues.c#L374 There are several more.
It's generally a good a idea to set the default symbol visibility to "hidden" while compiling a library so that internal functions don't get automatically included in the interface exposed...
Our syncvar implementation also needs to be updated to use explicit atomic reads and writes instead of just relying on the x86 memory consistency guarantees. One example race: https://github.com/sandialabs/qthreads/blob/d6ce514a70c65b74c5e04906615ec51c7f288e0f/src/syncvar.c#L175 and...
We currently have a ton of old untested ifdefs for a bunch of crazy architectures that don't really exist in practice anymore (e.g. Tilera). We should get rid of that...