HPX V1.6.0 (Feb 17, 2021)#

General changes#

This release continues the focus on C++20 conformance with multiple new algorithms adapted to be C++20 conformant and becoming customization point objects (CPOs). We have also added experimental support for HIP, allowing previous CUDA features to now be compiled with hipcc and run on AMD GPUs.

  • The following algorithms have been adapted to be C++20 conformant: adjacent_find, includes, inplace_merge, is_heap, is_heap_until, is_partitioned, is_sorted, is_sorted_until, merge, set_difference, set_intersection, set_symmetric_difference, set_union.

  • Experimental HIP support can be enabled by compiling HPX with hipcc. All CUDA functionality in HPX can now be used with HIP. The HIP functionality is for the time being exposed through the same API as the CUDA functionality, i.e. no changes are required in user code. The CUDA, and now HIP, functionality is in the hpx::cuda namespace.

  • We have added partial_sort based on Francisco Tapia’s implementation.

  • hpx::init and hpx::start gained new overloads taking an hpx::init_params struct in 1.5.0. All overloads not taking an hpx::init_params are now deprecated.

  • We have added an experimental fork_join_executor. This executor can be used for OpenMP-style fork-join parallelism, where the latency of a parallel region is important for performance.

  • The parallel_executor now uses a hierarchical spawning scheme for bulk execution, which improves data locality and performance.

  • hpx::dataflow can now be used with executors that inject additional parameters into the call of the user-provided function.

  • We have added experimental support for properties as proposed in P2220. Currently the only supported property is the scheduling hint on parallel_executor.

  • hpx::util::annotated_function can now be passed a dynamically generated std::string.

  • In moving functionality to new namespaces, old names have been deprecated. A deprecation warning will be issued if you are using deprecated functionality, with instructions on how to correct or ignore the warning.

  • We have removed all support for C and Fortran from our build system.

  • We have further reduced the use of Boost types within HPX (boost::system::error_code and boost::detail::spinlock).

  • We have enabled more warnings in our CI builds (unused variables and unused typedefs).

Breaking changes#

  • hpxMP support has been completely removed.

  • The verbs parcelport has been removed.

  • The following compatibility options have been disabled by default: HPX_WITH_ACTION_BASE_COMPATIBILITY, HPX_WITH_REGISTER_THREAD_COMPATIBILITY, HPX_WITH_PROMISE_ALIAS_COMPATIBILITY, HPX_WITH_UNSCOPED_ENUM_COMPATIBILITY, HPX_PROGRAM_OPTIONS_WITH_BOOST_PROGRAM_OPTIONS_COMPATIBILITY, HPX_WITH_EMBEDDED_THREAD_POOLS_COMPATIBILITY, HPX_WITH_THREAD_POOL_OS_EXECUTOR_COMPATIBILITY, HPX_WITH_THREAD_EXECUTORS_COMPATIBILITY, HPX_THREAD_AWARE_TIMER_COMPATIBILITY, HPX_WITH_POOL_EXECUTOR_COMPATIBILITY. Unless noted here, the above functionalities do not come with replacements. Unscoped enumerations have been replaced by scoped enumerations. Previously deprecated unscoped enumerations are disabled by HPX_WITH_UNSCOPED_ENUM_COMPATIBILITY. Newly deprecated unscoped enumerations have been given deprecation warnings and replaced by scoped enumerations. hpx::promise has been replaced with hpx::distributed::promise. hpx::program_options is a drop-in replacement for boost::program_options. hpx::execution::parallel_executor now has constructors which take a thread pool, covering the use case of hpx::threads::executors::pool_executor. A pool can be supplied with hpx::resource::get_thread_pool.

Closed issues#

  • Issue #5148 - runtime_support.hpp does not work with newer cling

  • Issue #5147 - Wrong results with parallel reduce

  • Issue #5129 - Missing specialization for std::hash<hpx::thread::id>

  • Issue #5126 - Use std::string for task annotations

  • Issue #5115 - Don’t expect hwloc to always report Cores

  • Issue #5113 - Handle threadmanager exceptions during startup

  • Issue #5112 - libatomic problems causing unexpected fails

  • Issue #5089 - Remove non-BSL files

  • Issue #5088 - Unwrapping problem

  • Issue #5087 - Remove hpxMP support

  • Issue #5077 - PAPI counters are not accessible when HPX is installed

  • Issue #5075 - Make the structs in all iter_sent.hpp lower case

  • Issue #5067 - Bug string_util/split.hpp

  • Issue #5049 - Change back the hipcc jenkins config to the fury partition on rostam

  • Issue #5038 - Not all examples link in the latest HPX master

  • Issue #5035 - Build with HPX_WITH_EXAMPLES fails

  • Issue #5019 - Broken help string for hpx

  • Issue #5016 - hpx::parallel::fill fails compiling

  • Issue #5014 - Rename all .cc to .cpp and .hh to .hpp

  • Issue #4988 - MPI is not finalized if running with only one locality

  • Issue #4978 - Change feature test macros to expand to zero/one

  • Issue #4949 - Crash when not enabling TCP parcelport

  • Issue #4933 - Improve test coverage for unused variable warnings etc.

  • Issue #4878 - HPX mpi async might call MPI_FINALIZE before app calls it

  • Issue #4127 - Local runtime entry-points

Closed pull requests#

  • PR #5178 - Fix parallel remove/remove_copy/transform namespace references in docs

  • PR #5169 - Attempt to get Piz Daint jenkins setup running after maintenance

  • PR #5168 - Remove include of itself

  • PR #5167 - Fixing deprecation warnings that slipped through the net

  • PR #5159 - Update APEX tag to 2.3.1

  • PR #5154 - Splitting unit tests on circleci to avoid timeouts

  • PR #5151 - Use C++20 on clang-newest Jenkins CI configuration

  • PR #5149 - Rename 'module' symbols to avoid keyword conflict

  • PR #5145 - Adjust handling of CUDA/HIP options in CMake

  • PR #5142 - Store annotated_function annotations as std::strings

  • PR #5140 - Scheduler mode

  • PR #5139 - Fix path problem in pre-commit hook, add summary commit line

  • PR #5138 - Add program options variable map to resource partitioner init

  • PR #5137 - Remove the use of boost::throw_exception

  • PR #5136 - Make sure codespell checks run on CircleCI

  • PR #5132 - Fixing spelling errors

  • PR #5131 - Mark counting_iterator member functions as HPX_HOST_DEVICE

  • PR #5130 - Adding specialization for std::hash<hpx::thread::id>

  • PR #5128 - Fixing environment handling for FreeBSD

  • PR #5127 - Fix typo in fibonacci documentation

  • PR #5123 - Reduce vector sizes in partial sort benchmarks when running in debug mode

  • PR #5122 - Making sure exceptions during runtime initialization are correctly reported

  • PR #5121 - Working around hwloc limitation on certain platforms

  • PR #5120 - Fixing compatibility warnings in hpx::transform implementation

  • PR #5119 - Use sequential_find and friends from separate detail header

  • PR #5116 - Fix compilation with timer pool off

  • PR #5114 - Fix 5112 - make sure libatomic is used when needed

  • PR #5109 - Remove default runtime mode argument from init overload, again

  • PR #5108 - Refactor iter_sent.hpp to make structs lowercase

  • PR #5107 - Relax dataflow internals

  • PR #5106 - Change initialization of property CPOs to satisfy older nvcc versions

  • PR #5104 - Fix regeneration of two files that trigger unnecessary rebuilds

  • PR #5103 - Remove default runtime mode argument from start/init overloads

  • PR #5102 - Untie deprecated thread enums from the CMake option

  • PR #5101 - Update APEX tag for 1.6.0

  • PR #5100 - Bump minimum required Boost version to 1.66 and update CI configurations

  • PR #5098 - Minor fixes to public API listing

  • PR #5097 - Remove hpxMP support

  • PR #5096 - Remove fractals examples

  • PR #5095 - Use all AMD nodes again on rostam

  • PR #5094 - Attempt to remove macOS workaround for GH actions environment

  • PR #5093 - Remove verbs parcelport

  • PR #5091 - Avoid moving from lvalues

  • PR #5090 - Adopt C++20 std::endian

  • PR #5085 - Update daint CI to use Boost 1.75.0

  • PR #5084 - Disable compatibility options for 1.6.0 release

  • PR #5083 - Remove duplicated call to the limiting_executor in future_overhead test

  • PR #5079 - Add checks to make sure that MPI/CUDA polling is enabled/not disabled too early

  • PR #5078 - Add install lib directory to list of component search paths

  • PR #5076 - Fix a typo in the jenkins clang-newest cmake config

  • PR #5074 - Fixing warnings generated by MSVC

  • PR #5073 - Allow using noncopyable types with unwrapping

  • PR #5072 - Fix is_convertible args in result_types

  • PR #5071 - Fix unused parameters

  • PR #5070 - Fix unused variables warnings in hipcc

  • PR #5069 - Add support for sentinels to adjacent_find

  • PR #5068 - Fix string split function

  • PR #5066 - Adapt search to C++20 and Range TS

  • PR #5065 - Fix hpx::range::adjacent_find doxygen function signatures

  • PR #5064 - Refactor runtime configuration, command line handling, and resource partitioner

  • PR #5063 - Limit the device code guards to the distributed parts of the future_overhead bench

  • PR #5061 - Remove hipcc guards in examples and tests

  • PR #5060 - Fix deprecation warnings generated by msvc

  • PR #5059 - Add warning about suspending/resuming the runtime in multi-locality scenarios

  • PR #5057 - Fix unused variable warnings

  • PR #5056 - Fix hpx::util::get

  • PR #5055 - Remove hipcc guards

  • PR #5054 - Fix typo

  • PR #5051 - Adapt transform to C++20

  • PR #5050 - Replace old init overloads in tests and examples

  • PR #5048 - Limit jenkins hipcc to the reno node

  • PR #5047 - Limit cuda jenkins run to nodes with exclusively Nvidia GPUs

  • PR #5046 - Convert thread and future enums to class enums

  • PR #5043 - Improve hpxrun.py for Phylanx

  • PR #5042 - Add missing header to partial sort test

  • PR #5041 - Adding Francisco Tapia’s implementation of partial_sort

  • PR #5040 - Remove generated headers left behind from a previous configuration

  • PR #5039 - Fix GCC 10 release builds

  • PR #5037 - Add is_invocable typedefs to top-level hpx namespace and public API list

  • PR #5036 - Deprecate hpx::util::decay in favor of std::decay

  • PR #5034 - Use versioned container image on CircleCI

  • PR #5033 - Implement P2220 properties module

  • PR #5032 - Do codespell comparison only on files changed from common ancestor

  • PR #5031 - Moving traits files to actions_base

  • PR #5030 - Add codespell version print in circleci

  • PR #5029 - Work around problems in GitHub actions macOS builder

  • PR #5028 - Moving move files to naming and naming_base

  • PR #5027 - Lessen constraints on certain algorithm arguments

  • PR #5025 - Adapt is_sorted and is_sorted_until to C++20

  • PR #5024 - Moving naming_base to full modules

  • PR #5022 - Remove C language from CMakeLists.txt

  • PR #5021 - Warn about unused arguments given to add_hpx_module

  • PR #5020 - Fixing help string

  • PR #5018 - Update CSCS jenkins configuration to clang 11

  • PR #5017 - Fixing broken backwards compatibility for hpx::parallel::fill

  • PR #5015 - Detect if generated global header conflicts with explicitly listed module headers

  • PR #5012 - Properly reset pointer tracking data in output_archive

  • PR #5011 - Inspect command line tweaks

  • PR #5010 - Creating AGAS module

  • PR #5009 - Replace boost::system::error_code with std::error_code

  • PR #5008 - Replace uses of boost::detail::spinlock

  • PR #5007 - Bump minimal Boost version to 1.65.0

  • PR #5006 - Adapt is_partitioned to C++20

  • PR #5005 - Making sure reduce_by_key compiles again

  • PR #5004 - Fixing template specializations that make extra archive data types unique across module boundaries

  • PR #5003 - Relax dataflow argument constraints

  • PR #5001 - Add <random> inspect check

  • PR #4999 - Attempt to fix MacOS Github action error

  • PR #4997 - Fix unused variable and typedef warnings

  • PR #4996 - Adapt adjacent_find to C++20

  • PR #4995 - Test all schedulers in cross_pool_injection test except shared_priority_queue_scheduler

  • PR #4993 - Fix deprecation warnings

  • PR #4991 - Avoid unnecessarily including entire modules

  • PR #4990 - Fixing some warnings from HPX complaining about use of obsolete types

  • PR #4989 - add a *destroy* trait for ParcelPort plugins

  • PR #4986 - Remove serialization to functional module dependency

  • PR #4985 - Compatibility header generation

  • PR #4980 - Add ranges overloads to for_loop (and variants)

  • PR #4979 - Actually enable unity builds on Jenkins

  • PR #4977 - Cleaning up debug::print functionalities

  • PR #4976 - Remove indirection layer in at_index_impl

  • PR #4975 - Remove indirection layer in at_index_impl

  • PR #4973 - Avoid warnings/errors for older gcc complaining about multi-line comments

  • PR #4970 - Making set algorithms conform to C++20

  • PR #4969 - Moving is_execution_policy and friends into namespace hpx

  • PR #4968 - Enable deprecation warnings for 1.6.0 and move any functionality to hpx namespace

  • PR #4967 - Define deprecation macros conditionally

  • PR #4966 - Add clang-format and cmake-format version prints

  • PR #4965 - Making is_heap and is_heap_until conforming to C++20

  • PR #4964 - Adding parallel make_heap

  • PR #4962 - Fix external timer function pointer exports

  • PR #4960 - Fixing folder names for module tests and examples

  • PR #4959 - Adding communications set

  • PR #4958 - Deprecate tuple and timing functionality in hpx::util

  • PR #4957 - Fixing unity build option for parcelports

  • PR #4953 - Fixing MSVC problems after recent restructurings

  • PR #4952 - Make parallel_executor use thread_pool_executor spawning mechanism

  • PR #4948 - Clean up old artifacts better and more aggressively on Jenkins

  • PR #4947 - Add HIP support for AMD GPUs

  • PR #4945 - Enable HPX_WITH_UNITY_BUILD option on one of the Jenkins configurations

  • PR #4943 - Move public hpx::parallel::execution functionality to hpx::execution

  • PR #4938 - Post release cleanup

  • PR #4858 - Extending resilience APIs to support distributed invocations

  • PR #4744 - Fork-join executor

  • PR #4665 - Implementing sender, receiver, and operation_state concepts in terms of P0443r13

  • PR #4649 - Split libhpx into multiple libraries

  • PR #4642 - Implementing operation_state concept in terms of P0443r13

  • PR #4640 - Implementing receiver concept in terms of P0443r13

  • PR #4622 - Sanitizer fixes