]>
Commit | Line | Data |
---|---|---|
6482a45c | 1 | // -*- C++ -*- |
2 | ||
f1717362 | 3 | // Copyright (C) 2007-2016 Free Software Foundation, Inc. |
6482a45c | 4 | // |
5 | // This file is part of the GNU ISO C++ Library. This library is free | |
6 | // software; you can redistribute it and/or modify it under the terms | |
7 | // of the GNU General Public License as published by the Free Software | |
6bc9506f | 8 | // Foundation; either version 3, or (at your option) any later |
6482a45c | 9 | // version. |
10 | ||
11 | // This library is distributed in the hope that it will be useful, but | |
12 | // WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | // General Public License for more details. | |
15 | ||
6bc9506f | 16 | // Under Section 7 of GPL version 3, you are granted additional |
17 | // permissions described in the GCC Runtime Library Exception, version | |
18 | // 3.1, as published by the Free Software Foundation. | |
19 | ||
20 | // You should have received a copy of the GNU General Public License and | |
21 | // a copy of the GCC Runtime Library Exception along with this program; | |
22 | // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
23 | // <http://www.gnu.org/licenses/>. | |
6482a45c | 24 | |
25 | /** @file parallel/types.h | |
d0a2fac2 | 26 | * @brief Basic types and typedefs. |
6482a45c | 27 | * This file is a GNU parallel extension to the Standard C++ Library. |
28 | */ | |
29 | ||
30 | // Written by Johannes Singler and Felix Putze. | |
31 | ||
32 | #ifndef _GLIBCXX_PARALLEL_TYPES_H | |
33 | #define _GLIBCXX_PARALLEL_TYPES_H 1 | |
34 | ||
35 | #include <cstdlib> | |
f59fa9f3 | 36 | #include <limits> |
37 | #include <tr1/cstdint> | |
6482a45c | 38 | |
39 | namespace __gnu_parallel | |
40 | { | |
d0a2fac2 | 41 | // Enumerated types. |
42 | ||
27b93b7c | 43 | /// Run-time equivalents for the compile-time tags. |
44 | enum _Parallelism | |
d0a2fac2 | 45 | { |
46 | /// Not parallel. | |
47 | sequential, | |
48 | ||
49 | /// Parallel unbalanced (equal-sized chunks). | |
50 | parallel_unbalanced, | |
51 | ||
52 | /// Parallel balanced (work-stealing). | |
53 | parallel_balanced, | |
54 | ||
55 | /// Parallel with OpenMP dynamic load-balancing. | |
56 | parallel_omp_loop, | |
57 | ||
58 | /// Parallel with OpenMP static load-balancing. | |
59 | parallel_omp_loop_static, | |
60 | ||
61 | /// Parallel with OpenMP taskqueue construct. | |
62 | parallel_taskqueue | |
63 | }; | |
64 | ||
27b93b7c | 65 | /// Strategies for run-time algorithm selection: |
66 | // force_sequential, force_parallel, heuristic. | |
67 | enum _AlgorithmStrategy | |
68 | { | |
69 | heuristic, | |
70 | force_sequential, | |
71 | force_parallel | |
72 | }; | |
73 | ||
74 | /// Sorting algorithms: | |
75 | // multi-way mergesort, quicksort, load-balanced quicksort. | |
76 | enum _SortAlgorithm | |
77 | { | |
78 | MWMS, | |
79 | QS, | |
80 | QS_BALANCED | |
81 | }; | |
82 | ||
83 | /// Merging algorithms: | |
34475802 | 84 | // bubblesort-alike, loser-tree variants, enum __sentinel. |
27b93b7c | 85 | enum _MultiwayMergeAlgorithm |
3aa2bf8f | 86 | { |
87 | LOSER_TREE | |
27b93b7c | 88 | }; |
3aa2bf8f | 89 | |
27b93b7c | 90 | /// Partial sum algorithms: recursive, linear. |
91 | enum _PartialSumAlgorithm | |
92 | { | |
93 | RECURSIVE, | |
94 | LINEAR | |
95 | }; | |
96 | ||
34475802 | 97 | /// Sorting/merging algorithms: sampling, __exact. |
27b93b7c | 98 | enum _SplittingAlgorithm |
99 | { | |
100 | SAMPLING, | |
101 | EXACT | |
102 | }; | |
d0a2fac2 | 103 | |
27b93b7c | 104 | /// Find algorithms: |
105 | // growing blocks, equal-sized blocks, equal splitting. | |
106 | enum _FindAlgorithm | |
107 | { | |
108 | GROWING_BLOCKS, | |
109 | CONSTANT_SIZE_BLOCKS, | |
110 | EQUAL_SPLIT | |
111 | }; | |
112 | ||
6482a45c | 113 | /** |
34475802 | 114 | * @brief Unsigned integer to index __elements. |
6482a45c | 115 | * The total number of elements for each algorithm must fit into this type. |
116 | */ | |
f59fa9f3 | 117 | typedef uint64_t _SequenceIndex; |
6482a45c | 118 | |
119 | /** | |
120 | * @brief Unsigned integer to index a thread number. | |
121 | * The maximum thread number (for each processor) must fit into this type. | |
122 | */ | |
f59fa9f3 | 123 | typedef uint16_t _ThreadIndex; |
6482a45c | 124 | |
d0a2fac2 | 125 | // XXX atomics interface? |
27b93b7c | 126 | /// Longest compare-and-swappable integer type on this platform. |
f59fa9f3 | 127 | typedef int64_t _CASable; |
6482a45c | 128 | |
f59fa9f3 | 129 | /// Number of bits of _CASable. |
130 | static const int _CASable_bits = std::numeric_limits<_CASable>::digits; | |
6482a45c | 131 | |
34475802 | 132 | /// ::_CASable with the right half of bits set to 1. |
84ec5566 | 133 | static const _CASable _CASable_mask = |
134 | ((_CASable(1) << (_CASable_bits / 2)) - 1); | |
6482a45c | 135 | } |
136 | ||
a8aa9db5 | 137 | #endif /* _GLIBCXX_PARALLEL_TYPES_H */ |