MxTasking is a task-based framework for many-core hardware, both current and future. The MxTask is the main abstraction of MxTasking. An MxTask is a short code sequence that performs a single, modest unit of work and is guaranteed to run without interruption. MxTasking's true power resides in the ability to apply annotations to each MxTask. Applications can use annotations to communicate task characteristics to the execution unit, such as runtime characteristics (such as predicted resource needs); information about connected data objects (such as access intention such as read or write access); or desired scheduling priorities. MxTasking will then optimize resource allocation, scheduling, and placement based on this knowledge.
- Jan Mühlig and Jens Teubner. 2021. MxTasks: How to Make Efficient Synchronization and Prefetching Easy. SIGMOD '21: International Conference on Management of Data, 1331-1334. Download the PDF
- The original source code was already published on GitHub: MxTasking at GitHub.
The memory component can be found in the memory folder. It implements different memory allocators (the fixed size allocator mainly for tasks with a static size and the dynamic size allocator for variable sized data objects). Further, epoch-based memory reclamation is implemented by the epoch manager.
Different (task-) queues can be found in the queue folder. It provides
- a non-synchronized single-core queue (for fast core-local dispatching),
- a multi-producer single-consumer queue (for dispatching tasks to remote cores),
- and a (bound) multi-producer multi-consumer queue (mainly used for memory-reclamation).
The resource component can be found in the resource folder. This package encapsulates
- annotations for resources,
- the resource builder which creates and schedules resources,
- a tagged pointer instance that links to resources including information (synchronization method and worker id),
- and the resource interface that has to be implemented by each to synchronized resource.
The synchronization component can be found in the synchronization folder. This package provides different synchronization methods (optimistic lock, rw lock, spinlock) and structures to define the required synchronization level.
The tasking core can be found in the tasking folder. For more information see the tasking-specific readme.