LIBJXL
|
implementation using std::thread of a resizeable 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 | JxlResizableParallelRunner (void *runner_opaque, void *jpegxl_opaque, JxlParallelRunInit init, JxlParallelRunFunction func, uint32_t start_range, uint32_t end_range) |
JXL_THREADS_EXPORT void * | JxlResizableParallelRunnerCreate (const JxlMemoryManager *memory_manager) |
JXL_THREADS_EXPORT void | JxlResizableParallelRunnerSetThreads (void *runner_opaque, size_t num_threads) |
JXL_THREADS_EXPORT uint32_t | JxlResizableParallelRunnerSuggestThreads (uint64_t xsize, uint64_t ysize) |
JXL_THREADS_EXPORT void | JxlResizableParallelRunnerDestroy (void *runner_opaque) |
implementation using std::thread of a resizeable JxlParallelRunner.
JXL_THREADS_EXPORT JxlParallelRetCode JxlResizableParallelRunner | ( | 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 can be changed after creation of the thread pool; the threads (including the main thread) are re-used for every ResizableParallelRunner::Runner call. Only one concurrent JxlResizableParallelRunner 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.
Compared to the implementation in thread_parallel_runner.h, this implementation is tuned for execution on lower-powered systems, including for example ARM CPUs with big.LITTLE computation models. Parallel runner internally using std::thread. Use as JxlParallelRunner.
JXL_THREADS_EXPORT void * JxlResizableParallelRunnerCreate | ( | const JxlMemoryManager * | memory_manager | ) |
Creates the runner for JxlResizableParallelRunner. Use as the opaque runner. The runner will execute tasks on the calling thread until JxlResizableParallelRunnerSetThreads is called.
JXL_THREADS_EXPORT void JxlResizableParallelRunnerDestroy | ( | void * | runner_opaque | ) |
Destroys the runner created by JxlResizableParallelRunnerCreate.
JXL_THREADS_EXPORT void JxlResizableParallelRunnerSetThreads | ( | void * | runner_opaque, |
size_t | num_threads | ||
) |
Changes the number of threads for JxlResizableParallelRunner.
JXL_THREADS_EXPORT uint32_t JxlResizableParallelRunnerSuggestThreads | ( | uint64_t | xsize, |
uint64_t | ysize | ||
) |
Suggests a number of threads to use for an image of given size.