Blender V4.3
task_iterator.c File Reference
#include <stdlib.h>
#include "MEM_guardedalloc.h"
#include "BLI_mempool.h"
#include "BLI_mempool_private.h"
#include "BLI_task.h"
#include "BLI_threads.h"

Go to the source code of this file.

Classes

struct  ParallelMempoolState
 

Macros

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

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 25 of file task_iterator.c.

Referenced by BLI_task_parallel_mempool().

◆ MALLOCA_FREE

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

Definition at line 26 of file task_iterator.c.

Referenced by BLI_task_parallel_mempool().

Typedef Documentation

◆ ParallelMempoolState

typedef struct ParallelMempoolState ParallelMempoolState

Function Documentation

◆ BLI_task_parallel_mempool()

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.

Parameters
mempoolThe iterable BLI_mempool to loop over.
userdataCommon userdata passed to all instances of func.
funcCallback function.
settingsSee public API doc of TaskParallelSettings for description of all settings.
Note
There is no static scheduling here.

Definition at line 55 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(), MALLOCA, MALLOCA_FREE, mempool_iter_threadsafe_create(), mempool_iter_threadsafe_destroy(), NULL, parallel_mempool_func(), state, task_pool, TASK_PRIORITY_HIGH, ParallelMempoolTaskData::tls, UNLIKELY, and TaskParallelTLS::userdata_chunk.

Referenced by armature_deform_coords_impl(), lattice_deform_coords_impl(), TEST(), and TEST().

◆ parallel_mempool_func()

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