Module thread_parallel_runner

Module thread_parallel_runner 

Source
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§

JxlThreadParallelRunner
Parallel runner internally using std::thread. Use as JxlParallelRunner.
JxlThreadParallelRunnerCreate
Creates the runner for JxlThreadParallelRunner. Use as the opaque runner.
JxlThreadParallelRunnerDefaultNumWorkerThreads
Returns a default num_worker_threads value for JxlThreadParallelRunnerCreate.
JxlThreadParallelRunnerDestroy
Destroys the runner created by JxlThreadParallelRunnerCreate.