Skip to content

Commit 4735514

Browse files
committed
[libc++][pstl] Promote CPU backends to top-level backends
This patch removes the two-level backend dispatching mechanism we had in the PSTL. Instead of selecting both a PSTL backend and a PSTL CPU backend, we now only select a top-level PSTL backend. This greatly simplifies the PSTL configuration layer. While this patch technically removes some flexibility from the PSTL configuration mechanism because CPU backends are not considered separately, it opens the door to a much more powerful configuration mechanism based on chained backends in a follow-up patch. This is a step towards overhauling the PSTL dispatching mechanism.
1 parent 9ddedf0 commit 4735514

39 files changed

+141
-157
lines changed

libcxx/CMakeLists.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -300,9 +300,9 @@ option(LIBCXX_HAS_EXTERNAL_THREAD_API
300300
This option may only be set to ON when LIBCXX_ENABLE_THREADS=ON." OFF)
301301

302302
if (LIBCXX_ENABLE_THREADS)
303-
set(LIBCXX_PSTL_CPU_BACKEND "std_thread" CACHE STRING "Which PSTL CPU backend to use")
303+
set(LIBCXX_PSTL_BACKEND "std_thread" CACHE STRING "Which PSTL backend to use")
304304
else()
305-
set(LIBCXX_PSTL_CPU_BACKEND "serial" CACHE STRING "Which PSTL CPU backend to use")
305+
set(LIBCXX_PSTL_BACKEND "serial" CACHE STRING "Which PSTL backend to use")
306306
endif()
307307

308308
# Misc options ----------------------------------------------------------------
@@ -792,14 +792,14 @@ elseif (LIBCXX_HARDENING_MODE STREQUAL "debug")
792792
config_define(8 _LIBCPP_HARDENING_MODE_DEFAULT)
793793
endif()
794794

795-
if (LIBCXX_PSTL_CPU_BACKEND STREQUAL "serial")
796-
config_define(1 _LIBCPP_PSTL_CPU_BACKEND_SERIAL)
797-
elseif(LIBCXX_PSTL_CPU_BACKEND STREQUAL "std_thread")
798-
config_define(1 _LIBCPP_PSTL_CPU_BACKEND_THREAD)
799-
elseif(LIBCXX_PSTL_CPU_BACKEND STREQUAL "libdispatch")
800-
config_define(1 _LIBCPP_PSTL_CPU_BACKEND_LIBDISPATCH)
795+
if (LIBCXX_PSTL_BACKEND STREQUAL "serial")
796+
config_define(1 _LIBCPP_PSTL_BACKEND_SERIAL)
797+
elseif(LIBCXX_PSTL_BACKEND STREQUAL "std_thread")
798+
config_define(1 _LIBCPP_PSTL_BACKEND_STD_THREAD)
799+
elseif(LIBCXX_PSTL_BACKEND STREQUAL "libdispatch")
800+
config_define(1 _LIBCPP_PSTL_BACKEND_LIBDISPATCH)
801801
else()
802-
message(FATAL_ERROR "LIBCXX_PSTL_CPU_BACKEND is set to ${LIBCXX_PSTL_CPU_BACKEND}, which is not a valid backend.
802+
message(FATAL_ERROR "LIBCXX_PSTL_BACKEND is set to ${LIBCXX_PSTL_BACKEND}, which is not a valid backend.
803803
Valid backends are: serial, std_thread and libdispatch")
804804
endif()
805805

libcxx/cmake/caches/Apple.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ set(LIBCXX_ENABLE_STATIC ON CACHE BOOL "")
77
set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "")
88
set(LIBCXX_CXX_ABI libcxxabi CACHE STRING "")
99
set(LIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS ON CACHE BOOL "")
10-
set(LIBCXX_PSTL_CPU_BACKEND libdispatch CACHE STRING "")
10+
set(LIBCXX_PSTL_BACKEND libdispatch CACHE STRING "")
1111

1212
set(LIBCXX_HERMETIC_STATIC_LIBRARY ON CACHE BOOL "")
1313
set(LIBCXXABI_HERMETIC_STATIC_LIBRARY ON CACHE BOOL "")

libcxx/include/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,12 @@ set(files
7373
__algorithm/pop_heap.h
7474
__algorithm/prev_permutation.h
7575
__algorithm/pstl_any_all_none_of.h
76-
__algorithm/pstl_backend.h
77-
__algorithm/pstl_backends/cpu_backend.h
7876
__algorithm/pstl_backends/cpu_backends/any_of.h
79-
__algorithm/pstl_backends/cpu_backends/backend.h
8077
__algorithm/pstl_backends/cpu_backends/fill.h
8178
__algorithm/pstl_backends/cpu_backends/find_if.h
8279
__algorithm/pstl_backends/cpu_backends/for_each.h
83-
__algorithm/pstl_backends/cpu_backends/libdispatch.h
8480
__algorithm/pstl_backends/cpu_backends/merge.h
85-
__algorithm/pstl_backends/cpu_backends/serial.h
8681
__algorithm/pstl_backends/cpu_backends/stable_sort.h
87-
__algorithm/pstl_backends/cpu_backends/thread.h
8882
__algorithm/pstl_backends/cpu_backends/transform.h
8983
__algorithm/pstl_backends/cpu_backends/transform_reduce.h
9084
__algorithm/pstl_copy.h
@@ -594,6 +588,11 @@ set(files
594588
__numeric/transform_exclusive_scan.h
595589
__numeric/transform_inclusive_scan.h
596590
__numeric/transform_reduce.h
591+
__pstl/backends/libdispatch.h
592+
__pstl/backends/serial.h
593+
__pstl/backends/std_thread.h
594+
__pstl/configuration.h
595+
__pstl/configuration_fwd.h
597596
__pstl/cpu_algos/cpu_traits.h
598597
__random/bernoulli_distribution.h
599598
__random/binomial_distribution.h

libcxx/include/__algorithm/pstl_backends/cpu_backend.h

Lines changed: 0 additions & 23 deletions
This file was deleted.

libcxx/include/__algorithm/pstl_backends/cpu_backends/any_of.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111

1212
#include <__algorithm/any_of.h>
1313
#include <__algorithm/find_if.h>
14-
#include <__algorithm/pstl_backends/cpu_backends/backend.h>
1514
#include <__atomic/atomic.h>
1615
#include <__atomic/memory_order.h>
1716
#include <__config>
1817
#include <__functional/operations.h>
1918
#include <__iterator/concepts.h>
19+
#include <__pstl/configuration_fwd.h>
2020
#include <__pstl/cpu_algos/cpu_traits.h>
2121
#include <__type_traits/is_execution_policy.h>
2222
#include <__utility/move.h>

libcxx/include/__algorithm/pstl_backends/cpu_backends/backend.h

Lines changed: 0 additions & 45 deletions
This file was deleted.

libcxx/include/__algorithm/pstl_backends/cpu_backends/fill.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
#define _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_FILL_H
1111

1212
#include <__algorithm/fill.h>
13-
#include <__algorithm/pstl_backends/cpu_backends/backend.h>
1413
#include <__config>
1514
#include <__iterator/concepts.h>
15+
#include <__pstl/configuration_fwd.h>
1616
#include <__pstl/cpu_algos/cpu_traits.h>
1717
#include <__type_traits/is_execution_policy.h>
1818
#include <__utility/empty.h>

libcxx/include/__algorithm/pstl_backends/cpu_backends/find_if.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
#define _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_FIND_IF_H
1111

1212
#include <__algorithm/find_if.h>
13-
#include <__algorithm/pstl_backends/cpu_backends/backend.h>
1413
#include <__atomic/atomic.h>
1514
#include <__config>
1615
#include <__functional/operations.h>
1716
#include <__iterator/concepts.h>
1817
#include <__iterator/iterator_traits.h>
18+
#include <__pstl/configuration_fwd.h>
1919
#include <__pstl/cpu_algos/cpu_traits.h>
2020
#include <__type_traits/is_execution_policy.h>
2121
#include <__utility/move.h>

libcxx/include/__algorithm/pstl_backends/cpu_backends/for_each.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
#define _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKNEDS_FOR_EACH_H
1111

1212
#include <__algorithm/for_each.h>
13-
#include <__algorithm/pstl_backends/cpu_backends/backend.h>
1413
#include <__config>
1514
#include <__iterator/concepts.h>
15+
#include <__pstl/configuration_fwd.h>
1616
#include <__pstl/cpu_algos/cpu_traits.h>
1717
#include <__type_traits/is_execution_policy.h>
1818
#include <__utility/empty.h>

libcxx/include/__algorithm/pstl_backends/cpu_backends/merge.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
#define _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_MERGE_H
1111

1212
#include <__algorithm/merge.h>
13-
#include <__algorithm/pstl_backends/cpu_backends/backend.h>
1413
#include <__config>
1514
#include <__iterator/concepts.h>
15+
#include <__pstl/configuration_fwd.h>
1616
#include <__pstl/cpu_algos/cpu_traits.h>
1717
#include <__type_traits/is_execution_policy.h>
1818
#include <__utility/move.h>

libcxx/include/__algorithm/pstl_backends/cpu_backends/stable_sort.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
#ifndef _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_STABLE_SORT_H
1010
#define _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_STABLE_SORT_H
1111

12-
#include <__algorithm/pstl_backends/cpu_backends/backend.h>
1312
#include <__algorithm/stable_sort.h>
1413
#include <__config>
14+
#include <__pstl/configuration_fwd.h>
1515
#include <__pstl/cpu_algos/cpu_traits.h>
1616
#include <__type_traits/is_execution_policy.h>
1717
#include <__utility/empty.h>

libcxx/include/__algorithm/pstl_backends/cpu_backends/transform.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
#ifndef _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_TRANSFORM_H
1010
#define _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_TRANSFORM_H
1111

12-
#include <__algorithm/pstl_backends/cpu_backends/backend.h>
1312
#include <__algorithm/transform.h>
1413
#include <__config>
1514
#include <__iterator/concepts.h>
1615
#include <__iterator/iterator_traits.h>
16+
#include <__pstl/configuration_fwd.h>
1717
#include <__pstl/cpu_algos/cpu_traits.h>
1818
#include <__type_traits/enable_if.h>
1919
#include <__type_traits/is_execution_policy.h>

libcxx/include/__algorithm/pstl_backends/cpu_backends/transform_reduce.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
#ifndef _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_TRANSFORM_REDUCE_H
1010
#define _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_TRANSFORM_REDUCE_H
1111

12-
#include <__algorithm/pstl_backends/cpu_backends/backend.h>
1312
#include <__config>
1413
#include <__iterator/concepts.h>
1514
#include <__iterator/iterator_traits.h>
1615
#include <__numeric/transform_reduce.h>
16+
#include <__pstl/configuration_fwd.h>
1717
#include <__pstl/cpu_algos/cpu_traits.h>
1818
#include <__type_traits/desugars_to.h>
1919
#include <__type_traits/is_arithmetic.h>

libcxx/include/__algorithm/pstl_copy.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
#define _LIBCPP___ALGORITHM_PSTL_COPY_H
1111

1212
#include <__algorithm/copy_n.h>
13-
#include <__algorithm/pstl_backend.h>
1413
#include <__algorithm/pstl_frontend_dispatch.h>
1514
#include <__algorithm/pstl_transform.h>
1615
#include <__config>
1716
#include <__functional/identity.h>
1817
#include <__iterator/concepts.h>
18+
#include <__pstl/configuration.h>
1919
#include <__type_traits/enable_if.h>
2020
#include <__type_traits/is_constant_evaluated.h>
2121
#include <__type_traits/is_execution_policy.h>

libcxx/include/__algorithm/pstl_count.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111

1212
#include <__algorithm/count.h>
1313
#include <__algorithm/for_each.h>
14-
#include <__algorithm/pstl_backend.h>
1514
#include <__algorithm/pstl_for_each.h>
1615
#include <__algorithm/pstl_frontend_dispatch.h>
1716
#include <__atomic/atomic.h>
1817
#include <__config>
1918
#include <__functional/operations.h>
2019
#include <__iterator/iterator_traits.h>
2120
#include <__numeric/pstl_transform_reduce.h>
21+
#include <__pstl/configuration.h>
2222
#include <__type_traits/enable_if.h>
2323
#include <__type_traits/is_execution_policy.h>
2424
#include <__type_traits/remove_cvref.h>

libcxx/include/__algorithm/pstl_find.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111

1212
#include <__algorithm/comp.h>
1313
#include <__algorithm/find.h>
14-
#include <__algorithm/pstl_backend.h>
1514
#include <__algorithm/pstl_frontend_dispatch.h>
1615
#include <__config>
1716
#include <__iterator/cpp17_iterator_concepts.h>
17+
#include <__pstl/configuration.h>
1818
#include <__type_traits/enable_if.h>
1919
#include <__type_traits/is_execution_policy.h>
2020
#include <__type_traits/remove_cvref.h>

libcxx/include/__algorithm/pstl_for_each.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111

1212
#include <__algorithm/for_each.h>
1313
#include <__algorithm/for_each_n.h>
14-
#include <__algorithm/pstl_backend.h>
1514
#include <__algorithm/pstl_frontend_dispatch.h>
1615
#include <__config>
1716
#include <__iterator/concepts.h>
1817
#include <__iterator/cpp17_iterator_concepts.h>
18+
#include <__pstl/configuration.h>
1919
#include <__type_traits/enable_if.h>
2020
#include <__type_traits/is_execution_policy.h>
2121
#include <__type_traits/remove_cvref.h>

libcxx/include/__algorithm/pstl_generate.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
#ifndef _LIBCPP___ALGORITHM_PSTL_GENERATE_H
1010
#define _LIBCPP___ALGORITHM_PSTL_GENERATE_H
1111

12-
#include <__algorithm/pstl_backend.h>
1312
#include <__algorithm/pstl_for_each.h>
1413
#include <__algorithm/pstl_frontend_dispatch.h>
1514
#include <__config>
1615
#include <__iterator/cpp17_iterator_concepts.h>
1716
#include <__iterator/iterator_traits.h>
17+
#include <__pstl/configuration.h>
1818
#include <__type_traits/enable_if.h>
1919
#include <__type_traits/is_execution_policy.h>
2020
#include <__type_traits/remove_cvref.h>

libcxx/include/__algorithm/pstl_is_partitioned.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
#define _LIBCPP___ALGORITHM_PSTL_IS_PARITTIONED
1111

1212
#include <__algorithm/pstl_any_all_none_of.h>
13-
#include <__algorithm/pstl_backend.h>
1413
#include <__algorithm/pstl_find.h>
1514
#include <__algorithm/pstl_frontend_dispatch.h>
1615
#include <__config>
16+
#include <__pstl/configuration.h>
1717
#include <__type_traits/enable_if.h>
1818
#include <__type_traits/is_execution_policy.h>
1919
#include <__type_traits/remove_cvref.h>

libcxx/include/__algorithm/pstl_merge.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
#ifndef _LIBCPP___ALGORITHM_PSTL_MERGE_H
1010
#define _LIBCPP___ALGORITHM_PSTL_MERGE_H
1111

12-
#include <__algorithm/pstl_backend.h>
1312
#include <__config>
1413
#include <__functional/operations.h>
14+
#include <__pstl/configuration.h>
1515
#include <__type_traits/enable_if.h>
1616
#include <__type_traits/is_execution_policy.h>
1717
#include <__type_traits/remove_cvref.h>

libcxx/include/__algorithm/pstl_move.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
#define _LIBCPP___ALGORITHM_PSTL_MOVE_H
1111

1212
#include <__algorithm/copy_n.h>
13-
#include <__algorithm/pstl_backend.h>
1413
#include <__algorithm/pstl_frontend_dispatch.h>
1514
#include <__algorithm/pstl_transform.h>
1615
#include <__config>
1716
#include <__functional/identity.h>
1817
#include <__iterator/iterator_traits.h>
18+
#include <__pstl/configuration.h>
1919
#include <__type_traits/enable_if.h>
2020
#include <__type_traits/is_constant_evaluated.h>
2121
#include <__type_traits/is_execution_policy.h>

libcxx/include/__algorithm/pstl_replace.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
#ifndef _LIBCPP___ALGORITHM_PSTL_REPLACE_H
1010
#define _LIBCPP___ALGORITHM_PSTL_REPLACE_H
1111

12-
#include <__algorithm/pstl_backend.h>
1312
#include <__algorithm/pstl_for_each.h>
1413
#include <__algorithm/pstl_frontend_dispatch.h>
1514
#include <__algorithm/pstl_transform.h>
1615
#include <__config>
1716
#include <__iterator/iterator_traits.h>
17+
#include <__pstl/configuration.h>
1818
#include <__type_traits/enable_if.h>
1919
#include <__type_traits/remove_cvref.h>
2020
#include <__utility/move.h>

libcxx/include/__algorithm/pstl_rotate_copy.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
#ifndef _LIBCPP___ALGORITHM_PSTL_ROTATE_COPY_H
1010
#define _LIBCPP___ALGORITHM_PSTL_ROTATE_COPY_H
1111

12-
#include <__algorithm/pstl_backend.h>
1312
#include <__algorithm/pstl_copy.h>
1413
#include <__algorithm/pstl_frontend_dispatch.h>
14+
#include <__pstl/configuration.h>
1515
#include <__type_traits/is_execution_policy.h>
1616
#include <optional>
1717

libcxx/include/__algorithm/pstl_sort.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
#ifndef _LIBCPP___ALGORITHM_PSTL_SORT_H
1010
#define _LIBCPP___ALGORITHM_PSTL_SORT_H
1111

12-
#include <__algorithm/pstl_backend.h>
1312
#include <__algorithm/pstl_frontend_dispatch.h>
1413
#include <__algorithm/pstl_stable_sort.h>
1514
#include <__config>
1615
#include <__functional/operations.h>
16+
#include <__pstl/configuration.h>
1717
#include <__type_traits/is_execution_policy.h>
1818
#include <__type_traits/remove_cvref.h>
1919
#include <__utility/empty.h>

libcxx/include/__algorithm/pstl_stable_sort.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
#ifndef _LIBCPP___ALGORITHM_PSTL_STABLE_SORT_H
1010
#define _LIBCPP___ALGORITHM_PSTL_STABLE_SORT_H
1111

12-
#include <__algorithm/pstl_backend.h>
1312
#include <__config>
1413
#include <__functional/operations.h>
14+
#include <__pstl/configuration.h>
1515
#include <__type_traits/enable_if.h>
1616
#include <__type_traits/is_execution_policy.h>
1717
#include <__type_traits/remove_cvref.h>

0 commit comments

Comments
 (0)