HPX V1.8.0 (May 18, 2022)#

With HPX parallel algorithms been fully adapted to C++20 the new release achieves full conformance with C++20 concurrency and parallelism facilities. HPX now supports all of the algorithms as specified by C++20. We have added support for vectorization to more of our algorithms. Much work has been done towards implementing P2300 (“std::execution”) and implementing the underlying senders/receivers facilities. Finally, The new release comes with a brand new documentation interface!

General changes#

  • The new documentation can now be found on our webpage: https://hpx-docs.stellar-group.org. This includes a completely new and user-friendly interface environment along with restructuring of certain components. The content in the “Quick start”, “Manual” and “Examples” was improved, while the “Build system” page was adapted to include necessary information for newcommers.

  • With the vectorization support available in modern hardware architectures HPX now provides new data-parallel vector execution policies hpx::execution::simd and hpx::execution::par_simd that enable significant speed-up of our parallel algorithm implementations. The following algorithms now support SIMD execution:

    • copy, copy_n

    • generate

    • adjacent_difference, adjacent_find

    • all_of, any_of, none_of

    • equal, mismatch,

    • inner_product

    • count, count_if

    • fill, fill_n

    • find, find_end, find_first_of, find_if, find_if_not

    • for_each, for_each_n

    • generate, generate_n.

  • Based on top of P2300 the HPX parallel algorithms now support the pipeline syntax towards an effort to unify their usage along with senders/receivers. The HPX parallel algorithms can now bind with senders/receivers using the pipeline operator.

  • Several changes took place on the executors provided by HPX:

  • The executors now support the num_cores options in order for the user to be able to specify the desired number of cores to be used in the correspodning execution.

  • The scheduler executor was implemented on top of senders/receivers and can be used with all HPX facilities that schedule new work, such as parallel algorithms, hpx::async, hpx::dataflow, etc.

  • The performance of fork_join_executor was improved.

  • The following algorithms have been added/adapted to be C++20 conformant:

    • min_element

    • max_element

    • minmax_element

    • starts_with

    • ends_with

    • swap_ranges

    • unique

    • unique_copy

    • rotate

    • rotate_copy

    • sort

    • shift_left

    • shift_right

    • stable_sort

    • partition

    • partition_copy

    • stable_partition

    • adjacent_difference

    • nth_element

    • partial_sort

    • partial_sort_copy.

  • HPX_FORWARD/HPX_MOVE macros were introduced that replaced the std::move and std::forward facilities that in the library code.

  • Hangs on distributed barrier were fixed.

  • The performance of scan_partitioner was improved.

  • Support was added for thread_priority to the parallel_execution_policy

  • Regarding senders/receivers and the P2300 proposal various actions took place. stop_token was adapted to the recent proposal version (in_place_stop_token was introduced). Also hint, annotation, priority and stacksize properties were added to the scheduler executor. Stop support was added to when_all. Support for completion signatures was added. The following schedulers and algorithms were added:

    • get_completion_scheduler

    • any_sender and unique_any_sender

    • split sender

    • transform_mpi sender

    • transfer sender

    • let_error, let_stopped

    • get_env and related environment queries

    • schedule, set_value, set_error, set_done, start and connect are now proper customization points as defined in P2300.

  • Several namespaces were altered towards conformance with C++20. Compatibility layers have been added and the old versions will be removed in next releases. The namespace changes are the following:

    • hpx::parallel::induction/reduction were movied into namespace hpx::experimental

    • for_loop and friends were moved into namespace hpx::experimental.

    • hpx::util::optional and friends were moved into namespace hpx.

    • hpx::lcos::barrier has been moved into the hpx::distributed namespace and hpx::lcos::local::cpp20_barrier has been renamed to barrier and moved into the hpx namespace.

    • hpx::lcos::latch has been moved into the hpx::distributed namespace and lcos::local::latch has been moved into the hpx namespace. The count_down_and_wait() functionality of latch has been renamed to arrive_and_wait().

    • hpx::util::unique_function_nonser has been renamed to hpx::move_only_function.

    • hpx::util::unique_function has been renamed to hpx::distributed::move_only_function.

    • hpx::util::function has been renamed to hpx::distributed::function.

    • hpx::util::function_nonser has been renamed to hpx::function.

    • hpx::util::function_ref have been moved to namespace hpx.

    • hpx::lcos::split_future changed namespace and is now used as hpx::split_future.

    • hpx::lcos::local::counting_semaphore has been deprecated and hpx::lcos::local::cpp20_counting_semaphore has been renamed to hpx::counting_semaphore.

    • hpx::lcos::local::cpp20_binary_semaphore has been renamed to hpx::binary_semaphore.

    • hpx::lcos::local::sliding_semaphore has been renamed to hpx::sliding_semaphore and

    • hpx::lcos::local::sliding_semaphore_var has been renamed to hpx::sliding_semaphore_var.

    • hpx::lcos::local::spinlock has been renamed to hpx::spinlock.

    • hpx::lcos::local::mutex has been renamed to hpx::mutex.

    • hpx::lcos::local::timed_mutex has been renamed to hpx::timed_mutex.

    • hpx::lcos::local::no_mutex has been renamed to hpx::no_mutex.

    • hpx::lcos::local::recursive_mutex has been renamed to hpx::recursive_mutex.

    • hpx::lcos::local::shared_mutex has been renamed to hpx::shared_mutex.

    • hpx::lcos::local::upgrade_lock has been renamed to hpx::upgrade_lock.

    • hpx::lcos::local::upgrade_to_unique_lock has been renamed to hpx::upgrade_to_unique_lock.

    • hpx::lcos::local::condition_variable has been renamed to hpx::condition_variable. hpx::lcos::local::condition_variable_var has been renamed to hpx::condition_variable_var.

    • hpx::lcos::local::once_flag has been renamed to hpx::once_flag, and . hpx::lcos::local::call_once has been renamed to hpx::call_once.

  • The new LCI (Lightweight Communication Interface) parcelport was added that supports irregular and asynchronous applications like graph analysis, sparce linear algebra, modern parallel architectures etc. Major features include:

    • Support for advanced communication primitives like two sided send/recv and one sided remote put.

    • Better multi-threaded performance.

    • Explicit user control of communication resource.

    • Flexible signaling mechanisms (synchronizer, completion queue, active message handler).

  • The following CMake flags were added, mostly to support using HPX as a backend for SHAD (https://github.com/pnnl/SHAD). Please note that these options enable questionable functionalities, partially they even enable undefined behavior. Please only use any of them if you know what you’re doing:

    • HPX_SERIALIZATION_WITH_ALLOW_RAW_POINTER_SERIALIZATION

    • HPX_SERIALIZATION_WITH_ALL_TYPES_ARE_BITWISE_SERIALIZABLE

    • HPX_SERIALIZATION_WITH_ALLOW_CONST_TUPLE_MEMBERS

Breaking changes#

  • Minimum required C++ standard library is C++17.

  • Support for GCC 7 and Clang 8.0.0 and below has been removed.

  • CUDA version required updated to 11.4.

  • CMake version required updated to 3.18.

  • The default version of Asio used was updated to 1.20.0.

  • The default version of APEX used was updated to 2.5.1.

  • APEX version was updated to 2.5.1.

  • tagged_pair and tagged_tuple were removed.

  • tag_dispatch was renamed to tag_invoke.

  • hpx.max_backgroud_threads was renamed to hpx.parcel.max_background_threads.

  • The following CMake flags were removed after being deprecated for at least two releases:

    • HPX_SCHEDULER_MAX_TERMINATED_THREADS

    • HPX_WITH_GOOGLE_PERFTOOLS

    • HPX_WITH_INIT_START_OVERLOADS_COMPATIBILITY

    • HPX_HAVE_{COROUTINE,PLUGIN}_GCC_HIDDEN_VISIBILITY

    • HPX_TOP_LEVEL

    • HPX_WITH_COMPUTE_CUDA

    • HPX_WITH_ASYNC_CUDA

  • annotate_function was renamed to scoped_annotation.

  • execution::transform was renamed to execution::then.

  • execution::detach was renamed to execution::start_detached.

  • execution::on_sender was renamed to execution::schedule_on.

  • execution::just_on was renamed to execution::just_transfer.

  • execution::set_done was renamed to execution::set_stopped.

Closed issues#

  • Issue #5871 - distributed::channel.regsiter_as terminates the active task.

  • Issue #5856 - Performance counters do not compile

  • Issue #5828 - hpx::distributed:barrier errors

  • Issue #5812 - OctoTiger does not compile with HPX master and CUDA 11.5

  • Issue #5784 - HPX failing with co_await and hpx::when_all(futures)

  • Issue #5774 - CMake can’t find HPXCacheVariables.cmake

  • Issue #5764 - Fix HIP problem

  • Issue #5724 - Missing binary filter compression header

  • Issue #5721 - Cleanup after repository split

  • Issue #5701 - It seems that the tcp parcelport is running, and the MPI parcelport is ignored

  • Issue #5692 - Kokkos compilation fails when using both HPX and CUDA execution spaces with gcc 9.3.0

  • Issue #5686 - Rename annotate_function

  • Issue #5668 - HPX does not detect the C++ 20 standard using gcc 11.2

  • Issue #5666 - Compilation error using boost 1.76 and gcc 11.2.1

  • Issue #5653 - Implement P2248 for our algorithms

  • Issue #5647 - [User input needed] Remove (CUDA) compute functionality?

  • Issue #5590 - hello_world_distributed fails on startup with HPX stable, MPICH 3.3.2, on Deep Bayou

  • Issue #5570 - Rename tag_dispatch to tag_invoke

  • Issue #5566 - can’t build simple example: “Cannot use the dummy implementation of future_then_dispatch”

  • Issue #5565 - build failure: hpx::string_util::trim()

  • Issue #5553 - Github action to validate the cff file refs #5471

  • Issue #5504 - CMake does not work for HPX 1.7.0 on Piz Daint

  • Issue #5503 - Use contiguous index queue in bulk execution to reduce number of spawned tasks

  • Issue #5502 - C++20 std::coroutine cmake detection

  • Issue #5478 - hpx.dll built with vcpkg got functions pointing to the same location

  • Issue #5472 - Compilation error with cuda/11.3

  • Issue #5469 - Compiler warning about HPX_NODISCARD when building with APEX

  • Issue #5463 - Address minor comments of the C++17 PR bump

  • Issue #5456 - Use std::ranges::iter_swap where available

  • Issue #5404 - Build fails with error “Cannot open include file asio/io_context.hpp”

  • Issue #5381 - Add starts_with and ends_with algorithms

  • Issue #5344 - Further simplify tag_invoke helpers

  • Issue #5269 - Allow setting a label on executors/policies

  • Issue #5219 - (Re-)Implement executor API on top of sender/receiver infrastructure

  • Issue #5216 - Performance counter module not loading

  • Issue #5162 - Require C++17 support

  • Issue #5156 - Disentangle segmented algorithms

  • Issue #5118 - Lock held while suspending

  • Issue #5111 - Tests fail to build with binary_filter plugins enabled

  • Issue #5110 - Tests don’t get built

  • Issue #5105 - PAPI performance counters not available

  • Issue #5002 - hpx::lcos::barrier() results in deadlock

  • Issue #4992 - Clang-format the rest of the files

  • Issue #4987 - Use std::function in public APIs

  • Issue #4871 - HEP: conformance to C++20

  • Issue #4822 - Adapt parallel algorithms to C++20

  • Issue #4736 - Deprecate hpx::flush and hpx::endl

  • Issue #4558 - Prevent work-stealing from stalling

  • Issue #4495 - Add anchor links to table rows in documentation

  • Issue #4469 - New thread state: pending_low

  • Issue #4321 - After the modularization the libfabric parcelport does not compile

  • Issue #4308 - Using APEX on multinode jobs when HPX_WITH_NETWORKING = OFF

  • Issue #3995 - Use C++20 std::source_location where available, adapt ours to conform

  • Issue #3861 - Selected processor does not support ‘yield’ in ARM mode

  • Issue #3706 - Add shift_left and shift_right algorithms

  • Issue #3646 - Parallel algorithms should accept iterator/sentinel pairs

  • Issue #3636 - HPX Modularization

  • Issue #3546 - Modularization of HPX

  • Issue #3474 - Modernize CMake used in HPX

  • Issue #1836 - hpx::parallel does not have a sort implementation

  • Issue #1668 - Adapt all parallel algorithms to Ranges TS

  • Issue #1141 - Implement N4409 on top of HPX

Closed pull requests#

  • PR #5885 - Testing newer ASIO version

  • PR #5884 - Fix miscellaneous doc sections

  • PR #5882 - Fixing OctoTiger incompatibility introduced recently

  • PR #5881 - Fixing recent patch that disables ATOMIC_FLAG_INIT for C++20 and up

  • PR #5880 - refactor: convert counter_status enum to enum class

  • PR #5878 - Docs: Replaced non-existent create_reducer function with create_communicator

  • PR #5877 - Doc updates hpx runtime and resources

  • PR #5876 - Updates to documentation; grammar edits.

  • PR #5875 - Doc updates starting the hpx runtime

  • PR #5874 - Doc updates launching configuring

  • PR #5873 - Prevent certain generated files from being deleted on reconfigure

  • PR #5870 - Adding support for the PJM batch environment

  • PR #5867 - Update CMakeLists.txt

  • PR #5866 - add cmake option HPX_WITH_PARCELPORT_COUNTERS

  • PR #5864 - ATOMIC_INIT_FLAG is deprecated starting C++20

  • PR #5863 - Adding llvm 14.0.0 with boost 1.79.0 to Jenkins

  • PR #5861 - Let install step proceed on CircleCI even if the segmented algorithms fail

  • PR #5860 - Updating APEX tag

  • PR #5859 - Splitting documentation generation steps on CircleCI

  • PR #5854 - Fixing left-overs from changing counter_type to enum class

  • PR #5853 - Adding HPX dependency tool (adapted from Boostdep tool)

  • PR #5852 - Optimize LCI parcelport

  • PR #5851 - Forking dynamic_bitset from Boost

  • PR #5850 - Convert perf_counters::counter_type enum to enum class.

  • PR #5849 - Update LCI parcelport to LCI v1.7.1

  • PR #5848 - Fedora related fixes

  • PR #5847 - Fix API, troubleshooting & people

  • PR #5844 - Attempting to fix timeouts of segmented iterator tests

  • PR #5842 - change the default value of HPX_WITH_LCI_TAG to v1.7

  • PR #5841 - Move the split_future facilities into the namespace hpx

  • PR #5840 - wait_xxx_nothrow functions return whether one of the futures is exceptional

  • PR #5839 - Moving a list of synchronization primitives into namespace hpx

  • PR #5837 - Moving latch types to hpx and hpx::distributed namespaces

  • PR #5835 - Add missing compatibility layer for id_type::management_type values

  • PR #5834 - API docs changes

  • PR #5831 - Further improvement actions to rotate

  • PR #5830 - Exposing zero-copy serialization threshold through configuration option

  • PR #5829 - Attempting to fix failing barrier test

  • PR #5827 - Add back explicit template parameter to ignore_while_checking to compile with nvcc

  • PR #5826 - Reduce number of allocations while calling async_bulk_execute

  • PR #5825 - Steal from neighboring NUMA domain only

  • PR #5823 - Remove obsolete directories and adjust build system

  • PR #5822 - Clang-format remaining files

  • PR #5821 - Enable permissive- flag on Windows GitHub actions builders

  • PR #5820 - Convert throwmode enum to enum class

  • PR #5819 - Marking customization points for intrusive_ptr as noexcept

  • PR #5818 - Unconditionally use C++17 attributes

  • PR #5817 - Modernize naming modules

  • PR #5816 - Modernize cache module

  • PR #5815 - Reapply flyby changes from #5467

  • PR #5814 - Avoid test timeouts by reducing test sizes

  • PR #5813 - The CUDA problem is not fixed in V11.5 yet…

  • PR #5811 - Make sure reduction value is properly moved, when possible

  • PR #5810 - Improve error reporting during device initialization in HIP environments

  • PR #5809 - Converting scheduler enums into enum class

  • PR #5808 - Deprecate hpx::flush and friends

  • PR #5807 - Use C++20 std::source_location, if available

  • PR #5806 - Moving promise and packaged_task to new namespaces

  • PR #5805 - Attempting to fix a test failure when using the LCI parcelpor

  • PR #5803 - Attempt to fix CUDA related OctoTiger problems

  • PR #5800 - Add option to restrict MPI background work to subset of cores

  • PR #5798 - Adding MPI as a dependency to APEX

  • PR #5797 - Extend Sphinx role to support arbitrary text to display on a link

  • PR #5796 - Disable CUDA tests that cause NVCC to silently fail without error messages

  • PR #5795 - Avoid writing path and directories into HPXCacheVariables.cmake

  • PR #5793 - Remove features that are deprecated since V1.6

  • PR #5792 - Making sure num_cores is properly handled by parallel_executor

  • PR #5791 - Moving bind, bind_front, bind_back to namespace hpx

  • PR #5790 - Moving serializable function/move_only_function into namespace hpx::distributed

  • PR #5787 - Remove unneeded (and commented) tests

  • PR #5786 - Attempting to fix hangs in distributed barrier

  • PR #5785 - add cmake code to detect arm64 on macOS

  • PR #5783 - Moving function and function_ref into namespace hpx

  • PR #5781 - Updating used version of Visual Studio

  • PR #5780 - Update Piz Daint Jenkins configurations from gcc/clang 7 to 8

  • PR #5778 - Updated for_loop.hpp

  • PR #5777 - Update reference for foreach benchmark

  • PR #5775 - Move optional into namespace hpx

  • PR #5773 - Moving barrier to consolidated namespaces

  • PR #5772 - Adding missing docs for ranges::find_if and find_if_not algorithms

  • PR #5771 - Moving for_loop into namespace hpx::experimental

  • PR #5770 - Fixing HIP issues

  • PR #5769 - Slight improvement of small_vector performance

  • PR #5766 - Fixing a integral conversion warning

  • PR #5765 - Adding a sphinx role allowing to link to a file directly in github

  • PR #5763 - add num_cores facility

  • PR #5762 - Fix Public API main page

  • PR #5761 - Add missing inline to mpi_exception.hpp error_message function

  • PR #5760 - Update cdash build url

  • PR #5759 - Switch to use generic rostam SLURM partitions

  • PR #5758 - Adding support for P2300 completion signatures

  • PR #5757 - Fix missing links in Public API

  • PR #5756 - Add stop support to when_all

  • PR #5755 - Support for data-parallelism for mismatch algorithm

  • PR #5754 - Support for data-parallelism for equal algorithm

  • PR #5751 - Propagate MPI dependencies to command line handling

  • PR #5750 - Make sure required MPI initialization flags are properly applied and supported

  • PR #5749 - P2300 stop token

  • PR #5748 - Adding environmental query CPOs

  • PR #5747 - Renaming set_done to set_stopped (as per P2300)

  • PR #5745 - Modernize serialization module

  • PR #5743 - Add check for MPICH and set the correct env to support multi-threaded

  • PR #5742 - Remove obsolete files related to cpuid, etc.

  • PR #5741 - Support for data-parallelism for adjacent find

  • PR #5740 - Support for data-parallelism for find algorithms

  • PR #5739 - Enable the option to attach a debugger on a segmentation fault (linux)

  • PR #5738 - Fixing spell-checking errors

  • PR #5737 - Attempt to fix migrate_component issue

  • PR #5736 - Set commit status from Jenkins also for special branches

  • PR #5734 - Revert #5586

  • PR #5732 - Attempt to improve build-id reporting to cdash

  • PR #5731 - Randomly delay execution of bash scripts launched by Jenkins

  • PR #5729 - Workaround for CMake/Ninja generator OOM problem

  • PR #5727 - Moving compression plugins to components directory

  • PR #5726 - Moving/consolidating parcel coalescing plugin sources

  • PR #5725 - Making sure headers for serialization filters are being installed

  • PR #5723 - Moving more tests to modules

  • PR #5722 - Removing superfluous semicolons

  • PR #5720 - Moving parcelports into modules

  • PR #5719 - Moving more files to parcelset module

  • PR #5718 - build: refactor sphinx config file

  • PR #5717 - Creating parcelset modules

  • PR #5716 - Avoid duplicate definition error

  • PR #5715 - The new LCI parcelport for HPX

  • PR #5714 - Refine propagation of HPX_WITH_… options

  • PR #5713 - Significantly reduce CI jobs run on Piz Daint

  • PR #5712 - Updating jenkins configuration for Rostam2.2

  • PR #5711 - Refactor manual sections

  • PR #5710 - Making task_group serializable

  • PR #5709 - Update the MPI cmake setup

  • PR #5707 - Better diagnose parcel bootstrap problems

  • PR #5704 - Test with hwloc 2.7.0 with GCC 11

  • PR #5703 - Fix counting_iterator container tests

  • PR #5702 - Attempting to fix CircleCI timeouts

  • PR #5699 - Update CI to use Boost 1.78.0

  • PR #5697 - Adding fork_join_executor to foreach_benchmark

  • PR #5696 - Modernize when_all and friends (when_any, when_some, when_each)

  • PR #5693 - Fix test errors with _GLIBCXX_DEBUG defined

  • PR #5691 - Rename annotate_function to scoped_annotation

  • PR #5690 - Replace tag_dispatch with tag_invoke in minmax segmented

  • PR #5688 - Remove more deprecated macros

  • PR #5687 - Add most important CMake options

  • PR #5685 - Fix future API

  • PR #5684 - Move lock registration to separate module and remove global lock registration

  • PR #5683 - Make hpx::wait_all etc. throw exceptions when waited futures hold exceptions and deprecate hpx::lcos::wait_all[_n] in favor of hpx::wait_all[_n]

  • PR #5682 - Fix macOS test exceptions

  • PR #5681 - docs: add links to hpx recepies

  • PR #5680 - Embed base execution policies to datapar execution policies

  • PR #5679 - Fix fork_join_executor with dynamic schedule

  • PR #5678 - Fix compilation of service executors with nvcc

  • PR #5677 - Remove compute_cuda module

  • PR #5676 - Don’t require up-to-date approvals for bors

  • PR #5675 - Add default template type parameters for algorithms

  • PR #5674 - Allow using any_sender in global variables

  • PR #5671 - Making sure task_group can be reused

  • PR #5670 - Relax constraints on execution::when_all

  • PR #5669 - Use HPX_WITH_CXX_STANDARD for controlling C++ version

  • PR #5667 - Attempt to fix compilation issues with Boost V1.76

  • PR #5664 - Change logging errors to warnings in schedulers

  • PR #5663 - Use dynamic bitsets by default for CPU masks

  • PR #5662 - Disambiguate namespace for MSVC

  • PR #5660 - Replacing remaining std::forward and std::move with HPX_FORWARD and HPX_MOVE

  • PR #5659 - Modernize hpx::future and related facilities

  • PR #5658 - Replace HPX_INLINE_CONSTEXPR_VARIABLE with inline constexpr

  • PR #5657 - Remove tagged, tagged_pair and tagged_tuple, remove tuple/pair specializations

  • PR #5656 - Rename on execution::schedule_from, rename just_on to just_transfer, and add transfer

  • PR #5655 - Avoid for module lists to grow indefinitely in cmake cache

  • PR #5649 - build: replace usage of Python’s reserved words and functions as variable names

  • PR #5648 - Modernize action modules and related code

  • PR #5646 - Fix ends_with test

  • PR #5645 - Add matrix multiplication example

  • PR #5644 - Rename execution::transform to execution::then and execution::detach to execution::start_detached

  • PR #5643 - Update performance test references

  • PR #5642 - Adapting adjacent_difference to work with proxy iterators

  • PR #5641 - Factorize perftests scripts

  • PR #5640 - Fixed links to sources in Sphinx documentation

  • PR #5639 - Fix generate datapar tests for Vc

  • PR #5638 - Simd all any none

  • PR #5637 - Use bors for merging pull requests

  • PR #5636 - Fix leftover std::holds_alternative usage

  • PR #5635 - Update container image tag in GitHub actions HIP configuration

  • PR #5633 - Moving packaged_task to module futures

  • PR #5632 - Tell Asio to use std::aligned_new only if available

  • PR #5631 - Adding tag parameter to channel communicator get/set

  • PR #5630 - Add partial_sort_copy and adapt partial sort to c++ 20

  • PR #5629 - Set HPX_WITH_FETCH_ASIO to OFF as available in the docker image

  • PR #5628 - Add Clang 13 CI configuration

  • PR #5627 - Replace alternative keyword

  • PR #5626 - docs: add support for BibTeX references in Sphinx docs

  • PR #5624 - Fix pkgconfig replacements involving CMAKE_INSTALL_PREFIX

  • PR #5623 - build: remove unused import from conf.py.in

  • PR #5622 - Remove HPX_WITH_VCPKG CMake option

  • PR #5621 - Replacing boost::container::small_vector

  • PR #5620 - Update Asio tag from 1.18.2 to 1.20.0

  • PR #5619 - Fix block_os_threads_1036 test

  • PR #5618 - Make sure condition variables are notified under a lock in the thread_pool_scheduler test

  • PR #5617 - Use advance_and_get_distance where required

  • PR #5616 - Remove separately building segmented algorithms on CircleCI

  • PR #5613 - Fix Vc datapar adjacent_difference

  • PR #5609 - docs: add anchor links to performance counter tables

  • PR #5608 - Fix header test error by adding missing numeric

  • PR #5607 - Fix simd adj diff

  • PR #5605 - Fix usage of HPX_INVOKE macro

  • PR #5604 - Make use of shell-session to allow non-copyable $

  • PR #5603 - Suppress some MSVC warnings in C++20 mode

  • PR #5602 - Test HPX_DATASTRUCTURES_WITH_ADAPT_STD_TUPLE=OFF to one CI configuration

  • PR #5601 - Test case for any_sender should use hpx::tuple

  • PR #5600 - Rename tag_dispatch back to tag_invoke

  • PR #5599 - Change theme, fix Quickstart & Examples

  • PR #5596 - Use precompiled headers in tests

  • PR #5595 - Drop semicolons for macro calls

  • PR #5594 - Adapt datapar generate

  • PR #5593 - Update any_sender to use tag_dispatch for execution customizations

  • PR #5592 - Add nth_element

  • PR #5591 - Remove unnecessary checks for C++17 for tests

  • PR #5589 - Add HPX_FORWARD/HPX_MOVE macros

  • PR #5588 - Fixing the output formatting for id_types

  • PR #5586 - Remove local functionality

  • PR #5585 - Delete GitExternal.cmake

  • PR #5584 - Serialization of hpx::tuple must use hpx::get

  • PR #5583 - fix coroutine_traits allocate calls, add unhandled_exception() implementation.

  • PR #5582 - Make more examples work with local runtime

  • PR #5581 - Add support for several performance tests in CI

  • PR #5580 - Adapt simd adj diff

  • PR #5579 - Split absolute paths for generated pkg-config files into -L/-l parts

  • PR #5577 - fix unit fill test for datapar with Vc

  • PR #5576 - Update forgotten “Full” names

  • PR #5575 - Change scan partitioner implementation

  • PR #5574 - Remove a few deprecated and unused CMake options

  • PR #5572 - Remove more guards for the distributed runtime

  • PR #5571 - Add workaround for libstc++ in string_util trim

  • PR #5569 - Use no_unique_address in sender adaptors

  • PR #5568 - Change try catch block to try_catch_exception_ptr

  • PR #5567 - Make default_agent::yield actually yield

  • PR #5564 - Adjacent

  • PR #5562 - More changes to overcome build problems on Windows after recent module rearrangements

  • PR #5560 - Update tests and examples

  • PR #5559 - Fixing cmake folder names after module restructuring

  • PR #5558 - Fixing wrong module dependencies

  • PR #5557 - Adding an example for the new channel_communicator API

  • PR #5556 - Remove leftover thread pool os executor tests

  • PR #5555 - Add option enabling serializing raw pointers

  • PR #5554 - Make sure command line aliasing is properly handled

  • PR #5552 - Modernizing some of the async facilities

  • PR #5551 - Fixing for local executions of actions to properly set task names

  • PR #5550 - Update CUDA module in clang-cuda configuration

  • PR #5549 - Fixing agent_ref::yield_k to actually call yield_k

  • PR #5548 - Making get_action_name() noexcept

  • PR #5547 - Fixing communication set

  • PR #5546 - Fixing shutdown problems caused by missing ref-counting

  • PR #5545 - Remove wrong move in thread_pool_scheduler_bulk.hpp

  • PR #5543 - Extend launch policy to carry stack size and scheduling hint in addition to priority

  • PR #5542 - Simplify execution CPOs

  • PR #5540 - Adapt partition, partition_copy and stable_partition to C++ 20

  • PR #5539 - Adapt mismatch to support sentinels

  • PR #5538 - Document specific sphinx version required for the documentation

  • PR #5537 - Test release and debug builds on Piz Daint

  • PR #5536 - This fixes referencing stale iterators during the execution of binary mismatch

  • PR #5535 - Rename simdpar to par_simd

  • PR #5534 - Fix Quick start & Manual Docs

  • PR #5533 - Fix annotate_function for std::string

  • PR #5532 - Update two remaining apex links from khuck to UO-OACISS

  • PR #5531 - Use contiguous_index_queue in thread_pool_scheduler

  • PR #5530 - Eagerly initialize a configurable number of threads on scheduler/thread queue init

  • PR #5529 - Update benchmarks and add support for scheduler_executor

  • PR #5528 - Add missing properties to executors/schedulers

  • PR #5527 - Set local thread/pool number in local/static_queue_scheduler

  • PR #5526 - Update Rostam HIP configuration to use 4.3.0

  • PR #5525 - Fix Building HPX in Quick start

  • PR #5524 - Upload image on cdash

  • PR #5523 - Modernize facilities related to hpx::sync

  • PR #5522 - Add sender overloads for remaining algorithms

  • PR #5521 - Minor changes that improve performance

  • PR #5520 - Update reference as perftests failing regularly

  • PR #5519 - Add transform_mpi sender adapter

  • PR #5518 - Add sender overloads to rotate/rotate_copy

  • PR #5517 - Fix coroutine integration

  • PR #5515 - Avoid deadlock in ignore_while_locked_1485 test

  • PR #5514 - Add split sender adapter

  • PR #5512 - Update Rostam HIP configuration

  • PR #5511 - Fix Asio target name for precompiled headers

  • PR #5510 - Add any_sender and unique_any_sender

  • PR #5509 - Test with Boost 1.77 on gcc/clang-newest configurations

  • PR #5508 - Minor release changes from 1.7.1

  • PR #5507 - Add missing commits from scheduler_executor PR

  • PR #5506 - Fix condition for checking if we should use our own variant

  • PR #5501 - Attempt to fix thread_pool_scheduler test

  • PR #5493 - Update Jenkins GitHub token to use StellarBot GitHub account

  • PR #5490 - Fix clang-format error on master

  • PR #5487 - Add get_completion_scheduler CPO and customize bulk for thread_pool_scheduler

  • PR #5484 - Add missing header to jacobi_component/server/solver.hpp

  • PR #5481 - Changing the APEX repository to the new location

  • PR #5479 - Fix version check for CUDA noexcept/result_of bug

  • PR #5477 - Require cxx17 minor comments

  • PR #5476 - Fix cmake format error

  • PR #5475 - Require CMake 3.18 as it is already a requirement for CUDA

  • PR #5474 - Make the cuda parameters of try_compile optional

  • PR #5473 - Update cuda arch and change cuda version

  • PR #5471 - Add corrected citation.cff

  • PR #5470 - Adapt stable_sort to C++ 20

  • PR #5468 - Experimentation to make the perftest report public

  • PR #5466 - Add shift_left and shift_right algorithms

  • PR #5465 - Adapt datapar fill

  • PR #5464 - Moving tag_dispatch to separate module

  • PR #5461 - Rename HPX_WITH_CUDA_COMPUTE with HPX_WITH_COMPUTE_CUDA

  • PR #5460 - Adapt sort to C++ 20

  • PR #5459 - Adapt rotate/rotate_copy to C++20

  • PR #5458 - Adapt unique and unique_copy to C++ 20

  • PR #5455 - Remove and clean up fallback sender implementations

  • PR #5454 - Make performance plot show even if similar performance

  • PR #5453 - Post 1.7.0 version bump

  • PR #5452 - Fix find_end parallel overload

  • PR #5450 - Change the print-bind output to be more precise

  • PR #5449 - Adapt swap_ranges to C++ 20

  • PR #5446 - Use more verbose names in sender algorithms

  • PR #5443 - Properly support ASAN with MSVC

  • PR #5441 - Adding reference counting to thread_data

  • PR #5429 - Scheduler executor

  • PR #5428 - Adapt datapar copy

  • PR #5421 - Update CI base image to use clang-format 11

  • PR #5410 - Add ranges starts_with and ends_with algorithms

  • PR #5383 - Tentatively remove runtime_registration_wrapper from cuda futures

  • PR #5377 - Fewer Asio includes and more precompiled headers

  • PR #5329 - Sender overloads for parallel algorithms

  • PR #5313 - Rearrange modules between libraries

  • PR #5283 - Require minimum C++17 and change CUDA handling

  • PR #5241 - Adapt min_element, max_element and minmax_element to C++20