HPX V1.5.0 (Sep 02, 2020)#

General changes#

The main focus of this release is on APIs and C++20 conformance. We have added many new C++20 features and adapted multiple algorithms to be fully C++20 conformant. As part of the modularization we have begun specifying the public API of HPX in terms of headers and functionality, and aligning it more closely to the C++ standard. All non-distributed modules are now in place, along with an experimental option to completely disable distributed features in HPX. We have also added experimental asynchronous MPI and CUDA executors. Lastly this release introduces CMake targets for depending projects, performance improvements, and many bug fixes.

  • We have added the C++20 features hpx::jthread and hpx::stop_token. hpx::condition_variable_any now exposes new functions supporting hpx::stop_token.

  • We have added hpx::stable_sort based on Francisco Tapia’s implementation.

  • We have adapted existing synchronization primitives to be fully conformant C++20: hpx::barrier, hpx::latch, hpx::counting_semaphore, and hpx::binary_semaphore.

  • We have started using customization point objects (CPOs) to make the corresponding algorithms fully conformant to C++20 as well as to make algorithm extension easier for the user. all_of/any_of/none_of, copy, count, destroy, equal, fill, find, for_each, generate, mismatch, move, reduce, transform_reduce are using those CPOs (all in namespace hpx). We also have adapted their corresponding hpx::ranges versions to be conforming to C++20 in this release.

  • We have adapted support for co_await to C++20, in addition to hpx::future it now also supports hpx::shared_future. We have also added allocator support for futures returned by co_return. It is no longer in the experimental namespace.

  • We added serialization support for std::variant and std::tuple.

  • result_of and is_callable are now deprecated and replaced by invoke_result and is_invocable to conform to C++20.

  • We continued with the modularization, making it easier for us to add the new experimental HPX_WITH_DISTRIBUTED_RUNTIME CMake option (see below) . An significant amount of headers have been deprecated. We adapted the namespaces and headers we could to be closer to the standard ones (Public API). Depending code should still compile, however warnings are now generated instructing to change the include statements accordingly.

  • It is now possible to have a basic CUDA support including a helper function to get a future from a CUDA stream and target handling. They are available under the hpx::cuda::experimental namespace and they can be enabled with the -DHPX_WITH_ASYNC_CUDA=ON CMake option.

  • We added a new hpx::mpi::experimental namespace for getting futures from an asynchronous MPI call and a new minimal MPI executor hpx::mpi::experimental::executor. These can be enabled with the -DHPX_WITH_ASYNC_MPI=On CMake option.

  • A polymorphic executor has been implemented to reduce compile times as a function accepting executors can potentially be instantiated only once instead of multiple times with different executors. It accepts the function signature as a template argument. It needs to be constructed from any other executor. Please note, that the function signatures that can be scheduled using then_execute, bulk_sync_execute, bulk_async_execute and bulk_then_execute are slightly different (See the comment in PR #4514 for more details).

  • The underlying executor of block_executor has been updated to a newer one.

  • We have added a parameter to auto_chunk_size to control the amount of iterations to measure.

  • All executor parameter hooks can now be exposed through the executor itself. This will allow to deprecate the .with() functionality on execution policies in the future. This is also a first step towards simplifying our executor APIs in preparation for the upcoming C++23 executors (senders/receivers).

  • We have moved all of the existing APIs related to resiliency into the namespace hpx::resiliency::experimental. Please note this is a breaking change without backwards-compatibility option. We have converted all of those APIs to be based on customization point objects. Two new executors have been added to enable easy integration of the existing resiliency features with other facilities (like the parallel algorithms): replay_executor and replicate_executor.

  • We have added performance counters type information (aggregating, monotonically increasing, average count, average timer, etc.).

  • HPX threads are now re-scheduled on the same worker thread they were suspended on to avoid cache misses from moving from one thread to the other. This behavior doesn’t prevent the thread from being stolen, however.

  • We have added a new configuration option hpx.exception_verbosity to allow to control the level of verbosity of the exceptions (3 levels available).

  • broadcast_to, broadcast_from, scatter_to and scatter_from have been added to the collectives, modernization of gather_here and gather_there with futures taken by rvalue references. See the breaking change on all_to_all in the next section. None of the collectives need supporting macros anymore (e.g. specifying the data types used for a collective operation using HPX_REGISTER_ALLGATHER and similar is not needed anymore).

  • New API functions have been added: a) to get the number of cores which are idle (hpx::get_idle_core_count) and b) returning a bitmask representing the currently idle cores (hpx::get_idle_core_mask).

  • We have added an experimental option to only enable the local runtime, you can disable the distributed runtime with HPX_WITH_DISTRIBUTED_RUNTIME=OFF. You can also enable the local runtime by using the --hpx:local runtime option.

  • We fixed task annotations for actions.

  • The alias hpx::promise to hpx::lcos::promise is now deprecated. You can use hpx::lcos::promise directly instead. hpx::promise will refer to the local-only promise in the future.

  • We have added a prepare_checkpoint API function that calculates the amount of necessary buffer space for a particular set of arguments checkpointed.

  • We have added hpx::upgrade_lock and hpx::upgrade_to_unique_lock, which make hpx::shared_mutex (and similar) usable in more flexible ways.

  • We have changed the CMake targets exposed to the user, it now includes HPX::hpx, HPX::wrap_main (int main as the first HPX thread of the application, see Starting the HPX runtime), HPX::plugin, HPX::component. The CMake variables HPX_INCLUDE_DIRS and HPX_LIBRARIES are deprecated and will be removed in a future release, you should now link directly to the HPX::hpx CMake target.

  • A new example is demonstrating how to create and use a wrapping executor (quickstart/executor_with_thread_hooks.cpp)

  • A new example is demonstrating how to disable thread stealing during the execution of parallel algorithms (quickstart/disable_thread_stealing_executor.cpp)

  • We now require for our CMake build system configuration files to be formatted using cmake-format.

  • We have removed more dependencies on various Boost libraries.

  • We have added an experimental option enabling unity builds of HPX using the -DHPX_WITH_UNITY_BUILD=On CMake option.

  • Many bug fixes.

Breaking changes#

  • HPX now requires a C++14 capable compiler. We have set the HPX C++ standard automatically to C++14 and if it needs to be set explicitly, it should be specified through the CMAKE_CXX_STANDARD setting as mandated by CMake. The HPX_WITH_CXX* variables are now deprecated and will be removed in the future.

  • Building and using HPX is now supported only when using CMake V3.13 or later, Boost V1.64 or newer, and when compiling with clang V5, gcc V7, or VS2019, or later. Other compilers might still work but have not been tested thoroughly.

  • We have added a hpx::init_params struct to pass parameters for HPX initialization e.g. the resource partitioner callback to initialize thread pools (Using the resource partitioner).

  • The all_to_all algorithm is renamed to all_gather, and the new all_to_all algorithm is not compatible with the old one.

  • We have moved all of the existing APIs related to resiliency into the namespace hpx::resiliency::experimental.

Closed issues#

  • Issue #4918 - Rename distributed_executors module

  • Issue #4900 - Adding JOSS status badge to README

  • Issue #4897 - Compiler warning, deprecated header used by HPX itself

  • Issue #4886 - A future bound to an action executing on a different locality doesn’t capture exception state

  • Issue #4880 - Undefined reference to main build error when HPX_WITH_DYNAMIC_HPX_MAIN=OFF

  • Issue #4877 - hpx_main might not able to start hpx runtime properly

  • Issue #4850 - Issues creating templated component

  • Issue #4829 - Spack package & HPX_WITH_GENERIC_CONTEXT_COROUTINES

  • Issue #4820 - PAPI counters don’t work

  • Issue #4818 - HPX can’t be used with IO pool turned off

  • Issue #4816 - Build of HPX fails when find_package(Boost) is called before FetchContent_MakeAvailable(hpx)

  • Issue #4813 - HPX MPI Future failed

  • Issue #4811 - Remove HPX::hpx_no_wrap_main target before 1.5.0 release

  • Issue #4810 - In hpx::for_each::invoke_projected the hpx::util::decay is misguided

  • Issue #4787 - transform_inclusive_scan gives incorrect results for non-commutative operator

  • Issue #4786 - transform_inclusive_scan tries to implicitly convert between types, instead of using the provided conv function

  • Issue #4779 - HPX build error with GCC 10.1

  • Issue #4766 - Move HPX.Compute functionality to experimental namespace

  • Issue #4763 - License file name

  • Issue #4758 - CMake profiling results

  • Issue #4755 - Building HPX with support for PAPI fails

  • Issue #4754 - CMake cache creation breaks when using HPX with mimalloc

  • Issue #4752 - HPX MPI Future build failed

  • Issue #4746 - Memory leak when using dataflow icw components

  • Issue #4731 - Bug in stencil example, calculation of locality IDs

  • Issue #4723 - Build fail with NETWORKING OFF

  • Issue #4720 - Add compatibility headers for modules that had their module headers implicitly generated in 1.4.1

  • Issue #4719 - Undeprecate some module headers

  • Issue #4712 - Rename HPX_MPI_WITH_FUTURES option

  • Issue #4709 - Make deprecation warnings overridable in dependent projects

  • Issue #4691 - Suggestion to fix and enhance the thread_mapper API

  • Issue #4686 - Fix tutorials examples

  • Issue #4685 - HPX distributed map fails to compile

  • Issue #4680 - Build error with HPX_WITH_DYNAMIC_HPX_MAIN=OFF

  • Issue #4679 - Build error for hpx w/ Apex on Summit

  • Issue #4675 - build error with HPX_WITH_NETWORKING=OFF

  • Issue #4674 - Error running Quickstart tests on OS X

  • Issue #4662 - MPI initialization broken when networking off

  • Issue #4652 - How to fix distributed action annotation

  • Issue #4650 - thread descriptions are broken…again

  • Issue #4648 - Thread stacksize not properly set

  • Issue #4647 - Rename generated collective headers in modules

  • Issue #4639 - Update deprecation warnings in compatibility headers to point to collective headers

  • Issue #4628 - mpi parcelport totally broken

  • Issue #4619 - Fully document hpx_wrap behaviour and targets

  • Issue #4612 - Compilation issue with HPX 1.4.1 and 1.4.0

  • Issue #4594 - Rename modules

  • Issue #4578 - Default value for HPX_WITH_THREAD_BACKTRACE_DEPTH

  • Issue #4572 - Thread manager should be given a runtime_configuration

  • Issue #4571 - Add high-level documentation to new modules

  • Issue #4569 - Annoying warning when compiling - pls suppress or fix it.

  • Issue #4555 - HPX_HAVE_THREAD_BACKTRACE_ON_SUSPENSION compilation error

  • Issue #4543 - Segfaults in Release builds using sleep_for

  • Issue #4539 - Compilation Error when HPX_MPI_WITH_FUTURES=ON

  • Issue #4537 - Linking issue with libhpx_initd.a

  • Issue #4535 - API for checking if pool with a given name exists

  • Issue #4523 - Build of PR #4311 (git tag 9955e8e) fails

  • Issue #4519 - Documentation problem

  • Issue #4513 - HPXConfig.cmake contains ill-formed paths when library paths use backslashes

  • Issue #4507 - User-polling introduced by MPI futures module should be more generally usable

  • Issue #4506 - Make sure force_linking.hpp is not included in main module header

  • Issue #4501 - Fix compilation of PAPI tests

  • Issue #4497 - Add modules CI checks

  • Issue #4489 - Polymorphic executor

  • Issue #4476 - Use CMake targets defined by FindBoost

  • Issue #4473 - Add vcpkg installation instructions

  • Issue #4470 - Adapt hpx::future to C++20 co_await

  • Issue #4468 - Compile error on Raspberry Pi 4

  • Issue #4466 - Compile error on Windows, current stable:

  • Issue #4453 - Installing HPX on fedora with dnf is not adding cmake files

  • Issue #4448 - New std::variant serialization broken

  • Issue #4438 - Add performance counter flag is monotically increasing

  • Issue #4436 - Build problem: same code build and works with 1.4.0 but it doesn’t with 1.4.1

  • Issue #4429 - Function descriptions not supported in distributed

  • Issue #4423 - –hpx:ini=hpx.lock_detection=0 has no effect

  • Issue #4422 - Add performance counter metadata

  • Issue #4419 - Weird behavior for –hpx:print-counter-interval with large numbers

  • Issue #4401 - Create module repository

  • Issue #4400 - Command line options conflict related to performance counters

  • Issue #4349 - –hpx:use-process-mask option throw an exception on OS X

  • Issue #4345 - Move gh-pages branch out of hpx repo

  • Issue #4323 - Const-correctness error in assignment operator of compute::vector

  • Issue #4318 - ASIO breaks with C++2a concepts

  • Issue #4317 - Application runs even if –hpx:help is specified

  • Issue #4063 - Document hpxcxx compiler wrapper

  • Issue #3983 - Implement the C++20 Synchronization Library

  • Issue #3696 - C++11 constexpr support is now required

  • Issue #3623 - Modular HPX branch and an alternative project layout

  • Issue #2836 - The worst-case time complexity of parallel::sort seems to be O(N^2).

Closed pull requests#

  • PR #4936 - Minor documentation fixes part 2

  • PR #4935 - Add copyright and license to joss paper file

  • PR #4934 - Adding Semicolon in Documentation

  • PR #4932 - Fixing compiler warnings

  • PR #4931 - Small documentation formatting fixes

  • PR #4930 - Documentation Distributed HPX applications localvv with local_vv

  • PR #4929 - Add final version of the JOSS paper

  • PR #4928 - Add HPX_NODISCARD to enable_user_polling structs

  • PR #4926 - Rename distributed_executors module to executors_distributed

  • PR #4925 - Making transform_reduce conforming to C++20

  • PR #4923 - Don’t acquire lock if not needed

  • PR #4921 - Update the release notes for the release candidate 3

  • PR #4920 - Disable libcds release

  • PR #4919 - Make cuda event pool dynamic instead of fixed size

  • PR #4917 - Move chrono functionality to hpx::chrono namespace

  • PR #4916 - HPX_HAVE_DEPRECATION_WARNINGS needs to be set even when disabled

  • PR #4915 - Moving more action related files to actions modules

  • PR #4914 - Add alias targets with namespaces used for exporting

  • PR #4912 - Aggregate initialize CPOs

  • PR #4910 - Explicitly specify hwloc root on Jenkins CSCS builds

  • PR #4908 - Fix algorithms documentation

  • PR #4907 - Remove HPX::hpx_no_wrap_main target

  • PR #4906 - Fixing unused variable warning

  • PR #4905 - Adding specializations for simple for_loops

  • PR #4904 - Update boost to 1.74.0 for the newest jenkins configs

  • PR #4903 - Hide GITHUB_TOKEN environment variables from environment variable output

  • PR #4902 - Cancel previous pull requests builds before starting a new one with Jenkins

  • PR #4901 - Update public API list with updated algorithms

  • PR #4899 - Suggested changes for HPX V1.5 release notes

  • PR #4898 - Minor tweak to hpx::equal implementation

  • PR #4896 - Making generate() and generate_n conforming to C++20

  • PR #4895 - Update apex tag

  • PR #4894 - Fix exception handling for tasks

  • PR #4893 - Remove last use of std::result_of, removed in C++20

  • PR #4892 - Adding replay_executor and replicate_executor

  • PR #4889 - Restore old behaviour of not requiring linking to hpx_wrap when HPX_WITH_DYNAMIC_HPX_MAIN=OFF

  • PR #4887 - Making sure remotely thrown (non-hpx) exceptions are properly marshaled back to invocation site

  • PR #4885 - Adapting hpx::find and friends to C++20

  • PR #4884 - Adapting mismatch to C++20

  • PR #4883 - Adapting hpx::equal to be conforming to C++20

  • PR #4882 - Fixing exception handling for hpx::copy and adding missing tests

  • PR #4881 - Adds different runtime exception when registering thread with the HPX runtime

  • PR #4876 - Adding example demonstrating how to disable thread stealing during the execution of parallel algorithms

  • PR #4874 - Adding non-policy tests to all_of, any_of, and none_of

  • PR #4873 - Set CUDA compute capability on rostam Jenkins builds

  • PR #4872 - Force partitioned vector scan tests to run serially

  • PR #4870 - Making move conforming with C++20

  • PR #4869 - Making destroy and destroy_n conforming to C++20

  • PR #4868 - Fix miscellaneous header problems

  • PR #4867 - Add CPOs for for_each

  • PR #4865 - Adapting count and count_if to be conforming to C++20

  • PR #4864 - Release notes 1.5.0

  • PR #4863 - adding libcds-hpx tag to prepare for hpx1.5 release

  • PR #4862 - Adding version specific deprecation options

  • PR #4861 - Limiting executor improvements

  • PR #4860 - Making fill and fill_n compatible with C++20

  • PR #4859 - Adapting all_of, any_of, and none_of to C++20

  • PR #4857 - Improve libCDS integration

  • PR #4856 - Correct typos in the documentation of the hpx performance counters

  • PR #4854 - Removing obsolete code

  • PR #4853 - Adding test that derives component from two other components

  • PR #4852 - Fix mpi_ring test in distributed mode by ensuring all ranks run hpx_main

  • PR #4851 - Converting resiliency APIs to tag_invoke based CPOs

  • PR #4849 - Enable use of future_overhead test when DISTRIBUTED_RUNTIME is OFF

  • PR #4847 - Fixing ‘error prone’ constructs as reported by Codacy

  • PR #4846 - Disable Boost.Asio concepts support

  • PR #4845 - Fix PAPI counters

  • PR #4843 - Remove dependency on various Boost headers

  • PR #4841 - Rearrange public API headers

  • PR #4840 - Fixing TSS problems during thread termination

  • PR #4839 - Fix async_cuda build problems when distributed runtime is disabled

  • PR #4837 - Restore compatibility for old (now deprecated) copy algorithms

  • PR #4836 - Adding CPOs for hpx::reduce

  • PR #4835 - Remove using util::result_of from namespace hpx

  • PR #4834 - Fixing the calculation of the number of idle cores and the corresponding idle masks

  • PR #4833 - Allow thread function destructors to yield

  • PR #4832 - Fixing assertion in split_gids and memory leaks in 1d_stencil_7

  • PR #4831 - Making sure MPI_CXX_COMPILE_FLAGS is interpreted as a sequence of options

  • PR #4830 - Update documentation on using HPX::wrap_main

  • PR #4827 - Update clang-newest configuration to use clang 10

  • PR #4826 - Add Jenkins configuration for rostam

  • PR #4825 - Move all CUDA functionality to hpx::cuda::experimental namespace

  • PR #4824 - Add support for building master/release branches to Jenkins configuration

  • PR #4821 - Implement customization point for hpx::copy and hpx::ranges::copy

  • PR #4819 - Allow finding Boost components before finding HPX

  • PR #4817 - Adding range version of stable sort

  • PR #4815 - Fix a wrong #ifdef for IO/TIMER pools causing build errors

  • PR #4814 - Replace hpx::function_nonser with std::function in error module

  • PR #4809 - Foreach adapt

  • PR #4808 - Make internal algorithms functions const

  • PR #4807 - Add Jenkins configuration for running on Piz Daint

  • PR #4806 - Update documentation links to new domain name

  • PR #4805 - Applying changes that resolve time complexity issues in sort

  • PR #4803 - Adding implementation of stable_sort

  • PR #4802 - Fix datapar header paths

  • PR #4801 - Replace boost::shared_array<T> with std::shared_ptr<T[]> if supported

  • PR #4799 - Fixing #include paths in compatibility headers

  • PR #4798 - Include the main module header (fixes partially #4488)

  • PR #4797 - Change cmake targets

  • PR #4794 - Removing 128bit integer emulation

  • PR #4793 - Make sure global variable is handled properly

  • PR #4792 - Replace enable_if with HPX_CONCEPT_REQUIRES_ and add is_sentinel_for constraint

  • PR #4790 - Move deprecation warnings from base template to template specializations for result_of etc. structs

  • PR #4789 - Fix hangs during assertion handling and distributed runtime construction

  • PR #4788 - Fixing inclusive transform scan algorithm to properly handle initial value

  • PR #4785 - Fixing barrier test

  • PR #4784 - Fixing deleter argument bindings in serialize_buffer

  • PR #4783 - Add coveralls badge

  • PR #4782 - Make header tests parallel again

  • PR #4780 - Remove outdated comment about hpx::stop in documentation

  • PR #4776 - debug print improvements

  • PR #4775 - Checkpoint cleanup

  • PR #4771 - Fix compilation with HPX_WITH_NETWORKING=OFF

  • PR #4767 - Remove all force linking leftovers

  • PR #4765 - Fix 1d stencil index calculation

  • PR #4764 - Force some tests to run serially

  • PR #4762 - Update pointees in compatibility headers

  • PR #4761 - Fix running and building of execution module tests on CircleCI

  • PR #4760 - Storing hpx_options in global property to speed up summary report

  • PR #4759 - Reduce memory requirements for our main shared state

  • PR #4757 - Fix mimalloc linking on Windows

  • PR #4756 - Fix compilation issues

  • PR #4753 - Re-adding API functions that were lost during merges

  • PR #4751 - Revert “Create coverage reports and upload them to codecov.io”

  • PR #4750 - Fixing possible race condition during termination detection

  • PR #4749 - Deprecate result_of and friends

  • PR #4748 - Create coverage reports and upload them to codecov.io

  • PR #4747 - Changing #include for MPI parcelport

  • PR #4745 - Add is_sentinel_for trait implementation and test

  • PR #4743 - Fix init_globally example after runtime mode changes

  • PR #4742 - Update SUPPORT.md

  • PR #4741 - Fixing a warning generated for unity builds with msvc

  • PR #4740 - Rename local_lcos and basic_execution modules

  • PR #4739 - Undeprecate a couple of hpx/modulename.hpp headers

  • PR #4738 - Conditionally test schedulers in thread_stacksize_current test

  • PR #4734 - Fixing a bunch of codacy warnings

  • PR #4733 - Add experimental unity build option to CMake configuration

  • PR #4730 - Fixing compilation problems with unordered map

  • PR #4729 - Fix APEX build

  • PR #4727 - Fix missing runtime includes for distributed runtime

  • PR #4726 - Add more API headers

  • PR #4725 - Add more compatibility headers for deprecated module headers

  • PR #4724 - Fix 4723

  • PR #4721 - Attempt to fixing migration tests

  • PR #4717 - Make the compatilibility headers macro conditional

  • PR #4716 - Add hpx/runtime.hpp and hpx/distributed/runtime.hpp API headers

  • PR #4714 - Add hpx/future.hpp header

  • PR #4713 - Remove hpx/runtime/threads_fwd.hpp and hpx/util_fwd.hpp

  • PR #4711 - Make module deprecation warnings overridable

  • PR #4710 - Add compatibility headers and other fixes after module header renaming

  • PR #4708 - Add termination handler for parallel algorithms

  • PR #4707 - Use hpx::function_nonser instead of std::function internally

  • PR #4706 - Move header file to module

  • PR #4705 - Fix incorrect behaviour of cmake-format check

  • PR #4704 - Fix resource tests

  • PR #4701 - Fix missing includes for future::then specializations

  • PR #4700 - Removing obsolete memory component

  • PR #4699 - Add short descriptions to modules missing documentation

  • PR #4696 - Rename generated modules headers

  • PR #4693 - Overhauling thread_mapper for public consumption

  • PR #4688 - Fix thread stack size handling

  • PR #4687 - Adding all_gather and fixing all_to_all

  • PR #4684 - Miscellaneous compilation fixes

  • PR #4683 - Fix HPX_WITH_DYNAMIC_HPX_MAIN=OFF

  • PR #4682 - Fix compilation of pack_traversal_rebind_container.hpp

  • PR #4681 - Add missing hpx/execution.hpp includes for future::then

  • PR #4678 - Typeless communicator

  • PR #4677 - Forcing registry option to be accepted without checks.

  • PR #4676 - Adding scatter_to/scatter_from collective operations

  • PR #4673 - Fix PAPI counters compilation

  • PR #4671 - Deprecate hpx::promise alias to hpx::lcos::promise

  • PR #4670 - Explicitly instantiate get_exception

  • PR #4667 - Add stopValue in Sentinel struct instead of Iterator

  • PR #4666 - Add release build on Windows to GitHub actions

  • PR #4664 - Creating itt_notify module.

  • PR #4663 - Mpi fixes

  • PR #4659 - Making sure declarations match definitions in register_locks implementation

  • PR #4655 - Fixing task annotations for actions

  • PR #4653 - Making sure APEX is linked into every application, if needed

  • PR #4651 - Update get_function_annotation.hpp

  • PR #4646 - Runtime type

  • PR #4645 - Add a few more API headers

  • PR #4644 - Fixing support for mpirun (and similar)

  • PR #4643 - Fixing the fix for get_idle_core_count() API

  • PR #4638 - Remove HPX_API_EXPORT missed in previous cleanup

  • PR #4636 - Adding C++20 barrier

  • PR #4635 - Adding C++20 latch API

  • PR #4634 - Adding C++20 counting semaphore API

  • PR #4633 - Unify execution parameters customization points

  • PR #4632 - Adding missing bulk_sync_execute wrapper to example executor

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

  • PR #4630 - Updates to documentation; moved hyperlink

  • PR #4624 - Export set_self_ptr in thread_data.hpp instead of with forward declarations where used

  • PR #4623 - Clean up export macros

  • PR #4621 - Trigger an error for older boost versions on power architectures

  • PR #4617 - Ignore user-set compatibility header options if the module does not have compatibility headers

  • PR #4616 - Fix cmake-format warning

  • PR #4615 - Add handler for serializing custom exceptions

  • PR #4614 - Fix error message when HPX_IGNORE_CMAKE_BUILD_TYPE_COMPATIBILITY=OFF

  • PR #4613 - Make partitioner constructor private

  • PR #4611 - Making auto_chunk_size execute the given function using the given executor

  • PR #4610 - Making sure the thread-local lock registration data is moving to the core the suspended HPX thread is resumed on

  • PR #4609 - Adding an API function that exposes the number of idle cores

  • PR #4608 - Fixing moodycamel namespace

  • PR #4607 - Moving winsocket initialization to core library

  • PR #4606 - Local runtime module etc.

  • PR #4604 - Add config_registry module

  • PR #4603 - Deal with distributed modules in their respective CMakeLists.txt

  • PR #4602 - Small module fixes

  • PR #4598 - Making sure current_executor and service_executor functions are linked into the core library

  • PR #4597 - Adding broadcast_to/broadcast_from to collectives module

  • PR #4596 - Fix performance regression in block_executor

  • PR #4595 - Making sure main.cpp is built as a library if HPX_WITH_DYNAMIC_MAIN=OFF

  • PR #4592 - Futures module

  • PR #4591 - Adapting co_await support for C++20

  • PR #4590 - Adding missing exception test for for_loop()

  • PR #4587 - Move traits headers to hpx/modulename/traits directory

  • PR #4586 - Remove Travis CI config

  • PR #4585 - Update macOS test blacklist

  • PR #4584 - Attempting to fix missing symbols in stack trace

  • PR #4583 - Fixing bad static_cast

  • PR #4582 - Changing download url for Windows prerequisites to circumvent bandwidth limitations

  • PR #4581 - Adding missing using placeholder::_X

  • PR #4579 - Move get_stack_size_name and related functions

  • PR #4575 - Excluding unconditional definition of class backtrace from global header

  • PR #4574 - Changing return type of hardware_concurrency() to unsigned int

  • PR #4570 - Move tests to modules

  • PR #4564 - Reshuffle internal targets and add HPX::hpx_no_wrap_main target

  • PR #4563 - fix CMake option typo

  • PR #4562 - Unregister lock earlier to avoid holding it while suspending

  • PR #4561 - Adding test macros supporting custom output stream

  • PR #4560 - Making sure hash_any::operator()() is linked into core library

  • PR #4559 - Fixing compilation if HPX_WITH_THREAD_BACKTRACE_ON_SUSPENSION=On

  • PR #4557 - Improve spinlock implementation to perform better in high-contention situations

  • PR #4553 - Fix a runtime_ptr problem at shutdown when apex is enabled

  • PR #4552 - Add configuration option for making exceptions less noisy

  • PR #4551 - Clean up thread creation parameters

  • PR #4549 - Test FetchContent build on GitHub actions

  • PR #4548 - Fix stack size

  • PR #4545 - Fix header tests

  • PR #4544 - Fix a typo in sanitizer build

  • PR #4541 - Add API to check if a thread pool exists

  • PR #4540 - Making sure MPI support is enabled if MPI futures are used but networking is disabled

  • PR #4538 - Move channel documentation examples to examples directory

  • PR #4536 - Add generic allocator for execution policies

  • PR #4534 - Enable compatibility headers for thread_executors module

  • PR #4532 - Fixing broken url in README.rst

  • PR #4531 - Update scripts

  • PR #4530 - Make sure module API docs show up in correct order

  • PR #4529 - Adding missing template code to module creation script

  • PR #4528 - Make sure version module uses HPX’s binary dir, not the parent’s

  • PR #4527 - Creating actions_base and actions module

  • PR #4526 - Shared state for cv

  • PR #4525 - Changing sub-name sequencing for experimental namespace

  • PR #4524 - Add API guarantee notes to API reference documentation

  • PR #4522 - Enable and fix deprecation warnings in execution module

  • PR #4521 - Moves more miscellaneous files to modules

  • PR #4520 - Skip execution customization points when executor is known

  • PR #4518 - Module distributed lcos

  • PR #4516 - Fix various builds

  • PR #4515 - Replace backslashes by slashes in windows paths

  • PR #4514 - Adding polymorphic_executor

  • PR #4512 - Adding C++20 jthread and stop_token

  • PR #4510 - Attempt to fix APEX linking in external packages again

  • PR #4508 - Only test pull requests (not all branches) with GitHub actions

  • PR #4505 - Fix duplicate linking in tests (ODR violations)

  • PR #4504 - Fix C++ standard handling

  • PR #4503 - Add CMakelists file check

  • PR #4500 - Fix .clang-format version requirement comment

  • PR #4499 - Attempting to fix hpx_init linking on macOS

  • PR #4498 - Fix compatibility of pool_executor

  • PR #4496 - Removing superfluous SPDX tags

  • PR #4494 - Module executors

  • PR #4493 - Pack traversal module

  • PR #4492 - Update copyright year in documentation

  • PR #4491 - Add missing current_executor header

  • PR #4490 - Update GitHub actions configs

  • PR #4487 - Properly dispatch exceptions thrown from hpx_main to be rethrown from hpx::init/hpx::stop

  • PR #4486 - Fixing an initialization order problem

  • PR #4485 - Move miscellaneous files to their rightful modules

  • PR #4483 - Clean up imported CMake target naming

  • PR #4481 - Add vcpkg installation instructions

  • PR #4479 - Add hints to allow to specify MIMALLOC_ROOT

  • PR #4478 - Async modules

  • PR #4475 - Fix rp init changes

  • PR #4474 - Use #pragma once in headers

  • PR #4472 - Add more descriptive error message when using x86 coroutines on non-x86 platforms

  • PR #4467 - Add mimalloc find cmake script

  • PR #4465 - Add thread_executors module

  • PR #4464 - Include module

  • PR #4462 - Merge hpx_init and hpx_wrap into one static library

  • PR #4461 - Making thread_data test more realistic

  • PR #4460 - Suppress MPI warnings in version.cpp

  • PR #4459 - Make sure pkgconfig applications link with hpx_init

  • PR #4458 - Added example demonstrating how to create and use a wrapping executor

  • PR #4457 - Fixing execution of thread exit functions

  • PR #4456 - Move backtrace files to debugging module

  • PR #4455 - Move deadlock_detection and maintain_queue_wait_times source files into schedulers module

  • PR #4450 - Fixing compilation with std::filesystem enabled

  • PR #4449 - Fixing build system to actually build variant test

  • PR #4447 - This fixes an obsolete #include

  • PR #4446 - Resume tasks where they were suspended

  • PR #4444 - Minor CUDA fixes

  • PR #4443 - Add missing tests to CircleCI config

  • PR #4442 - Adding a tag to all auto-generated files allowing for tools to visually distinguish those

  • PR #4441 - Adding performance counter type information

  • PR #4440 - Fixing MSVC build

  • PR #4439 - Link HPX::plugin and component privately in hpx_setup_target

  • PR #4437 - Adding a test that verifies the problem can be solved using a trait specialization

  • PR #4434 - Clean up Boost dependencies and copy string algorithms to new module

  • PR #4433 - Fixing compilation issues (!) if MPI parcelport is enabled

  • PR #4431 - Ignore warnings about name mangling changing

  • PR #4430 - Add performance_counters module

  • PR #4428 - Don’t add compatibility headers to module API reference

  • PR #4426 - Add currently failing tests on GitHub actions to blacklist

  • PR #4425 - Clean up and correct minimum required versions

  • PR #4424 - Making sure hpx.lock_detection=0 works as advertized

  • PR #4421 - Making sure interval time stops underlying timer thread on termination

  • PR #4417 - Adding serialization support for std::variant (if available) and std::tuple

  • PR #4415 - Partially reverting changes applied by PR 4373

  • PR #4414 - Added documentation for the compiler-wrapper script hpxcxx.in in creating_hpx_projects.rst

  • PR #4413 - Merging from V1.4.1 release

  • PR #4412 - Making sure to issue a warning if a file specified using –hpx:options-file is not found

  • PR #4411 - Make test specific to HPX_WITH_SHARED_PRIORITY_SCHEDULER

  • PR #4407 - Adding minimal MPI executor

  • PR #4405 - Fix cross pool injection test, use default scheduler as falback

  • PR #4404 - Fix a race condition and clean-up usage of scheduler mode

  • PR #4399 - Add more threading modules

  • PR #4398 - Add CODEOWNERS file

  • PR #4395 - Adding a parameter to auto_chunk_size allowing to control the amount of iterations to measure

  • PR #4393 - Use appropriate cache-line size defaults for different platforms

  • PR #4391 - Fixing use of allocator for C++20

  • PR #4390 - Making –hpx:help behavior consistent

  • PR #4388 - Change the resource partitioner initialization

  • PR #4387 - Fix roll_release.sh

  • PR #4386 - Add warning messages for using thread binding options on macOS

  • PR #4385 - Cuda futures

  • PR #4384 - Make enabling dynamic hpx_main on non-Linux systems a configuration error

  • PR #4383 - Use configure_file for HPXCacheVariables.cmake

  • PR #4382 - Update spellchecking whitelist and fix more typos

  • PR #4380 - Add a helper function to get a future from a cuda stream

  • PR #4379 - Add Windows and macOS CI with GitHub actions

  • PR #4378 - Change C++ standard handling

  • PR #4377 - Remove Python scripts

  • PR #4374 - Adding overload for hpx::init/hpx::start for use with resource partitioner

  • PR #4373 - Adding test that verifies for 4369 to be fixed

  • PR #4372 - Another attempt at fixing the integral mismatch and conversion warnings

  • PR #4370 - Doc updates quick start

  • PR #4368 - Add a whitelist of words for weird spelling suggestions

  • PR #4366 - Suppress or fix clang-tidy-9 warnings

  • PR #4365 - Removing more Boost dependencies

  • PR #4363 - Update clang-format config file for version 9

  • PR #4362 - Fix indices typo

  • PR #4361 - Boost cleanup

  • PR #4360 - Move plugins

  • PR #4358 - Doc updates; generating documentation. Will likely need heavy editing.

  • PR #4356 - Remove some minor unused and unnecessary Boost includes

  • PR #4355 - Fix spellcheck step in CircleCI config

  • PR #4354 - Lightweight utility to hold a pack as members

  • PR #4352 - Minor fixes to the C++ standard detection for MSVC

  • PR #4351 - Move generated documentation to hpx-docs repo

  • PR #4347 - Add cmake policy - CMP0074

  • PR #4346 - Remove file committed by mistake

  • PR #4342 - Remove HCC and SYCL options from CMakeLists.txt

  • PR #4341 - Fix launch process test with APEX enabled

  • PR #4340 - Testing Cirrus CI

  • PR #4339 - Post 1.4.0 updates

  • PR #4338 - Spelling corrections and CircleCI spell check

  • PR #4333 - Flatten bound callables

  • PR #4332 - This is a collection of mostly minor (cleanup) fixes

  • PR #4331 - This adds the missing tests for async_colocated and async_continue_colocated

  • PR #4330 - Remove HPX.Compute host default_executor

  • PR #4328 - Generate global header for basic_execution module

  • PR #4327 - Use INTERNAL_FLAGS option for all examples and components

  • PR #4326 - Usage of temporary allocator in assignment operator of compute::vector

  • PR #4325 - Use hpx::threads::get_cache_line_size in prefetching.hpp

  • PR #4324 - Enable compatibility headers option for execution module

  • PR #4316 - Add clang format indentppdirectives

  • PR #4313 - Introduce index_pack alias to pack of size_t

  • PR #4312 - Fixing compatibility header for pack.hpp

  • PR #4311 - Dataflow annotations for APEX

  • PR #4309 - Update launching_and_configuring_hpx_applications.rst

  • PR #4306 - Fix schedule hint not being taken from executor

  • PR #4305 - Implementing hpx::functional::tag_invoke

  • PR #4304 - Improve pack support utilities

  • PR #4303 - Remove errors module dependency on datastructures

  • PR #4301 - Clean up thread executors

  • PR #4294 - Logging revamp

  • PR #4292 - Remove SPDX tag from Boost License file to allow for github to recognize it

  • PR #4291 - Add format support for std::tm

  • PR #4290 - Simplify compatible tuples check

  • PR #4288 - A lightweight take on boost::lexical_cast

  • PR #4287 - Forking boost::lexical_cast as a new module

  • PR #4277 - MPI_futures

  • PR #4270 - Refactor future implementation

  • PR #4265 - Threading module

  • PR #4259 - Module naming base

  • PR #4251 - Local workrequesting scheduler

  • PR #4250 - Inline execution of scoped tasks, if possible

  • PR #4247 - Add execution in module headers

  • PR #4246 - Expose CMake targets officially

  • PR #4239 - Doc updates miscellaneous (partially completed during Google Season of Docs)

  • PR #4233 - Remove project() from modules + fix CMAKE_SOURCE_DIR issue

  • PR #4231 - Module local lcos

  • PR #4207 - Command line handling module

  • PR #4206 - Runtime configuration module

  • PR #4141 - Doc updates examples local to remote (partially completed during Google Season of Docs)

  • PR #4091 - Split runtime into local and distributed parts

  • PR #4017 - Require C++14