This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [PATCH] Integration of parallel standard algorithms for c++17
- From: Jonathan Wakely <jwakely at redhat dot com>
- To: Thomas Rodgers <trodgers at redhat dot com>
- Cc: libstdc++ at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Thu, 7 Feb 2019 13:26:29 +0000
- Subject: Re: [PATCH] Integration of parallel standard algorithms for c++17
- References: <xkqek1lksswb.fsf@trodgers.remote.f27> <1050db8c-2774-2210-dd39-12caa9bdb564@redhat.com>
On 31/01/19 21:08 -0800, Thomas Rodgers wrote:
Update C++17 parallel algorithms to LLVM/MIT licensed upstream sources
Some lines in bits/c++config.h need to be split before 80 columns
(with a backslash if the split is in the middle of a preprocessor
condition obviously).
There are loads of very long lines in the actual PSTL headers too, but
I think we need to keep them similar to the upstream headers to aid
merging, so can't gratuitously reformat them. I'm assuming that
doesn't apply to <bits/c++config.h> since that's our header and any
changes will need to be manually applied anyway, right?
We'll need to add a copy of the LICENSE.TXT file to our sources, since
it's referred to by the comments at the top of each PSTL file.
Typo in include/Makefile.am: ${pstl_srcdir}/memoy_impl.h
(Which will require regenerating include/Makefile.in).
The __cpp_lib_parallel_algorithm macro needs to be (conditionally)
defined in <version> as well as <algorithm> and <numeric>.
The namespaces par_backend and unseq_backend need to be uglified.
ALL the names in the __pstl::internal namespace need to be uglified:
brick_any_of
pattern_any_of
for_each_n_it_serial
brick_walk1
pattern_walk1
etc.
I see quite a few calls to functions that should probably be qualified
to prevent ADL, but that can be fixed later (and upstream first):
return brick_count(...
return except_handler([&]() { ...
The DejaGnu directives in the pstl tests need to be in this order:
// { dg-options "-std=gnu++17 -ltbb" }
// { dg-do run { target c++17 } }
// { dg-require-effective-target tbb-backend }
Currently the dg-require-effective-target comes before the dg-do
line, so doesn't work. DejaGnu processes the lines in order. When it
sees the dg-do for target c++17 it overrides the effect of any earlier
dg-require-effective-target.
I fixed that locally like so:
find testsuite/20_util/specialized_algorithms/pstl/ testsuite/25_algorithms/pstl/ testsuite/26_numerics/pstl/ -name \*.cc | xargs sed -i '/dg-require-eff/{h;d};/dg-do/{p;x}'
And now I don't get FAIL results on a system with no TBB installed
(which is great). I also get no FAIL results on a system with TBB
installed (also great).
There are two copies (with slight differences) of each of the
uninitialized_xxx tests:
libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/specialized.algorithms/uninitialized_construct.cc | 128 +++++++
libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/specialized.algorithms/uninitialized_copy_move.cc | 143 ++++++++
libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/specialized.algorithms/uninitialized_fill_destroy.cc | 103 ++++++
libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_construct.cc | 132 ++++++++
libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_copy_move.cc | 154 +++++++++
libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_fill_destroy.cc | 104 ++++++
That's all for now, but I'll keep making passes over it, going into
more detail ...