LIBJXL
Functions
resizable_parallel_runner.h File Reference

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"
Include dependency graph for resizable_parallel_runner.h:
This graph shows which files directly or indirectly include this file:

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)
 

Detailed Description

implementation using std::thread of a resizeable JxlParallelRunner.

Function Documentation

◆ JxlResizableParallelRunner()

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.

◆ JxlResizableParallelRunnerCreate()

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.

◆ JxlResizableParallelRunnerDestroy()

JXL_THREADS_EXPORT void JxlResizableParallelRunnerDestroy ( void *  runner_opaque)

Destroys the runner created by JxlResizableParallelRunnerCreate.

◆ JxlResizableParallelRunnerSetThreads()

JXL_THREADS_EXPORT void JxlResizableParallelRunnerSetThreads ( void *  runner_opaque,
size_t  num_threads 
)

Changes the number of threads for JxlResizableParallelRunner.

◆ JxlResizableParallelRunnerSuggestThreads()

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.