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 thehpx::cuda
namespace.We have added
partial_sort
based on Francisco Tapia’s implementation.hpx::init
andhpx::start
gained new overloads taking anhpx::init_params
struct in 1.5.0. All overloads not taking anhpx::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 generatedstd::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
andboost::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 byHPX_WITH_UNSCOPED_ENUM_COMPATIBILITY
. Newly deprecated unscoped enumerations have been given deprecation warnings and replaced by scoped enumerations.hpx::promise
has been replaced withhpx::distributed::promise
.hpx::program_options
is a drop-in replacement forboost::program_options
.hpx::execution::parallel_executor
now has constructors which take a thread pool, covering the use case ofhpx::threads::executors::pool_executor
. A pool can be supplied withhpx::resource::get_thread_pool
.
Closed issues¶
Issue #5148 -
runtime_support.hpp
does not work with newer clingIssue #5147 - Wrong results with parallel reduce
Issue #5129 - Missing specialization for
std::hash<hpx::thread::id>
Issue #5126 - Use
std::string
for task annotationsIssue #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 caseIssue #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
failsIssue #5019 - Broken help string for hpx
Issue #5016 -
hpx::parallel::fill
fails compilingIssue #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 itIssue #4127 - Local runtime entry-points
Closed pull requests¶
PR #5178 - Fix parallel
remove
/remove_copy
/transform
namespace references in docsPR #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 configurationPR #5149 - Rename
'module'
symbols to avoid keyword conflictPR #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 asHPX_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
implementationPR #5119 - Use
sequential_find
and friends from separate detail headerPR #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 lowercasePR #5107 - Relax
dataflow
internalsPR #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
infuture_overhead
testPR #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 configPR #5074 - Fixing warnings generated by MSVC
PR #5073 - Allow using noncopyable types with unwrapping
PR #5072 - Fix
is_convertible
args inresult_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 TSPR #5065 - Fix
hpx::range::adjacent_find
doxygen function signaturesPR #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
benchPR #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 PhylanxPR #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-levelhpx
namespace and public API listPR #5036 - Deprecate
hpx::util::decay
in favor ofstd::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
andis_sorted_until
to C++20PR #5024 - Moving
naming_base
to full modulesPR #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
withstd::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 againPR #5004 - Fixing template specializations that make extra archive data types unique across module boundaries
PR #5003 - Relax
dataflow
argument constraintsPR #5001 - Add
<random>
inspect checkPR #4999 - Attempt to fix MacOS Github action error
PR #4997 - Fix unused variable and typedef warnings
PR #4996 - Adapt
adjacent_find
to C++20PR #4995 - Test all schedulers in
cross_pool_injection
test exceptshared_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
functionalitiesPR #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 namespacehpx
PR #4968 - Enable deprecation warnings for 1.6.0 and move
any
functionality to hpx namespacePR #4967 - Define deprecation macros conditionally
PR #4966 - Add
clang-format
andcmake-format
version printsPR #4965 - Making
is_heap
andis_heap_until
conforming to C++20PR #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
usethread_pool_executor
spawning mechanismPR #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 configurationsPR #4943 - Move public
hpx::parallel::execution
functionality to hpx::executionPR #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 P0443r13PR #4649 - Split libhpx into multiple libraries
PR #4642 - Implementing
operation_state
concept in terms of P0443r13PR #4640 - Implementing receiver concept in terms of P0443r13
PR #4622 - Sanitizer fixes