Skip to content

Commit cc2e47d

Browse files
committed
reorganzize parallel.h to use parallelizm if USE_OPENMP is set, removing gnu_parallel stuff
1 parent 3c0fb35 commit cc2e47d

File tree

13 files changed

+28
-105
lines changed

13 files changed

+28
-105
lines changed

.travis.yml

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,31 @@ env:
1212
matrix:
1313
include:
1414
# gcc-5 builds
15-
- env: CMAKE_CC="gcc-5" CMAKE_CXX="g++-5" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DUSE_OPENMP=ON -DUSE_GNU_PARALLEL=OFF"
15+
- env: CMAKE_CC="gcc-5" CMAKE_CXX="g++-5" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DUSE_OPENMP=ON"
1616
addons: &gcc5
1717
apt:
1818
sources:
1919
- ubuntu-toolchain-r-test
2020
packages:
2121
- g++-5
22-
- env: CMAKE_CC="gcc-5" CMAKE_CXX="g++-5" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DUSE_OPENMP=ON -DUSE_GNU_PARALLEL=ON"
23-
addons: *gcc5
2422

2523
# gcc-7 builds
26-
- env: CMAKE_CC="gcc-7" CMAKE_CXX="g++-7" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DUSE_OPENMP=ON -DUSE_GNU_PARALLEL=OFF"
24+
- env: CMAKE_CC="gcc-7" CMAKE_CXX="g++-7" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DUSE_OPENMP=ON"
2725
addons: &gcc7
2826
apt:
2927
sources:
3028
- ubuntu-toolchain-r-test
3129
packages:
3230
- g++-7
33-
- env: CMAKE_CC="gcc-7" CMAKE_CXX="g++-7" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DUSE_OPENMP=ON -DUSE_GNU_PARALLEL=ON"
31+
- env: CMAKE_CC="gcc-7" CMAKE_CXX="g++-7" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DUSE_OPENMP=OFF"
3432
addons: *gcc7
35-
- env: CMAKE_CC="gcc-7" CMAKE_CXX="g++-7" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RelWithAssert -DUSE_OPENMP=ON -DUSE_GNU_PARALLEL=OFF"
33+
- env: CMAKE_CC="gcc-7" CMAKE_CXX="g++-7" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RelWithAssert -DUSE_OPENMP=ON"
3634
addons: *gcc7
37-
- env: CMAKE_CC="gcc-7" CMAKE_CXX="g++-7" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RelWithAssert -DUSE_OPENMP=ON -DUSE_GNU_PARALLEL=ON"
35+
- env: CMAKE_CC="gcc-7" CMAKE_CXX="g++-7" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RelWithAssert -DUSE_OPENMP=OFF"
3836
addons: *gcc7
3937

4038
# clang build
41-
- env: CMAKE_CC="clang-3.9" CMAKE_CXX="clang++-3.9" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RelWithAssert -DUSE_GNU_PARALLEL=OFF"
39+
- env: CMAKE_CC="clang-3.9" CMAKE_CXX="clang++-3.9" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RelWithAssert"
4240
addons:
4341
apt:
4442
sources:
@@ -48,7 +46,7 @@ matrix:
4846
- clang-3.9
4947
- g++-5
5048
- libiomp-dev
51-
- env: CMAKE_CC="clang-5.0" CMAKE_CXX="clang++-5.0" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RelWithAssert -DUSE_GNU_PARALLEL=OFF"
49+
- env: CMAKE_CC="clang-5.0" CMAKE_CXX="clang++-5.0" CMAKE_FLAGS="" CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RelWithAssert"
5250
addons:
5351
apt:
5452
sources:

CMakeLists.txt

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,6 @@ option(STXXL_RUN_SLOW_TESTS "Run slow tests of extra stxxl tests and tool progra
7777

7878
option(USE_OPENMP "Use OpenMP for multi-core parallelism" ON)
7979

80-
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
81-
# FIXME: autodetect, n/a with libc++
82-
option(USE_GNU_PARALLEL "Use GNU parallel extensions for multi-core parallelism" ON)
83-
84-
# GNU parallel mode but NOT OpenMP is impossible.
85-
if(USE_GNU_PARALLEL AND NOT USE_OPENMP)
86-
set(USE_GNU_PARALLEL OFF)
87-
endif()
88-
endif()
89-
9080
option(STXXL_TRY_COMPILE_HEADERS "Test stxxl header files for self-sufficiency: try to compile them." OFF)
9181

9282
option(USE_VALGRIND "Run tests with valgrind, pre-initialize some memory buffers." OFF)
@@ -403,12 +393,7 @@ check_cxx_source_compiles(
403393
###############################################################################
404394
# optional OpenMP parallelization
405395

406-
if(USE_GNU_PARALLEL AND NOT USE_OPENMP)
407-
message(FATAL_ERROR "Configuration selects GNU parallel mode but not OpenMP."
408-
"This is impossible.")
409-
endif()
410-
411-
if(USE_OPENMP OR USE_GNU_PARALLEL)
396+
if(USE_OPENMP)
412397

413398
include(FindOpenMP)
414399

@@ -428,26 +413,7 @@ else()
428413
message(STATUS "OpenMP disabled in STXXL (no parallelism is used).")
429414
set(STXXL_PARALLEL 0)
430415

431-
endif(USE_OPENMP OR USE_GNU_PARALLEL)
432-
433-
###############################################################################
434-
# optional GNU parallel STL mode
435-
436-
if(USE_GNU_PARALLEL)
437-
438-
if(NOT OPENMP_FOUND)
439-
message(FATAL_ERROR "OpenMP not found. Try compilation without GNU parallel mode.")
440-
else()
441-
check_include_file_cxx(parallel/algorithm HAVE_PARALLEL_ALGORITHM_H)
442-
443-
if(NOT HAVE_PARALLEL_ALGORITHM_H)
444-
message(FATAL_ERROR "GNU parallel mode header not found. Try compilation without parallel mode.")
445-
else()
446-
set(STXXL_WITH_GNU_PARALLEL 1)
447-
endif()
448-
endif()
449-
450-
endif(USE_GNU_PARALLEL)
416+
endif(USE_OPENMP)
451417

452418
###############################################################################
453419
# test for additional includes and features used by some stxxl_tool components

doc/install.dox

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,9 @@ $ cmake -DCMAKE_BUILD_TYPE=Release ...
208208
\endverbatim
209209
The mode mostly changes CXXFLAGS.
210210

211-
- Some parts of STXXL have been parallelized using the __gnu_parallel (aka MCSTL) library. Currently, with CMake one can only use the newer __gnu_parallel library by defining
211+
- Some parts of STXXL have been parallelized using OpenMP (with code from MCSTL and the GNU parallel library)
212212
\verbatim
213-
$ cmake -DUSE_GNU_PARALLEL=ON ...
213+
$ cmake -DUSE_OPENMP=ON ...
214214
\endverbatim
215215
when building. <b>Parallel is now ON by default for gcc</b>, if it can be detected. The cmake script will check availability of the corresponding header files.
216216

extlib/foxxll

include/stxxl/bits/algo/sort.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ void merge_runs(RunType** in_runs, size_t nruns,
470470
// end of STL-style merging
471471

472472
#else
473-
STXXL_THROW_UNREACHABLE();
473+
FOXXLL_THROW_UNREACHABLE();
474474
#endif
475475
}
476476
else

include/stxxl/bits/config.h.in

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,6 @@
6969
// cmake: -DUSE_PARALLEL=ON
7070
// effect: enable parallelized algorithms using OpenMP like multiway_merge and sort
7171

72-
#cmakedefine STXXL_WITH_GNU_PARALLEL ${STXXL_WITH_GNU_PARALLEL}
73-
// default: off
74-
// cmake: -DUSE_GNU_PARALLEL=ON
75-
// effect: explicitly enables use of __gnu_parallel algorithms
76-
7772
#cmakedefine STXXL_STD_RANDOM ${STXXL_STD_RANDOM}
7873
// default: off
7974
// cmake: detection of <random>

include/stxxl/bits/containers/pq_ext_merger.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class ext_merger
7171
using tree_type = parallel_merger_adapter<self_type, CompareType, Arity>;
7272
#else
7373
//! type of embedded loser tree
74-
using tree_type = loser_tree<self_type, CompareWithMin, Arity>;
74+
using tree_type = loser_tree<self_type, CompareType, Arity>;
7575
#endif
7676

7777
//! size type of total number of item in merger

include/stxxl/bits/containers/pq_int_merger.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class int_merger
5656
using tree_type = parallel_merger_adapter<self_type, CompareType, MaxArity>;
5757
#else
5858
//! type of embedded loser tree
59-
using tree_type = loser_tree<self_type, CompareWithMin, MaxArity>;
59+
using tree_type = loser_tree<self_type, CompareType, MaxArity>;
6060
#endif
6161

6262
//! type of sequences in which the values are stored: memory arrays

include/stxxl/bits/parallel.h

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -47,62 +47,40 @@
4747
#define STXXL_PARALLEL_MULTIWAY_MERGE 0
4848
#endif
4949

50-
#if defined(STXXL_PARALLEL_MODE) && ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100) < 40400)
51-
#undef STXXL_PARALLEL_MULTIWAY_MERGE
52-
#define STXXL_PARALLEL_MULTIWAY_MERGE 0
53-
#endif
54-
55-
#if !defined(STXXL_PARALLEL_MULTIWAY_MERGE)
50+
#if STXXL_PARALLEL && !defined(STXXL_PARALLEL_MULTIWAY_MERGE)
5651
#define STXXL_PARALLEL_MULTIWAY_MERGE 1
5752
#endif
5853

5954
#if !defined(STXXL_NOT_CONSIDER_SORT_MEMORY_OVERHEAD)
6055
#define STXXL_NOT_CONSIDER_SORT_MEMORY_OVERHEAD 0
6156
#endif
6257

63-
#if STXXL_WITH_GNU_PARALLEL
64-
#include <parallel/algorithm>
65-
#else
66-
#include <algorithm>
67-
#endif
68-
6958
#include <tlx/algorithm/multiway_merge.hpp>
7059
#include <tlx/algorithm/parallel_multiway_merge.hpp>
7160

7261
namespace stxxl {
7362

7463
inline unsigned sort_memory_usage_factor()
7564
{
76-
#if STXXL_PARALLEL && !STXXL_NOT_CONSIDER_SORT_MEMORY_OVERHEAD && defined(STXXL_PARALLEL_MODE)
77-
return (__gnu_parallel::_Settings::get().sort_algorithm == __gnu_parallel::MWMS && omp_get_max_threads() > 1) ? 2 : 1; //memory overhead for multiway mergesort
65+
#if STXXL_PARALLEL && !STXXL_NOT_CONSIDER_SORT_MEMORY_OVERHEAD
66+
return (omp_get_max_threads() > 1) ? 2 : 1; //memory overhead for multiway mergesort
7867
#else
7968
return 1; //no overhead
8069
#endif
8170
}
8271

8372
inline void check_sort_settings()
8473
{
85-
#if STXXL_PARALLEL && defined(STXXL_PARALLEL_MODE) && !defined(STXXL_NO_WARN_OMP_NESTED)
86-
static bool did_warn = false;
87-
if (!did_warn) {
88-
if (__gnu_parallel::_Settings::get().sort_algorithm != __gnu_parallel::MWMS) {
89-
if (omp_get_max_threads() <= 2) {
90-
did_warn = true; // no problem with at most 2 threads, no need to check again
91-
}
92-
else if (!omp_get_nested()) {
93-
LOG1 << "Inefficient settings detected. To get full potential from your CPU it is recommended to set OMP_NESTED=TRUE in the environment.";
94-
did_warn = true;
95-
}
96-
}
97-
}
74+
#if STXXL_PARALLEL && !defined(STXXL_NO_WARN_OMP_NESTED)
75+
// nothing to check, maybe in future?
9876
#else
9977
// nothing to check
10078
#endif
10179
}
10280

10381
inline bool do_parallel_merge()
10482
{
105-
#if STXXL_PARALLEL_MULTIWAY_MERGE && defined(STXXL_PARALLEL_MODE)
83+
#if STXXL_PARALLEL_MULTIWAY_MERGE
10684
return !stxxl::SETTINGS::native_merge && omp_get_max_threads() >= 1;
10785
#else
10886
return false;
@@ -114,23 +92,9 @@ inline bool do_parallel_merge()
11492
//! parallelism is optional.
11593
namespace potentially_parallel {
11694

117-
#if STXXL_WITH_GNU_PARALLEL
118-
119-
using __gnu_parallel::sort;
120-
using __gnu_parallel::random_shuffle;
121-
122-
#elif STXXL_PARALLEL
123-
124-
using std::sort;
125-
using std::random_shuffle;
126-
127-
#else
128-
12995
using std::sort;
13096
using std::random_shuffle;
13197

132-
#endif
133-
13498
/*! Multi-way merging dispatcher.
13599
* \param seqs_begin Begin iterator of iterator pair input sequence.
136100
* \param seqs_end End iterator of iterator pair input sequence.

include/stxxl/bits/stream/sort_stream.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,7 +1113,7 @@ class basic_runs_merger
11131113

11141114
// end of STL-style merging
11151115
#else
1116-
STXXL_THROW_UNREACHABLE();
1116+
FOXXLL_THROW_UNREACHABLE();
11171117
#endif //STXXL_PARALLEL_MULTIWAY_MERGE
11181118
}
11191119
else
@@ -1296,7 +1296,7 @@ class basic_runs_merger
12961296
}
12971297
// end of STL-style merging
12981298
#else
1299-
STXXL_THROW_UNREACHABLE();
1299+
FOXXLL_THROW_UNREACHABLE();
13001300
#endif //STXXL_PARALLEL_MULTIWAY_MERGE
13011301
}
13021302
else

0 commit comments

Comments
 (0)