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::cudanamespace.We have added
partial_sortbased on Francisco Tapia’s implementation.hpx::initandhpx::startgained new overloads taking anhpx::init_paramsstruct in 1.5.0. All overloads not taking anhpx::init_paramsare 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_executornow uses a hierarchical spawning scheme for bulk execution, which improves data locality and performance.hpx::dataflowcan 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_functioncan 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_codeandboost::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
verbsparcelport 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::promisehas been replaced withhpx::distributed::promise.hpx::program_optionsis a drop-in replacement forboost::program_options.hpx::execution::parallel_executornow 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.hppdoes 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::stringfor 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.hpplower caseIssue #5067 - Bug
string_util/split.hppIssue #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_EXAMPLESfailsIssue #5019 - Broken help string for hpx
Issue #5016 -
hpx::parallel::fillfails compilingIssue #5014 - Rename all
.ccto.cppand.hhto.hppIssue #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_FINALIZEbefore app calls itIssue #4127 - Local runtime entry-points
Closed pull requests¶
PR #5178 - Fix parallel
remove/remove_copy/transformnamespace 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-newestJenkins 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::stringsPR #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_exceptionPR #5136 - Make sure codespell checks run on CircleCI
PR #5132 - Fixing spelling errors
PR #5131 - Mark
counting_iteratormember functions asHPX_HOST_DEVICEPR #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::transformimplementationPR #5119 - Use
sequential_findand 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.hppto make structs lowercasePR #5107 - Relax
dataflowinternalsPR #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::endianPR #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_executorinfuture_overheadtestPR #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-newestcmake configPR #5074 - Fixing warnings generated by MSVC
PR #5073 - Allow using noncopyable types with unwrapping
PR #5072 - Fix
is_convertibleargs inresult_typesPR #5071 - Fix unused parameters
PR #5070 - Fix unused variables warnings in hipcc
PR #5069 - Add support for sentinels to
adjacent_findPR #5068 - Fix string split function
PR #5066 - Adapt
searchto C++20 and Range TSPR #5065 - Fix
hpx::range::adjacent_finddoxygen 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_overheadbenchPR #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::getPR #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.pyfor PhylanxPR #5042 - Add missing header to partial sort test
PR #5041 - Adding Francisco Tapia’s implementation of
partial_sortPR #5040 - Remove generated headers left behind from a previous configuration
PR #5039 - Fix GCC 10 release builds
PR #5037 - Add
is_invocabletypedefs to top-levelhpxnamespace and public API listPR #5036 - Deprecate
hpx::util::decayin favor ofstd::decayPR #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_basePR #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_sortedandis_sorted_untilto C++20PR #5024 - Moving
naming_baseto full modulesPR #5022 - Remove C language from
CMakeLists.txtPR #5021 - Warn about unused arguments given to
add_hpx_modulePR #5020 - Fixing help string
PR #5018 - Update CSCS jenkins configuration to clang 11
PR #5017 - Fixing broken backwards compatibility for
hpx::parallel::fillPR #5015 - Detect if generated global header conflicts with explicitly listed module headers
PR #5012 - Properly reset pointer tracking data in
output_archivePR #5011 - Inspect command line tweaks
PR #5010 - Creating AGAS module
PR #5009 - Replace
boost::system::error_codewithstd::error_codePR #5008 - Replace uses of
boost::detail::spinlockPR #5007 - Bump minimal Boost version to 1.65.0
PR #5006 - Adapt is_partitioned to C++20
PR #5005 - Making sure
reduce_by_keycompiles againPR #5004 - Fixing template specializations that make extra archive data types unique across module boundaries
PR #5003 - Relax
dataflowargument 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_findto C++20PR #4995 - Test all schedulers in
cross_pool_injectiontest exceptshared_priority_queue_schedulerPR #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::printfunctionalitiesPR #4976 - Remove indirection layer in
at_index_implPR #4975 - Remove indirection layer in
at_index_implPR #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_policyand friends into namespacehpxPR #4968 - Enable deprecation warnings for 1.6.0 and move
anyfunctionality to hpx namespacePR #4967 - Define deprecation macros conditionally
PR #4966 - Add
clang-formatandcmake-formatversion printsPR #4965 - Making
is_heapandis_heap_untilconforming to C++20PR #4964 - Adding parallel
make_heapPR #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::utilPR #4957 - Fixing unity build option for parcelports
PR #4953 - Fixing MSVC problems after recent restructurings
PR #4952 - Make
parallel_executorusethread_pool_executorspawning 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_BUILDoption on one of the Jenkins configurationsPR #4943 - Move public
hpx::parallel::executionfunctionality 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_stateconcepts in terms of P0443r13PR #4649 - Split libhpx into multiple libraries
PR #4642 - Implementing
operation_stateconcept in terms of P0443r13PR #4640 - Implementing receiver concept in terms of P0443r13
PR #4622 - Sanitizer fixes