/Jobs

Robust Fiber-Driven Task-Based Parallelism Library

Primary LanguageC++MIT LicenseMIT

Jobs

Robust Fiber-Driven Task-Based Parallelism Library

Features

  • Fast scalable performance
  • Lightweight dependencies with minimal switching overhead
  • Managed dependency memory
  • Unlimited dependencies per job, allowing for complex graphs
  • Fiber-aware mutexes that allow mid-execution interruption
  • High level algorithms to abstract individual job creation and management

Motivation

With the modern trend of increasing CPU cores, a highly scalable and low overhead automated work distribution system is a critical component of the backend for many real-time applications. While many of these already exist, few benefit from the power of user mode scheduling, which allows for minimal cost switching between jobs and full control over the task scheduling. This project was primarily created as a testbed to learn how to effectively operate with fibers to create a performance-focused scheduler.

Performance

Coming soon, Tracy profiler fiber support is a work-in-progress

Building

Jobs uses premake as a project file generator.

Windows

To create your solution files, run the included premake5.exe executable with the target project type as the first commandline argument, eg. vs2019 for Visual Studio 2019 project files. Open the generated solution/project files in the specified IDE and build the default project.

Linux

To create the makefiles, run the included premake5 executable with the target action being gmake2. Then, run make to compile the project.

Options

When running the build script, the behavior can be modified via the options below.

--logging

Used to retrieve internal logs for debugging purposes, this will have signficant performance impacts.

--profiling

Creates additional projects for compiling Tracy and the included examples, enables the emission of Tracy zones for internal profiling. You must include a build of Tracy (including it's dependencies) in the project root directory, with it's premake build scripts.

Samples

Full examples of using this library can be found in the Examples/ directory.