BluFedora Job System v1.0.0
This is a C++ job system library for use in game engines.
job_system.cpp File Reference

API for a multi-threading job system. More...

#include "concurrent/job_api.hpp"
#include "concurrent/job_assert.hpp"
#include "concurrent/job_queue.hpp"
#include "pcg_basic.h"
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <limits>
#include <new>
#include <thread>
#include "pcg_basic.c"

Go to the source code of this file.

Classes

struct  Job::TaskPtr
 
union  Job::TaskFnStorage
 
struct  Job::Task
 
union  Job::TaskMemoryBlock
 
struct  Job::TaskPool
 
struct  Job::ThreadLocalState
 
struct  Job::InitializationLock
 
struct  Job::JobSystemContext
 

Namespaces

namespace  Job
 
namespace  system
 
namespace  task_pool
 
namespace  task
 
namespace  worker
 
namespace  config
 

Macros

#define NativePause   std::this_thread::yield
 

Typedefs

using Job::TaskHandle = std::uint16_t
 
using Job::TaskHandleType = TaskHandle
 
using Job::AtomicTaskHandleType = std::atomic< TaskHandle >
 
using Job::WorkerIDType = WorkerID
 
using Job::AtomicInt32 = std::atomic_int32_t
 
using Job::Byte = unsigned char
 
using Job::AtomicTaskPtr = std::atomic< TaskPtr >
 

Variables

static constexpr std::size_t Job::k_CachelineSize = 64u
 
static constexpr std::size_t Job::k_ExpectedTaskSize = std::max(std::size_t(128u), k_CachelineSize)
 
static constexpr QueueType Job::k_InvalidQueueType = QueueType(int(QueueType::WORKER) + 1)
 
static constexpr TaskHandle Job::NullTaskHandle = std::numeric_limits<TaskHandle>::max()
 
static Job::JobSystemContextg_JobSystem = nullptr
 
static thread_local Job::ThreadLocalStateg_CurrentWorker = nullptr
 

Detailed Description


Class Documentation

◆ Job::TaskMemoryBlock

union Job::TaskMemoryBlock

Definition at line 167 of file job_system.cpp.

Class Members
TaskMemoryBlock * next
unsigned char storage[sizeof(Task)]

◆ Job::TaskPool

struct Job::TaskPool

Definition at line 174 of file job_system.cpp.

Class Members
TaskMemoryBlock * memory
TaskMemoryBlock * freelist

◆ Job::ThreadLocalState

struct Job::ThreadLocalState

Definition at line 180 of file job_system.cpp.

Class Members
SPMCDeque< TaskPtr > normal_queue
SPMCDeque< TaskPtr > worker_queue
TaskPool task_allocator
TaskHandle * allocated_tasks
TaskHandleType num_allocated_tasks
ThreadLocalState * last_stolen_worker
pcg_state_setseq_64 rng_state
thread thread_id

◆ Job::InitializationLock

struct Job::InitializationLock

Definition at line 192 of file job_system.cpp.

Class Members
mutex init_mutex
condition_variable init_cv
atomic_uint32_t num_workers_ready

◆ Job::JobSystemContext

struct Job::JobSystemContext

Definition at line 199 of file job_system.cpp.

Class Members
ThreadLocalState * workers
uint32_t num_workers
uint32_t num_owned_workers
atomic_uint32_t num_user_threads_setup
uint32_t num_tasks_per_worker
InitializationLock init_lock
const char * sys_arch_str
size_t system_alloc_size
size_t system_alloc_alignment
bool needs_delete
atomic_bool is_running
LockedQueue< TaskPtr > main_queue
mutex worker_sleep_mutex
condition_variable worker_sleep_cv
atomic_uint32_t num_available_jobs

Macro Definition Documentation

◆ NativePause

#define NativePause   std::this_thread::yield

Definition at line 1195 of file job_system.cpp.

Variable Documentation

◆ g_JobSystem

◆ g_CurrentWorker

thread_local Job::ThreadLocalState* g_CurrentWorker = nullptr
static