|
LIBJXL
|
implementation using std::thread of a JxlParallelRunner. More...
#include <stddef.h>#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include "jxl/jxl_threads_export.h"#include "jxl/memory_manager.h"#include "jxl/parallel_runner.h"

Go to the source code of this file.
Functions | |
| JXL_THREADS_EXPORT JxlParallelRetCode | JxlThreadParallelRunner (void *runner_opaque, void *jpegxl_opaque, JxlParallelRunInit init, JxlParallelRunFunction func, uint32_t start_range, uint32_t end_range) |
| JXL_THREADS_EXPORT void * | JxlThreadParallelRunnerCreate (const JxlMemoryManager *memory_manager, size_t num_worker_threads) |
| JXL_THREADS_EXPORT void | JxlThreadParallelRunnerDestroy (void *runner_opaque) |
| JXL_THREADS_EXPORT size_t | JxlThreadParallelRunnerDefaultNumWorkerThreads () |
implementation using std::thread of a JxlParallelRunner.
| JXL_THREADS_EXPORT JxlParallelRetCode JxlThreadParallelRunner | ( | void * | runner_opaque, |
| void * | jpegxl_opaque, | ||
| JxlParallelRunInit | init, | ||
| JxlParallelRunFunction | func, | ||
| uint32_t | start_range, | ||
| uint32_t | end_range | ||
| ) |
Implementation of JxlParallelRunner than 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 Parallel runner internally using std::thread. Use as JxlParallelRunner.
| JXL_THREADS_EXPORT void * JxlThreadParallelRunnerCreate | ( | const JxlMemoryManager * | memory_manager, |
| size_t | num_worker_threads | ||
| ) |
Creates the runner for JxlThreadParallelRunner. Use as the opaque runner.
| JXL_THREADS_EXPORT size_t JxlThreadParallelRunnerDefaultNumWorkerThreads | ( | ) |
Returns a default num_worker_threads value for JxlThreadParallelRunnerCreate.
| JXL_THREADS_EXPORT void JxlThreadParallelRunnerDestroy | ( | void * | runner_opaque | ) |
Destroys the runner created by JxlThreadParallelRunnerCreate.