Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::interface9::internal::proportional_mode< Partition > Struct Template Reference

Provides proportional splitting strategy for partition objects. More...

#include <partitioner.h>

Inheritance diagram for tbb::interface9::internal::proportional_mode< Partition >:
Collaboration diagram for tbb::interface9::internal::proportional_mode< Partition >:

Public Types

typedef Partition my_partition
 
- Public Types inherited from tbb::interface9::internal::adaptive_mode< Partition >
typedef Partition my_partition
 

Public Member Functions

 proportional_mode ()
 
 proportional_mode (proportional_mode &src, split)
 
 proportional_mode (proportional_mode &src, const proportional_split &split_obj)
 
size_t do_split (proportional_mode &src, const proportional_split &split_obj)
 
bool is_divisible ()
 
template<typename Range >
proportional_split get_split ()
 
- Public Member Functions inherited from tbb::interface9::internal::adaptive_mode< Partition >
 adaptive_mode ()
 
 adaptive_mode (adaptive_mode &src, split)
 
size_t do_split (adaptive_mode &src, split)
 
- Public Member Functions inherited from tbb::internal::partition_type_base< Partition >
void set_affinity (task &)
 
void note_affinity (task::affinity_id)
 
taskcontinue_after_execute_range ()
 
bool decide_whether_to_delay ()
 
void spawn_or_delay (bool, task &b)
 

Additional Inherited Members

- Public Attributes inherited from tbb::interface9::internal::adaptive_mode< Partition >
size_t my_divisor
 
- Static Public Attributes inherited from tbb::interface9::internal::adaptive_mode< Partition >
static const unsigned factor = 1
 

Detailed Description

template<typename Partition>
struct tbb::interface9::internal::proportional_mode< Partition >

Provides proportional splitting strategy for partition objects.

Definition at line 300 of file partitioner.h.

Member Typedef Documentation

◆ my_partition

template<typename Partition>
typedef Partition tbb::interface9::internal::proportional_mode< Partition >::my_partition

Definition at line 301 of file partitioner.h.

Constructor & Destructor Documentation

◆ proportional_mode() [1/3]

template<typename Partition>
tbb::interface9::internal::proportional_mode< Partition >::proportional_mode ( )
inline

Definition at line 304 of file partitioner.h.

304 : adaptive_mode<Partition>() {}

◆ proportional_mode() [2/3]

template<typename Partition>
tbb::interface9::internal::proportional_mode< Partition >::proportional_mode ( proportional_mode< Partition > &  src,
split   
)
inline

Definition at line 305 of file partitioner.h.

305 : adaptive_mode<Partition>(src, split()) {}

◆ proportional_mode() [3/3]

template<typename Partition>
tbb::interface9::internal::proportional_mode< Partition >::proportional_mode ( proportional_mode< Partition > &  src,
const proportional_split split_obj 
)
inline

Definition at line 306 of file partitioner.h.

306 { self().my_divisor = do_split(src, split_obj); }
size_t do_split(proportional_mode &src, const proportional_split &split_obj)
Definition: partitioner.h:307

Member Function Documentation

◆ do_split()

template<typename Partition>
size_t tbb::interface9::internal::proportional_mode< Partition >::do_split ( proportional_mode< Partition > &  src,
const proportional_split split_obj 
)
inline

Definition at line 307 of file partitioner.h.

307  {
308 #if __TBB_ENABLE_RANGE_FEEDBACK
309  size_t portion = size_t(float(src.my_divisor) * float(split_obj.right())
310  / float(split_obj.left() + split_obj.right()) + 0.5f);
311 #else
312  size_t portion = split_obj.right() * my_partition::factor;
313 #endif
314  portion = (portion + my_partition::factor/2) & (0ul - my_partition::factor);
315 #if __TBB_ENABLE_RANGE_FEEDBACK
316 
317  if (!portion)
318  portion = my_partition::factor;
319  else if (portion == src.my_divisor)
320  portion = src.my_divisor - my_partition::factor;
321 #endif
322  src.my_divisor -= portion;
323  return portion;
324  }

◆ get_split()

template<typename Partition>
template<typename Range >
proportional_split tbb::interface9::internal::proportional_mode< Partition >::get_split ( )
inline

Definition at line 334 of file partitioner.h.

334  {
336  size_t size = self().my_divisor / my_partition::factor;
337 #if __TBB_NONUNIFORM_TASK_CREATION
338  size_t right = (size + 2) / 3;
339 #else
340  size_t right = size / 2;
341 #endif
342  size_t left = size - right;
343  return proportional_split(left, right);
344  } else {
345  return proportional_split(1, 1);
346  }
347  }
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t size

◆ is_divisible()

template<typename Partition>
bool tbb::interface9::internal::proportional_mode< Partition >::is_divisible ( )
inline

Definition at line 325 of file partitioner.h.

325  { // part of old should_execute_range()
326  return self().my_divisor > my_partition::factor;
327  }

The documentation for this struct was generated from the following file:

Copyright © 2005-2019 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.