Blender  V3.3
Classes
task_iterator.c File Reference
#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)
 

Detailed Description

Parallel tasks over all elements in a container.

Definition in file task_iterator.c.

Macro Definition Documentation

◆ MALLOCA

#define MALLOCA (   _size)    ((_size) <= 8192) ? alloca((_size)) : MEM_mallocN((_size), __func__)

Definition at line 29 of file task_iterator.c.

◆ MALLOCA_FREE

#define MALLOCA_FREE (   _mem,
  _size 
)
Value:
if (((_mem) != NULL) && ((_size) > 8192)) { \
MEM_freeN((_mem)); \
} \
((void)0)
SyclQueue void void size_t num_bytes void

Definition at line 30 of file task_iterator.c.

Typedef Documentation

◆ ParallelMempoolState

◆ TaskParallelIteratorState

Function Documentation

◆ BLI_task_parallel_iterator()

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.

Parameters
userdataCommon userdata passed to all instances of func.
iter_funcCallback function used to generate chunks of items.
init_itemThe initial item, if necessary (may be NULL if unused).
init_indexThe initial index.
items_numThe total amount of items to iterate over (if unknown, set it to a negative number).
funcCallback function.
settingsSee public API doc of TaskParallelSettings for description of all settings.
Note
Static scheduling is only available when items_num is >= 0.

Definition at line 263 of file task_iterator.c.

References state, and task_parallel_iterator_do().

◆ BLI_task_parallel_listbase()

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.

Parameters
listbaseThe double linked list to loop over.
userdataCommon userdata passed to all instances of func.
funcCallback function.
settingsSee public API doc of ParallelRangeSettings for description of all settings.
Note
There is no static scheduling here, since it would need another full loop over items to count them.

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().

◆ BLI_task_parallel_mempool()

void BLI_task_parallel_mempool ( struct BLI_mempool mempool,
void userdata,
TaskParallelMempoolFunc  func,
const TaskParallelSettings settings 
)

◆ parallel_iterator_func()

static void parallel_iterator_func ( TaskPool *__restrict  pool,
void userdata_chunk 
)
static

◆ parallel_iterator_func_do()

static void parallel_iterator_func_do ( TaskParallelIteratorState *__restrict  state,
void userdata_chunk 
)
static

◆ parallel_mempool_func()

static void parallel_mempool_func ( TaskPool *__restrict  pool,
void taskdata 
)
static

◆ task_parallel_calc_chunk_size()

BLI_INLINE void task_parallel_calc_chunk_size ( const TaskParallelSettings settings,
const int  items_num,
int  tasks_num,
int *  r_chunk_size 
)

◆ task_parallel_iterator_do()

static void task_parallel_iterator_do ( const TaskParallelSettings settings,
TaskParallelIteratorState state 
)
static

◆ task_parallel_iterator_no_threads()

static void task_parallel_iterator_no_threads ( const TaskParallelSettings settings,
TaskParallelIteratorState state 
)
static

◆ task_parallel_listbase_get()

static void task_parallel_listbase_get ( void *__restrict   UNUSEDuserdata,
const TaskParallelTLS *__restrict   UNUSEDtls,
void **  r_next_item,
int *  r_next_index,
bool r_do_abort 
)
static

Definition at line 290 of file task_iterator.c.

References Link::next, and NULL.

Referenced by BLI_task_parallel_listbase().