Blender
V3.3
|
#include <stdlib.h>
#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_mempool.h"
#include "BLI_mempool_private.h"
#include "BLI_task.h"
#include "BLI_threads.h"
#include "atomic_ops.h"
Go to the source code of this file.
Classes | |
struct | TaskParallelIteratorState |
struct | ParallelMempoolState |
Macros | |
Macros | |
#define | MALLOCA(_size) ((_size) <= 8192) ? alloca((_size)) : MEM_mallocN((_size), __func__) |
#define | MALLOCA_FREE(_mem, _size) |
Functions | |
ListBase Iteration | |
static void | task_parallel_listbase_get (void *__restrict UNUSED(userdata), const TaskParallelTLS *__restrict UNUSED(tls), void **r_next_item, int *r_next_index, bool *r_do_abort) |
void | BLI_task_parallel_listbase (ListBase *listbase, void *userdata, TaskParallelIteratorFunc func, const TaskParallelSettings *settings) |
Generic Iteration | |
typedef struct TaskParallelIteratorState | TaskParallelIteratorState |
BLI_INLINE void | task_parallel_calc_chunk_size (const TaskParallelSettings *settings, const int items_num, int tasks_num, int *r_chunk_size) |
static void | parallel_iterator_func_do (TaskParallelIteratorState *__restrict state, void *userdata_chunk) |
static void | parallel_iterator_func (TaskPool *__restrict pool, void *userdata_chunk) |
static void | task_parallel_iterator_no_threads (const TaskParallelSettings *settings, TaskParallelIteratorState *state) |
static void | task_parallel_iterator_do (const TaskParallelSettings *settings, TaskParallelIteratorState *state) |
void | BLI_task_parallel_iterator (void *userdata, TaskParallelIteratorIterFunc iter_func, void *init_item, const int init_index, const int items_num, TaskParallelIteratorFunc func, const TaskParallelSettings *settings) |
MemPool Iteration | |
typedef struct ParallelMempoolState | ParallelMempoolState |
static void | parallel_mempool_func (TaskPool *__restrict pool, void *taskdata) |
void | BLI_task_parallel_mempool (BLI_mempool *mempool, void *userdata, TaskParallelMempoolFunc func, const TaskParallelSettings *settings) |
Parallel tasks over all elements in a container.
Definition in file task_iterator.c.
#define MALLOCA | ( | _size | ) | ((_size) <= 8192) ? alloca((_size)) : MEM_mallocN((_size), __func__) |
Definition at line 29 of file task_iterator.c.
#define MALLOCA_FREE | ( | _mem, | |
_size | |||
) |
Definition at line 30 of file task_iterator.c.
typedef struct ParallelMempoolState ParallelMempoolState |
typedef struct TaskParallelIteratorState TaskParallelIteratorState |
void BLI_task_parallel_iterator | ( | void * | userdata, |
TaskParallelIteratorIterFunc | iter_func, | ||
void * | init_item, | ||
int | init_index, | ||
int | items_num, | ||
TaskParallelIteratorFunc | func, | ||
const TaskParallelSettings * | settings | ||
) |
This function allows to parallelize for loops using a generic iterator.
userdata | Common userdata passed to all instances of func. |
iter_func | Callback function used to generate chunks of items. |
init_item | The initial item, if necessary (may be NULL if unused). |
init_index | The initial index. |
items_num | The total amount of items to iterate over (if unknown, set it to a negative number). |
func | Callback function. |
settings | See public API doc of TaskParallelSettings for description of all settings. |
Definition at line 263 of file task_iterator.c.
References state, and task_parallel_iterator_do().
void BLI_task_parallel_listbase | ( | struct ListBase * | listbase, |
void * | userdata, | ||
TaskParallelIteratorFunc | func, | ||
const TaskParallelSettings * | settings | ||
) |
This function allows to parallelize for loops over ListBase items.
listbase | The double linked list to loop over. |
userdata | Common userdata passed to all instances of func. |
func | Callback function. |
settings | See public API doc of ParallelRangeSettings for description of all settings. |
Definition at line 306 of file task_iterator.c.
References BLI_listbase_count(), BLI_listbase_is_empty(), ListBase::first, state, task_parallel_iterator_do(), and task_parallel_listbase_get().
Referenced by task_listbase_test_do(), and TEST().
void BLI_task_parallel_mempool | ( | struct BLI_mempool * | mempool, |
void * | userdata, | ||
TaskParallelMempoolFunc | func, | ||
const TaskParallelSettings * | settings | ||
) |
This function allows to parallelize for loops over Mempool items.
mempool | The iterable BLI_mempool to loop over. |
userdata | Common userdata passed to all instances of func. |
func | Callback function. |
settings | See public API doc of TaskParallelSettings for description of all settings. |
Definition at line 351 of file task_iterator.c.
References BLI_mempool_iternew(), BLI_mempool_iterstep(), BLI_mempool_len(), BLI_task_pool_create(), BLI_task_pool_free(), BLI_task_pool_push(), BLI_task_pool_work_and_wait(), BLI_task_scheduler_num_threads(), TaskParallelSettings::func_free, TaskParallelSettings::func_init, TaskParallelSettings::func_reduce, MALLOCA, MALLOCA_FREE, mempool_iter_threadsafe_create(), mempool_iter_threadsafe_destroy(), NULL, parallel_mempool_func(), state, task_pool, TASK_PRIORITY_HIGH, ParallelMempoolTaskData::tls, UNLIKELY, TaskParallelSettings::use_threading, TaskParallelTLS::userdata_chunk, TaskParallelSettings::userdata_chunk, and TaskParallelSettings::userdata_chunk_size.
Referenced by armature_deform_coords_impl(), lattice_deform_coords_impl(), and TEST().
Definition at line 157 of file task_iterator.c.
References BLI_task_pool_user_data(), parallel_iterator_func_do(), blender::compositor::pool, and state.
Referenced by task_parallel_iterator_do().
|
static |
Definition at line 101 of file task_iterator.c.
References BLI_spin_lock(), BLI_spin_unlock(), MALLOCA, MALLOCA_FREE, NULL, state, and TaskParallelTLS::userdata_chunk.
Referenced by parallel_iterator_func(), and task_parallel_iterator_no_threads().
Definition at line 339 of file task_iterator.c.
References BLI_task_pool_user_data(), mempool_iter_threadsafe_step(), NULL, blender::compositor::pool, and state.
Referenced by BLI_task_parallel_mempool().
BLI_INLINE void task_parallel_calc_chunk_size | ( | const TaskParallelSettings * | settings, |
const int | items_num, | ||
int | tasks_num, | ||
int * | r_chunk_size | ||
) |
Definition at line 42 of file task_iterator.c.
References BLI_assert, blender::io::obj::chunk_size, max_ii(), TaskParallelSettings::min_iter_per_thread, and TaskParallelSettings::use_threading.
Referenced by task_parallel_iterator_do().
|
static |
Definition at line 188 of file task_iterator.c.
References BLI_assert, BLI_spin_end(), BLI_spin_init(), BLI_task_pool_create(), BLI_task_pool_free(), BLI_task_pool_push(), BLI_task_pool_work_and_wait(), BLI_task_scheduler_num_threads(), blender::io::obj::chunk_size, TaskParallelSettings::func_free, TaskParallelSettings::func_init, TaskParallelSettings::func_reduce, MALLOCA, MALLOCA_FREE, min_ii(), NULL, parallel_iterator_func(), state, task_parallel_calc_chunk_size(), task_parallel_iterator_no_threads(), task_pool, TASK_PRIORITY_HIGH, TaskParallelSettings::use_threading, TaskParallelSettings::userdata_chunk, and TaskParallelSettings::userdata_chunk_size.
Referenced by BLI_task_parallel_iterator(), and BLI_task_parallel_listbase().
|
static |
Definition at line 164 of file task_iterator.c.
References TaskParallelSettings::func_free, TaskParallelSettings::func_init, NULL, parallel_iterator_func_do(), state, and TaskParallelSettings::userdata_chunk.
Referenced by task_parallel_iterator_do().
|
static |
Definition at line 290 of file task_iterator.c.
References Link::next, and NULL.
Referenced by BLI_task_parallel_listbase().