83 #ifndef _GLIBCXX_PARALLEL_SETTINGS_H
84 #define _GLIBCXX_PARALLEL_SETTINGS_H 1
95 #define _GLIBCXX_PARALLEL_CONDITION(c) (__gnu_parallel::_Settings::get().algorithm_strategy != __gnu_parallel::force_sequential && ((__gnu_parallel::get_max_threads() > 1 && (c)) || __gnu_parallel::_Settings::get().algorithm_strategy == __gnu_parallel::force_parallel))
114 namespace __gnu_parallel
276 _Settings() : algorithm_strategy(heuristic), sort_algorithm(MWMS), partial_sum_algorithm(LINEAR), multiway_merge_algorithm(LOSER_TREE), find_algorithm(CONSTANT_SIZE_BLOCKS), sort_splitting(EXACT), merge_splitting(EXACT), multiway_merge_splitting(EXACT),
accumulate_minimal_n(1000),
adjacent_difference_minimal_n(1000),
count_minimal_n(1000),
fill_minimal_n(1000),
find_increasing_factor(2.0),
find_initial_block_size(256),
find_maximum_block_size(8192),
find_sequential_search_size(256),
for_each_minimal_n(1000),
generate_minimal_n(1000),
max_element_minimal_n(1000),
merge_minimal_n(1000),
merge_oversampling(10),
min_element_minimal_n(1000),
multiway_merge_minimal_n(1000),
multiway_merge_minimal_k(2),
multiway_merge_oversampling(10),
nth_element_minimal_n(1000),
partition_chunk_size(1000),
partition_chunk_share(0.0),
partition_minimal_n(1000),
partial_sort_minimal_n(1000),
partial_sum_dilation(1.0f),
partial_sum_minimal_n(1000),
random_shuffle_minimal_n(1000),
replace_minimal_n(1000),
set_difference_minimal_n(1000),
set_intersection_minimal_n(1000),
set_symmetric_difference_minimal_n(1000),
set_union_minimal_n(1000),
sort_minimal_n(1000),
sort_mwms_oversampling(10),
sort_qs_num_samples_preset(100),
sort_qsb_base_case_maximal_n(100),
transform_minimal_n(1000),
unique_copy_minimal_n(10000), workstealing_chunk_size(100),
L1_cache_size(16 << 10),
L2_cache_size(256 << 10),
TLB_size(128),
cache_line_size(64),
qsb_steals(0)
sequence_index_t unique_copy_minimal_n
Minimal input size for unique_copy.
sequence_index_t partition_chunk_size
Chunk size for partition.
float partial_sum_dilation
Ratio for partial_sum. Assume "sum and write result" to be this factor slower than just "sum"...
sequence_index_t find_initial_block_size
Initial block size for find.
sequence_index_t find_sequential_search_size
Start with looking for this many elements sequentially, for find.
unsigned int merge_oversampling
Oversampling factor for merge.
sequence_index_t for_each_minimal_n
Minimal input size for for_each.
double find_increasing_factor
Block size increase factor for find.
double partition_chunk_share
Chunk size for partition, relative to input size. If > 0.0, this value overrides partition_chunk_size...
unsigned int adjacent_difference_minimal_n
Minimal input size for adjacent_difference.
Basic types and typedefs. This file is a GNU parallel extension to the Standard C++ Library...
unsigned int TLB_size
Size of the Translation Lookaside Buffer (underestimation).
unsigned int partial_sum_minimal_n
Minimal input size for partial_sum.
sequence_index_t multiway_merge_minimal_n
Minimal input size for multiway_merge.
sequence_index_t sort_qsb_base_case_maximal_n
Maximal subsequence length to switch to unbalanced base case. Applies to std::sort with dynamically l...
unsigned int sort_mwms_oversampling
Oversampling factor for parallel std::sort (MWMS).
sequence_index_t set_intersection_minimal_n
Minimal input size for set_intersection.
int multiway_merge_minimal_k
Oversampling factor for multiway_merge.
static void set(_Settings &)
Set the global settings.
sequence_index_t partial_sort_minimal_n
Minimal input size for partial_sort.
unsigned int multiway_merge_oversampling
Oversampling factor for multiway_merge.
_MultiwayMergeAlgorithm
Merging algorithms:
sequence_index_t min_element_minimal_n
Minimal input size for min_element.
_AlgorithmStrategy
Strategies for run-time algorithm selection:
_SplittingAlgorithm
Sorting/merging algorithms: sampling, exact.
sequence_index_t set_symmetric_difference_minimal_n
Minimal input size for set_symmetric_difference.
uint64 sequence_index_t
Unsigned integer to index elements. The total number of elements for each algorithm must fit into thi...
_SortAlgorithm
Sorting algorithms:
sequence_index_t transform_minimal_n
Minimal input size for parallel std::transform.
unsigned long long L1_cache_size
Size of the L1 cache in bytes (underestimation).
sequence_index_t accumulate_minimal_n
Minimal input size for accumulate.
_FindAlgorithm
Find algorithms:
sequence_index_t sort_minimal_n
Minimal input size for parallel sorting.
unsigned int sort_qs_num_samples_preset
Such many samples to take to find a good pivot (quicksort).
sequence_index_t qsb_steals
The number of stolen ranges in load-balanced quicksort.
sequence_index_t nth_element_minimal_n
Minimal input size for nth_element.
sequence_index_t merge_minimal_n
Minimal input size for merge.
unsigned int random_shuffle_minimal_n
Minimal input size for random_shuffle.
sequence_index_t generate_minimal_n
Minimal input size for generate.
unsigned int cache_line_size
Overestimation of cache line size. Used to avoid false sharing, i. e. elements of different threads a...
sequence_index_t partition_minimal_n
Minimal input size for partition.
class _Settings Run-time settings for the parallel mode, including all tunable parameters.
sequence_index_t max_element_minimal_n
Minimal input size for max_element.
sequence_index_t find_maximum_block_size
Maximal block size for find.
sequence_index_t fill_minimal_n
Minimal input size for fill.
sequence_index_t set_difference_minimal_n
Minimal input size for set_difference.
sequence_index_t replace_minimal_n
Minimal input size for replace and replace_if.
unsigned long long L2_cache_size
Size of the L2 cache in bytes (underestimation).
sequence_index_t count_minimal_n
Minimal input size for count and count_if.
sequence_index_t set_union_minimal_n
Minimal input size for set_union.
_PartialSumAlgorithm
Partial sum algorithms: recursive, linear.