HPX V1.11.0 (Jun 30, 2025)#

This release is the last version of HPX that supports C++17. Future versions of HPX will require compilation using C++20 or above.

General changes#

  • Added synchronous versions of all collective operations. Added global predefined communicator objects that are accessible through new APIs: hpx::collectives::get_world_communicator() refers to all localities and hpx::collectives::get_local_communicator() refers to all threads on the calling locality. We unified the interfaces of the different communicator objects.

  • Added hpx::experimental::run_on_all allowing to run a given function (possibly concurrently) using a given execution policy.

  • Added a helper object hpx::runtime_manager that simplifies the initialization of HPX without needing to modify the main function of the application.

  • We improved the compatibility with various accelerator frameworks (SYCL, OneAPI).

  • Applied build system changes that allow building HPX without any prerequisites. This requires to pass -DHPX_WITH_FETCH_HWLOC=On and -DHPX_WITH_FETCH_BOOST=On to the CMake configuration.

  • We have performed a lot of code cleanup and refactoring to improve the overall code quality and decrease compile times.

  • Added the hpx::contains and hpx::contains_subrange parallel algorithms.

  • Adapted many of HPX’ parallel algorithms to be usable with senders/receivers.

Breaking changes#

  • We have moved most of the APIs that were defined in the namespace hpx::parallel::execution to the namespace hpx::execution::experimental. It was not possible to add compatibility facilities that will allow to continue using the old APIs, applications will have to be changed in order to continue functioning correctly.

  • The CMake configuration parameter HPX_WITH_RUN_MAIN_EVERYWHERE is now deprecated and will be removed in the future. Use the preprocessor macro HPX_HAVE_RUN_MAIN_EVERYWHERE on a target-by-target case instead.

  • Removed the dysfunctional libfabric parcelport.

  • Removed features that were long deprecated (starting V1.8): - hpx::flush, hpx::endl, hpx::async_flush, hpx::async_endl - Various enumerator types are now only available as class enum requiring explicit scoped use of the enumerator values - Various non-conforming overloads of parallel algorithms - hpx::for_loop and friends (now only available as

    hpx::experimental::for_loop)

    • hpx::parallel::induction is now only available as hpx::experimental::induction

    • hpx::parallel::reduction and friends are now only available as hpx::experimental::reduction

    • hpx::assertion::source_location is now only available as hpx::source_location

    • hpx::lcos::split_future is now only available as hpx::split_future

    • hpx::lcos::wait and friends have been removed altogether

    • hpx::lcos::wait_any and friends are now only available as hpx::wait_any

    • hpx::lcos::wait_some and friends are now only available as hpx::wait_some

    • hpx::lcos::wait_each and friends are now only available as hpx::wait_each

    • hpx::lcos::wait_all and friends are now only available as hpx::wait_all

    • hpx::lcos::when_all and friends are now only available as hpx::when_all

    • hpx::lcos::when_any and friends are now only available as hpx::when_any

    • hpx::lcos::when_each and friends are now only available as hpx::when_each

    • hpx::lcos::when_some and friends are now only available as hpx::when_some

    • hpx::util::optional and related facilities are now only available as hpx::optional

    • hpx::util::bind and related facilities are now only available as hpx::bind

    • hpx::util::function and friends are now only available as hpx::function

    • hpx::traits::is_bound_action and related facilities are now only available as hpx::is_bound_action

    • hpx::traits::is_bind_expression and related facilities are now only available as hpx::is_bind_expression

    • hpx::traits::is_placeholder and related facilities are now only available as hpx::is_placeholder

    • hpx::lcos::future and related facilities are now only available as hpx::future

    • hpx::memory::intrusive_ptr is now only available as hpx::intrusive_ptr

    • hpx::lcos::local::barrier is now only available as hpx::barrier

    • hpx::lcos::barrier is now only available as hpx::distributed::barrier

    • hpx::lcos::local::cpp20_binary_semaphore is now only available as hpx::detail::binary_semaphore

    • hpx::lcos::local::condition_variable and friends are now only available as hpx::condition_variable

    • hpx::lcos::local::counting_semaphore and friends are now only available as hpx::counting_semaphore

    • hpx::lcos::local::cpp20_latch and is now only available as hpx::latch

    • hpx::lcos::latch and is now only available as hpx::distributed::latch

    • hpx::lcos::local::upgrade_lock and friends are now only available as hpx::upgrade_lock

    • hpx::lcos::local::mutex and friends are now only available as hpx::mutex

    • hpx::lcos::local::spinlock and friends are now only available as hpx::spinlock

    • hpx::lcos::local::call_once and friends are now only available as hpx::call_once

    • hpx::util::annotated_function and is now only available as hpx::annotated_function

    • hpx::components::abstract_simple_component_base and is now only available as hpx::components::abstract_component_base

    • hpx::naming::id_type and is now only available as hpx::id_type

Closed issues#

  • Issue #6699 - Catch lower-level runtime error

  • Issue #6696 - HPX master breaks with Kokkos

  • Issue #6691 - minimum_category doesn’t work with custom iterator categories

  • Issue #6681 - build break - missing ‘;’

  • Issue #6658 - CMake error upon building HPX manually

  • Issue #6648 - Asio V1.34 deprecates io_context::work

  • Issue #6640 - iterator_facade doesn’t work with custom iterator categories

  • Issue #6636 - problem with hpx::collectives::exclusive_scan

  • Issue #6623 - HPX serialization error with std::vector<std::vector<std::vector<float>>>

  • Issue #6616 - Add flux support to HPX to run on El Cap

  • Issue #6615 - Too many fails test after installed hpx

  • Issue #6605 - Partitionend vector copy constructor is broken

  • Issue #6586 - Bullet points in quick start/installing HPX section in documentation incorrectly rendered

  • Issue #6563 - Compilation issues on Grace Hopper

  • Issue #6544 - Errors in Public Distributed Api for all_to_all and gather_there

  • Issue #6519 - Option –hpx:queuing=local-priority-lifo is not configured

  • Issue #6501 - HPX 1.10 Failed Linking CXX executable for arm64-osx

  • Issue #5728 - Add optional fetch_content support for needed Boost libraries

Closed pull requests#

  • PR #6716 - Fixing some of the reported linker warnings

  • PR #6705 - Adding gcc/15 to jenkins

  • PR #6701 - Attempting to fix shutdown hang on exception_info

  • PR #6698 - Making sure .hpp.in files are not being installed

  • PR #6697 - Minor docs fix

  • PR #6695 - Adding missing ‘;’

  • PR #6693 - Adding llvm/19 and 20 and cmake/4 Jenkins

  • PR #6692 - Better implementation of minimal_category

  • PR #6690 - Fixing bad #include in example

  • PR #6689 - Fix unreachable code warning in wait_all

  • PR #6687 - lci pp: change default ndevices=2 and progress_type=worker; improve document

  • PR #6686 - lci pp: upgrade LCI autofetch target to 1.7.9

  • PR #6685 - Improve run_on_all implementation and tests

  • PR #6683 - Fix bad element comparison for reduce_by_key

  • PR #6682 - Add C++23 std::generator equivalence test and fix missing semicolon

  • PR #6680 - Add oneapi device init workaround

  • PR #6679 - Fix sycl deprecations

  • PR #6678 - Fix oneapi overloads

  • PR #6677 - Offer a runtime manager object

  • PR #6676 - Mention the HPX book

  • PR #6675 - Bump required version of JSON library

  • PR #6674 - Issue 6631

  • PR #6673 - Fix: FindTBB.cmake cannot find correct TBB library. #6504

  • PR #6672 - Update modules.rst

  • PR #6670 - Add base template template param to execution_policy

  • PR #6669 - Add execution policy support to run_on_all

  • PR #6667 - Making sure bound threads are rescheduled on their original core

  • PR #6666 - Improve documentation for reduction operations

  • PR #6664 - Fix CMake template when fetching Boost

  • PR #6663 - More run_on_all overloads

  • PR #6662 - Fix “unary minus operator applied to unsigned type” warning

  • PR #6661 - Adding simple experimental::run_on_all

  • PR #6659 - fix(reduce): Initialize accumulator with init instead of first element

  • PR #6656 - Add missing channel_communicator::get_info

  • PR #6652 - Adding channel-based ping-pong example

  • PR #6650 - Adding constructor overloads to partitioned_vector

  • PR #6649 - Remove the use of deprecated asio::io_context::work

  • PR #6645 - Fixing collectives::exclusive_scan

  • PR #6644 - Update result_type in set_union.hpp

  • PR #6643 - Update result_type in set_union.hpp

  • PR #6642 - Allowing to use custom iterator tags with iterator_facade

  • PR #6641 - Allowing for zip-iterator to refer to sequences of different length

  • PR #6639 - docs: Fix spelling in example dictionary

  • PR #6638 - Update set_union.hpp

  • PR #6637 - lci/mpi pp: fix the case when non-zero-copy data is larger than INT_MAX

  • PR #6635 - Adding simplified reduction overload

  • PR #6634 - Fixed issue 6634: Unqualified calls to insertion_sort

  • PR #6633 - Increase timeouts for CircleCI tests

  • PR #6630 - Fix CPUId test

  • PR #6628 - Link aclocal with aclocal-1.16 as hwloc asks for it

  • PR #6626 - Fixing MPI parcel port issue exposed by #6623

  • PR #6622 - Newbranch:HPX-Based Task Scheduler with CUDA-Quantum Integration & Benchmarking

  • PR #6621 - HPX-Based Task Scheduler with CUDA-Quantum Integration & Benchmarking

  • PR #6620 - new test: very big tchunk

  • PR #6619 - mpi pp: fix transmission chunk send

  • PR #6617 - Adding support for the Flux job scheduling environment

  • PR #6614 - Fix fallback to module mode for CMake finding Boost

  • PR #6613 - Fix partitioned_vector_handle_values test

  • PR #6612 - Fixing naming convention for pp constant

  • PR #6611 - Fix Hwloc fetch content

  • PR #6610 - Add docs for synchronous collective operations

  • PR #6609 - Update perftest CI reference measurements

  • PR #6608 - Partially support data parallel for_loop

  • PR #6607 - Cleaning up copy_component facility

  • PR #6606 - Making sure copy_component creates a new gid

  • PR #6600 - Fixing sync collectives

  • PR #6599 - Make HPX_HAVE_RUN_MAIN_EVERYWHERE application specific

  • PR #6598 - Adding synchronous collective operations

  • PR #6596 - Minor fixes and optimizations

  • PR #6595 - Rfa parallel

  • PR #6594 - Move get_stack_ptr to source

  • PR #6593 - Fix outdated documentation and missing flags

  • PR #6592 - HPX_HAVE_THREADS_GET_STACK_POINTER to match builtin_frame_address feature test

  • PR #6591 - Feature test for __builtin_frame_address

  • PR #6590 - Add device guard for noexcept

  • PR #6587 - Fix bullet points in Quickstart

  • PR #6585 - Fixed escape characters format to handle warning due to misinterpretation of syntax

  • PR #6583 - Execute feature test for at_quick_exit

  • PR #6582 - Accommodate for CircleCI reduce available number of cores to two

  • PR #6581 - Attempting to work around a Boost.Spirit problem

  • PR #6580 - mpi pp: fix messages larger than INT_MAX

  • PR #6578 - Remove leftovers from libfabric parcelport

  • PR #6577 - Download Boost from their own archives, not from Sourceforge

  • PR #6576 - Fix CMake warning issued since CMake V3.30

  • PR #6575 - Replace previously downloaded CDash conv.xsl with local version

  • PR #6570 - Update exception_list.hpp

  • PR #6569 - Update exception_list.hpp

  • PR #6567 - Fix vectorization error on copy algorithm

  • PR #6566 - lci pp: fix messages larger than INT_MAX

  • PR #6565 - Moving most of APIs from hpx::parallel::execution to hpx::execution::experimental

  • PR #6564 - Remove superfluous HPX_MOVE()

  • PR #6562 - Fix doc return type of broadcast_to

  • PR #6560 - Fixes for bit_cast on 32bit systems

  • PR #6559 - Making sure that all parcelport counters are unavailable if no networking is needed or configured

  • PR #6558 - Remove CSCS CI’s

  • PR #6556 - Set copyright year in generated files

  • PR #6553 - Fix omp vectorization pragma errors

  • PR #6551 - Update building_hpx.rst

  • PR #6550 - Partitioned vector updates

  • PR #6549 - Fix CMake conditionals checking ENV variables

  • PR #6548 - Update CONTRIBUTING.md

  • PR #6546 - Fix incorrect signature of distributed API functions

  • PR #6543 - Throwing an exception derived from std::bad_alloc on OOM conditions

  • PR #6539 - Use thread-safe cache in thread_local_caching_allocator

  • PR #6537 - Update README.rst

  • PR #6531 - More fixes for the Boost package

  • PR #6527 - Improve the LCI parcelport documentation

  • PR #6525 - Addressing cmake warnings issued starting V3.30

  • PR #6522 - Fixing distance test

  • PR #6520 - Adding optional handshakes to acknowledge the received data

  • PR #6518 - Make sure that –hpx:ini log settings take effect

  • PR #6512 - Minor cleanup of future_data

  • PR #6510 - Include Boost as CMake subproject

  • PR #6509 - Add components documentation

  • PR #6508 - Fix typo: s/unititiallized/uninitialized/

  • PR #6507 - Update LSU Jenkins libraries to match Rostam 3.0 with RHEL9

  • PR #6503 - Fix 2 tests on FreeBSD by initializing freebsd_environ

  • PR #6499 - Fix crash in get_executable_filename on FreeBSD

  • PR #6498 - Avoid rewriting defines.hpp

  • PR #6497 - Contains and contains_subrange parallel algorithm implementation GSOC 2024

  • PR #6496 - Prevent usage of CMake try_run on crosscompiling

  • PR #6494 - Add unit test cases and fixes for the S/R versions of the parallel algorithms

  • PR #6487 - Fixing security vulnerabilities reported by MSVC security checks

  • PR #6486 - Create codeql.yml

  • PR #6474 - Remove remnants of libfabric parcelport

  • PR #6473 - Add documentation for distributed implementations of post, async, sync and dataflow

  • PR #6471 - Add distance.cpp test in CMake

  • PR #6468 - Small vector relocation

  • PR #6448 - Standardising Benchmarks, with support for nanobench as an option for its backend

  • PR #6365 - Release V1.10.0

  • PR #6089 - Implementing p2079