About
The static classes maxon::ParallelFor, maxon::ParallelImage and maxon::ParallelInvoke are used to execute parallelized code.
ParallelFor
The maxon::ParallelFor class is used to execute code defined in a worker method. This code is executed in a loop distributed over multiple threads. The workload is distributed either dynamically or statically.
- maxon::ParallelFor::Dynamic(): Runs a parallelized loop using dynamic distribution. This will usually yield the best performance and should be used as a default.
 
- maxon::ParallelFor::Static(): Runs a parallelized loop using static distribution. This will usually yield a worse performance than the dynamic distribution and should not be used unless one has to specifically enforce a static distribution.
 
    
 
    
    
 
                  {
 
                    
 
 
                    
                  };
 
    
 
    
    {
      if (pointInside)
        insideCount++;
    }
 
Py_ssize_t i
Definition: abstract.h:645
 
Py_ssize_t count
Definition: abstract.h:640
 
Definition: basearray.h:415
 
ResultMem Resize(Int newCnt, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::DEFAULT)
Definition: basearray.h:1218
 
Definition: lib_math.h:19
 
FLOAT Get01()
Returns the next random value in the range of [0..1].
 
static auto Dynamic(FROMTYPE from, INDEXTYPE to, const LOOP &obj, const Granularity &granularity=Granularity(), JobQueueInterface *queue=JOBQUEUE_CURRENT, Int deprecatedThrCnt=0) -> decltype(obj(to))
Definition: parallelfor.h:265
 
uint32_t UInt32
32 bit unsigned integer datatype.
Definition: apibase.h:191
 
Int64 Int
signed 32/64 bit int, size depends on the platform
Definition: apibase.h:202
 
Float64 Float
Definition: apibase.h:211
 
bool Bool
boolean type, possible values are only false/true, 8 bit
Definition: apibase.h:195
 
int64_t Int64
64 bit signed integer datatype.
Definition: apibase.h:192
 
#define DiagnosticOutput(formatString,...)
Definition: debugdiagnostics.h:170
 
#define iferr_return
Definition: resultbase.h:1524
 
A vector consisting of two components X and Y.
Definition: vec2.h:16
 
constexpr T GetSquaredLength() const
Returns the squared length of the vector.
Definition: vec2.h:430
 
 maxon::ParallelFor::BreakContext is a base class to define a context for maxon::ParallelFor loops that support cancellation. A class based on maxon::ParallelFor::BreakContext stores the data handled in a thread.
maxon::ParallelFor can call additional "Init" and "Finalize" functions for each thread. The behaviour is defined with these flags:
    
 
    
 
    
    {
    };
 
    
                {
                };
 
    
                  {
 
 
                  };
 
    
    auto finalize = [&insideCount](LocalData& 
context)
 
                    {
                      
                    };
 
    
    maxon::ParallelFor::Dynamic<LocalData, maxon::PARALLELFORFLAGS::INITTHREADED_FINALIZESYNC>(0, 
count, init, worker, finalize) 
iferr_return;
 
 
    
Context for ParallelFor loops that support cancellation.
Definition: parallelfor.h:216
 
void * context
Definition: pycapsule.h:49
 
  
ParallelImage
maxon::ParallelImage is a special class to process image data of a given size per pixel.
  
 
  
  if (bitmap == nullptr)
 
  
 
 
  
 
                {
                  
 
                  
                  const maxon::Int32 red = maxon::SafeConvert<maxon::Int32>(u * 255.9);
 
                  const maxon::Int32 green = maxon::SafeConvert<maxon::Int32>(
v * 255.9);
 
 
                  
                  bitmap->SetPixel(
Int32(
x), 
Int32(y), red, green, blue);
 
                };
 
  
 
PyObject PyObject * v
Definition: abstract.h:297
 
Bool ShowBitmap(const Filename &fn)
 
Definition: ge_autoptr.h:37
 
static void Process(Int width, Int height, Int tileSize, const WORKER &worker)
Definition: parallelimage.h:216
 
PyObject * x
Definition: bytesobject.h:38
 
Py_UCS4 * res
Definition: unicodeobject.h:1113
 
maxon::Int32 Int32
Definition: ge_sys_math.h:56
 
int32_t Int32
32 bit signed integer datatype.
Definition: apibase.h:190
 
IMAGERESULT
Definition: ge_prepass.h:3920
 
@ OK
Image loaded/created.
 
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
 
unsigned long Py_ssize_t width
Definition: pycore_traceback.h:88
 
  
ParallelInvoke
The maxon::ParallelInvoke function can be used to execute multiple arbitrary functions in parallel.
  
  
 
  
  maxon::Float minA = 0.0, maxA = 0.0, minB = 0.0, maxB = 0.0;
 
 
  
  
    [&arrayA, &minA, &maxA] { GetMinMax(arrayA, minA, maxA); },
    [&araryB, &minB, &maxB] { GetMinMax(araryB, minB, maxB); }
 
  
  if ((minA > minB) && (maxA < maxB))
    DiagnosticOutput(
"Min/max values of a array A are within the min/max values of array B"_s);
 
Result< void > ParallelInvoke(Bool parallel, ARGS &&... args)
Definition: parallelinvoke.h:153
 
  
Further Reading