|
The qthreads API is designed to make using large
numbers of threads convenient and easy, and to allow
portable access to threading constructs used in
massively parallel shared memory environments. The
API maps well to both MTA-style threading and
PIM-style threading, and is still quite useful in a
standard SMP context. The qthreads API provides
access to full/empty-bit (FEB) semantics, where every
word of memory can be marked either full or empty,
and a thread can wait for any word to attain either
state.
The qthreads library on an SMP (i.e. the POSIX
implementation) is essentially a library for spawning
and controlling coroutines: threads with small (4k)
stacks. The threads are entirely in user-space and
use their blocked/unblocked status as part of their
scheduling. The library's metaphor is that there are
many qthreads and several "shepherds". Shepherds can
be thought of as a thread mobility domain; they
map to specific processors or memory
regions. Qthreads are assigned to specific shepherds
and do not migrate unless directed to migrate.
The API includes utility functions for making
threaded loops, sorting, and similar operations
convenient.
The Qthread library was developed to explore
innovations in highly concurrent systems where the
ultimate system either does not exist, or is
sufficiently hard to obtain that development of
software for the system becomes difficult.
Platforms & Requirements
To compile and run the POSIX Qthreads you will
require:
- A UNIX-like shell (Qthreads uses the GNU
Autotools)
- GNU Make
- C/C++ Compiler
To compile and run SST Qthreads you will require:
- GNU Make
- PPC C/C++ Compiler
- A full complement of static libraries (here)
Installation
Detailed installation directions are included in
the INSTALL file in the distribution (see the link on
the left).
Papers & Publications
To cite qthreads, please use:
- Qthreads: An API for Programming with Millions of Lightweight Threads
Kyle Wheeler, Richard Murphy, Douglas Thain
In the Proceedings of the 22nd IEEE International Parallel & Distributed Processing Symposium (IPDPS '08, in the MTAAP '08 workshop), IEEE Press, 2008.
Additional related publications:
- Implementing a Portable Multi-threaded Graph Library: the MTGL on Qthreads
Brian Barrett, Jonathan Berry, Richard Murphy, Kyle Wheeler
In the Proceedings of the 23rd IEEE International Parallel & Distributed Processing Symposium (IPDPS '09, in the MTAAP '09 workshop), IEEE Press, 2009.
- Portable Performance from Workstation to Supercomputer: Distributing Data Structures with Qthreads
Kyle Wheeler, Douglas Thain, Richard Murphy
In the Proceedings of the First Workshop on Programming Models for Emerging Architectures (PMEA), IEEE Press, 2009.
API 1.2 Documentation
- Basic Threading
- Futures
- Locking & Atomic Operations
- Threaded Loops
- Futurelib (aka the C++ bindings)
- Qloop (aka the C bindings)
- Qutil
- qutil_double_max,
qutil_uint_max,
qutil_int_max
- qutil_double_min,
qutil_uint_min,
qutil_int_min
- qutil_double_mult,
qutil_uint_mult,
qutil_int_mult
- qutil_double_sum,
qutil_uint_sum,
qutil_int_sum
- qutil_mergesort,
qutil_qsort
- qt_double_max, qt_uint_max, qt_int_max
- qt_double_min, qt_uint_min, qt_int_min
- qt_double_prod, qt_uint_prod, qt_int_prod
- qt_double_sum, qt_uint_sum, qt_int_sum
- Memory Allocation
- Distributed Data Structures
- Qpool (distributed memory pool)
- Qarray (distributed array)
- Qlfqueue (lock-free ordered queue)
- Qdqueue (distributed end-to-end ordered queue)
- Computational Templates
Top of page
|
Contacts
|