__gnu_parallel::_Settings(3cxx)

🌸 NAME 🌸

Welcome to the __gnu_parallel::_Settings(3cxx) page, bestie β€” part 1 of 2, and it's giving "control room for parallel mode."

__gnu_parallel::_Settings β€” the run-time settings class for parallel mode, packing all the tunable parameters into one iconic little vibe console.


✨ SYNOPSIS ✨

#include <settings.h>

πŸŽ€ Static Public Member Functions πŸŽ€

  • static const _Settings & get () throw () β€” get the global settings, no cap.
  • static void set (_Settings &) throw () β€” set the global settings. Periodt.

πŸ’– Public Attributes πŸ’–

  • _SequenceIndex accumulate_minimal_n β€” minimal input size for accumulate.
  • unsigned int adjacent_difference_minimal_n β€” minimal input size for adjacent_difference.
  • _AlgorithmStrategy algorithm_strategy β€” the manpage gives this one literally just the name, bestie.
  • unsigned int cache_line_size β€” an overestimation of the cache line size, used to dodge false sharing β€” i.e. elements from different threads are at least this amount apart.
  • _SequenceIndex count_minimal_n β€” minimal input size for count and count_if.
  • _SequenceIndex fill_minimal_n β€” minimal input size for fill.
  • _FindAlgorithm find_algorithm β€” again, no extra blurb on this page; just the name.
  • double find_increasing_factor β€” block size increase factor for find.
  • _SequenceIndex find_initial_block_size β€” initial block size for find.
  • _SequenceIndex find_maximum_block_size β€” maximal block size for find.
  • float find_scale_factor β€” block size scale-down factor with respect to current position.
  • _SequenceIndex find_sequential_search_size β€” start by looking for this many elements sequentially, for find.
  • _SequenceIndex for_each_minimal_n β€” minimal input size for for_each.
  • _SequenceIndex generate_minimal_n β€” minimal input size for generate.
  • unsigned long long L1_cache_size β€” size of the L1 cache in bytes (underestimation).
  • unsigned long long L2_cache_size β€” size of the L2 cache in bytes (underestimation).
  • _SequenceIndex max_element_minimal_n β€” minimal input size for max_element.
  • _SequenceIndex merge_minimal_n β€” minimal input size for merge.
  • unsigned int merge_oversampling β€” oversampling factor for merge.
  • _SplittingAlgorithm merge_splitting β€” no description here, just the name.
  • _SequenceIndex min_element_minimal_n β€” minimal input size for min_element.
  • _MultiwayMergeAlgorithm multiway_merge_algorithm β€” name only, bestie.
  • int multiway_merge_minimal_k β€” oversampling factor for multiway_merge.
  • _SequenceIndex multiway_merge_minimal_n β€” minimal input size for multiway_merge.
  • unsigned int multiway_merge_oversampling β€” oversampling factor for multiway_merge.
  • _SplittingAlgorithm multiway_merge_splitting β€” just the name on this one.
  • _SequenceIndex nth_element_minimal_n β€” minimal input size for nth_element.
  • _SequenceIndex partial_sort_minimal_n β€” minimal input size for partial_sort.
  • _PartialSumAlgorithm partial_sum_algorithm β€” name only, no extra tea.
  • float partial_sum_dilation β€” ratio for partial_sum. Assume 'sum and write result' to be this factor slower than just 'sum'.
  • unsigned int partial_sum_minimal_n β€” minimal input size for partial_sum.
  • double partition_chunk_share β€” chunk size for partition, relative to input size. If > 0.0, this value overrides partition_chunk_size.
  • _SequenceIndex partition_chunk_size β€” chunk size for partition.
  • _SequenceIndex partition_minimal_n β€” minimal input size for partition.
  • _SequenceIndex qsb_steals β€” the number of stolen ranges in load-balanced quicksort.
  • unsigned int random_shuffle_minimal_n β€” minimal input size for random_shuffle.
  • _SequenceIndex replace_minimal_n β€” minimal input size for replace and replace_if.
  • _SequenceIndex search_minimal_n β€” minimal input size for search and search_n.
  • _SequenceIndex set_difference_minimal_n β€” minimal input size for set_difference.
  • _SequenceIndex set_intersection_minimal_n β€” minimal input size for set_intersection.
  • _SequenceIndex set_symmetric_difference_minimal_n β€” minimal input size for set_symmetric_difference.
  • _SequenceIndex set_union_minimal_n β€” minimal input size for set_union.
  • _SortAlgorithm sort_algorithm β€” name only, iykyk.
  • _SequenceIndex sort_minimal_n β€” minimal input size for parallel sorting.
  • unsigned int sort_mwms_oversampling β€” oversampling factor for parallel std::sort (MWMS).
  • unsigned int sort_qs_num_samples_preset β€” such many samples to take to find a good pivot (quicksort).
  • _SequenceIndex sort_qsb_base_case_maximal_n β€” maximal subsequence __length to switch to unbalanced __base case. Applies to std::sort with dynamically load-balanced quicksort.
  • _SplittingAlgorithm sort_splitting β€” just the name, bestie.
  • unsigned int TLB_size β€” size of the Translation Lookaside Buffer (underestimation).
  • _SequenceIndex transform_minimal_n β€” minimal input size for parallel std::transform.
  • _SequenceIndex unique_copy_minimal_n β€” minimal input size for unique_copy.
  • _SequenceIndex workstealing_chunk_size β€” no description on this page, just the name.

πŸ’– Detailed Description πŸ’–

So _Settings is the class for run-time settings for the parallel mode, and it includes all the tunable parameters. All of them. Every single knob. It's the main character of "where do I change that value," fr fr.


🫢 Member Function Documentation 🫢

🌟 static const _Settings & __gnu_parallel::_Settings::get () [static] 🌟

static const _Settings & get () throw () β€” get the global settings. That's the whole job, and it ate.

The page says this is referenced by:

  • __gnu_parallel::__find_template()
  • __gnu_parallel::__find_template()
  • __gnu_parallel::__find_template()
  • __gnu_parallel::__for_each_template_random_access_workstealing()
  • __gnu_parallel::__parallel_nth_element()
  • __gnu_parallel::__parallel_partial_sum()
  • __gnu_parallel::__parallel_partial_sum_linear()
  • __gnu_parallel::__parallel_partition()
  • __gnu_parallel::__parallel_random_shuffle_drs()
  • __gnu_parallel::__parallel_sort()
  • __gnu_parallel::__parallel_sort()
  • __gnu_parallel::__parallel_sort_qs_conquer()
  • __gnu_parallel::__qsb_local_sort_with_helping()
  • __gnu_parallel::__sequential_random_shuffle()
  • __gnu_parallel::multiway_merge_sampling_splitting()
  • __gnu_parallel::parallel_multiway_merge()
  • __gnu_parallel::parallel_sort_mwms()
  • __gnu_parallel::parallel_sort_mwms_pu()

🌈 static void __gnu_parallel::_Settings::set (_Settings &) [static] 🌈

static void set (_Settings &) throw () β€” set the global settings. Simple, clean, iconic.

✨ Member Data Documentation ✨

Okay bestie, this is the good part β€” all the actual knobs and dials on __gnu_parallel::_Settings. Every single one, no skips, we're doing the full tour πŸ’…


  • _SequenceIndex __gnu_parallel::_Settings::accumulate_minimal_n β€” the minimal input size for accumulate. Below this, it's just not worth the parallel drama πŸŽ€
  • unsigned int __gnu_parallel::_Settings::adjacent_difference_minimal_n β€” minimal input size for adjacent_difference.
  • unsigned int __gnu_parallel::_Settings::cache_line_size β€” an overestimation of the cache line size. It's used to dodge false sharing, i.e. making sure elements belonging to different threads sit at least this far apart πŸ¦‹
    • Referenced by __gnu_parallel::__for_each_template_random_access_workstealing().
  • _SequenceIndex __gnu_parallel::_Settings::count_minimal_n β€” minimal input size for count and count_if.
  • _SequenceIndex __gnu_parallel::_Settings::fill_minimal_n β€” minimal input size for fill.
  • double __gnu_parallel::_Settings::find_increasing_factor β€” the block size increase factor for find.
  • _SequenceIndex __gnu_parallel::_Settings::find_initial_block_size β€” the initial block size for find.
    • Referenced by __gnu_parallel::__find_template().
  • _SequenceIndex __gnu_parallel::_Settings::find_maximum_block_size β€” the maximal block size for find.
  • float __gnu_parallel::_Settings::find_scale_factor β€” block size scale-down factor with respect to the current position.
    • Referenced by __gnu_parallel::__find_template().
  • _SequenceIndex __gnu_parallel::_Settings::find_sequential_search_size β€” start off by looking for this many elements sequentially, for find.
    • Referenced by __gnu_parallel::__find_template(), and __gnu_parallel::__find_template().
  • _SequenceIndex __gnu_parallel::_Settings::for_each_minimal_n β€” minimal input size for for_each.
  • _SequenceIndex __gnu_parallel::_Settings::generate_minimal_n β€” minimal input size for generate.
  • unsigned long long __gnu_parallel::_Settings::L1_cache_size β€” size of the L1 cache in bytes (underestimation, so it lowballs it on purpose πŸ™ˆ).
  • unsigned long long __gnu_parallel::_Settings::L2_cache_size β€” size of the L2 cache in bytes (underestimation, same deal).
    • Referenced by __gnu_parallel::__parallel_random_shuffle_drs(), and __gnu_parallel::__sequential_random_shuffle().
  • _SequenceIndex __gnu_parallel::_Settings::max_element_minimal_n β€” minimal input size for max_element.
  • _SequenceIndex __gnu_parallel::_Settings::merge_minimal_n β€” minimal input size for merge.
  • unsigned int __gnu_parallel::_Settings::merge_oversampling β€” oversampling factor for merge.
    • Referenced by __gnu_parallel::multiway_merge_sampling_splitting(), and __gnu_parallel::parallel_multiway_merge().
  • _SequenceIndex __gnu_parallel::_Settings::min_element_minimal_n β€” minimal input size for min_element.
  • int __gnu_parallel::_Settings::multiway_merge_minimal_k β€” oversampling factor for multiway_merge.
  • _SequenceIndex __gnu_parallel::_Settings::multiway_merge_minimal_n β€” minimal input size for multiway_merge.
  • unsigned int __gnu_parallel::_Settings::multiway_merge_oversampling β€” oversampling factor for multiway_merge.
  • _SequenceIndex __gnu_parallel::_Settings::nth_element_minimal_n β€” minimal input size for nth_element.
    • Referenced by __gnu_parallel::__parallel_nth_element().
  • _SequenceIndex __gnu_parallel::_Settings::partial_sort_minimal_n β€” minimal input size for partial_sort.
  • float __gnu_parallel::_Settings::partial_sum_dilation β€” ratio for partial_sum. Basically it assumes that "sum and write result" is this factor slower than just plain "sum" πŸ“
    • Referenced by __gnu_parallel::__parallel_partial_sum_linear().
  • unsigned int __gnu_parallel::_Settings::partial_sum_minimal_n β€” minimal input size for partial_sum.
  • double __gnu_parallel::_Settings::partition_chunk_share β€” chunk size for partition, relative to input size. Heads up: if it's > 0.0, this value overrides partition_chunk_size πŸ‘‘
    • Referenced by __gnu_parallel::__parallel_partition().
  • _SequenceIndex __gnu_parallel::_Settings::partition_chunk_size β€” chunk size for partition.
    • Referenced by __gnu_parallel::__parallel_partition().
  • _SequenceIndex __gnu_parallel::_Settings::partition_minimal_n β€” minimal input size for partition.
    • Referenced by __gnu_parallel::__parallel_nth_element().
  • _SequenceIndex __gnu_parallel::_Settings::qsb_steals β€” the number of stolen ranges in load-balanced quicksort. stealing is literally the whole personality of this algorithm ngl πŸ’€
  • unsigned int __gnu_parallel::_Settings::random_shuffle_minimal_n β€” minimal input size for random_shuffle.
  • _SequenceIndex __gnu_parallel::_Settings::replace_minimal_n β€” minimal input size for replace and replace_if.
  • _SequenceIndex __gnu_parallel::_Settings::search_minimal_n β€” minimal input size for search and search_n.
  • _SequenceIndex __gnu_parallel::_Settings::set_difference_minimal_n β€” minimal input size for set_difference.
  • _SequenceIndex __gnu_parallel::_Settings::set_intersection_minimal_n β€” minimal input size for set_intersection.
  • _SequenceIndex __gnu_parallel::_Settings::set_symmetric_difference_minimal_n β€” minimal input size for set_symmetric_difference.
  • _SequenceIndex __gnu_parallel::_Settings::set_union_minimal_n β€” minimal input size for set_union.
  • _SequenceIndex __gnu_parallel::_Settings::sort_minimal_n β€” minimal input size for parallel sorting.
  • unsigned int __gnu_parallel::_Settings::sort_mwms_oversampling β€” oversampling factor for parallel std::sort (MWMS).
    • Referenced by __gnu_parallel::parallel_sort_mwms(), and __gnu_parallel::parallel_sort_mwms_pu().
  • unsigned int __gnu_parallel::_Settings::sort_qs_num_samples_preset β€” this many samples to take to find a good pivot (quicksort) 🎯
  • _SequenceIndex __gnu_parallel::_Settings::sort_qsb_base_case_maximal_n β€” maximal subsequence __length to switch to the unbalanced __base case. Applies to std::sort with dynamically load-balanced quicksort.
    • Referenced by __gnu_parallel::__qsb_local_sort_with_helping().
  • unsigned int __gnu_parallel::_Settings::TLB_size β€” size of the Translation Lookaside Buffer (underestimation).
    • Referenced by __gnu_parallel::__parallel_random_shuffle_drs(), and __gnu_parallel::__sequential_random_shuffle().
  • _SequenceIndex __gnu_parallel::_Settings::transform_minimal_n β€” minimal input size for parallel std::transform.
  • _SequenceIndex __gnu_parallel::_Settings::unique_copy_minimal_n β€” minimal input size for unique_copy.

🌸 Author 🌸

Generated automatically by Doxygen for libstdc++ from the source code. no cap, nobody hand-wrote this one, the machine did it πŸ’–


okay that's the whole page bestie, you ate that 🫢✨ This lil doc shipped as part of libstdc++, in the __gnu_parallel::_Settings(3cxx) manual page (3cxx section) β€” go be iconic with your settings, mwah πŸ’…πŸ‘‘