Expand description
Implementation using std::thread of a JxlParallelRunner.
Implementation of JxlParallelRunner that can be used to enable
multithreading when using the JPEG XL library. This uses std::thread
internally and related synchronization functions. The number of threads
created is fixed at construction time and the threads are re-used for every
ThreadParallelRunner::Runner call. Only one concurrent
JxlThreadParallelRunner call per instance is allowed at a time.
This is a scalable, lower-overhead thread pool runner, especially suitable for data-parallel computations in the fork-join model, where clients need to know when all tasks have completed.
This thread pool can efficiently load-balance millions of tasks using an
atomic counter, thus avoiding per-task virtual or system calls. With 48
hyperthreads and 1M tasks that add to an atomic counter, overall runtime is
10-20x higher when using std::async, and ~200x for a queue-based thread
pool.
Functions§
- JxlThread
Parallel ⚠Runner - Parallel runner internally using
std::thread. Use asJxlParallelRunner. - JxlThread
Parallel ⚠Runner Create - Creates the runner for
JxlThreadParallelRunner. Use as the opaque runner. - JxlThread
Parallel ⚠Runner Default NumWorker Threads - Returns a default
num_worker_threadsvalue forJxlThreadParallelRunnerCreate. - JxlThread
Parallel ⚠Runner Destroy - Destroys the runner created by
JxlThreadParallelRunnerCreate.