This is the 12th official release of HPX. It coincides with the 7th anniversary of the first commit to our source code repository. Since then, we have seen over 12,300 commits amounting to more than 220,000 lines of C++ code.
The major focus of this release was to improve the reliability of large scale runs. We believe this goal has been achieved as we now can reliably run HPX applications on up to ~24k cores. We have also shown that HPX can be used with success for symmetric runs (applications using both, host cores and Intel Xeon/Phi coprocessors). This is a huge step forward in terms of the usability of HPX. The main focus of this work involed isolating the causes of the segmentation faults at start up and shut down. Many of these issues were discovered to be the result of the suspension of threads which hold locks.
A very important improvement introduced with this release is the refactoring of the code representing our parcel-port implementation. Parcel- ports can now be implemented by 3rd parties as independent plugins which are dynamically loaded at runtime (static linking of parcel-ports is also supported). This refactoring also includes a massive improvement of the performance of our existing parcel-ports. We were able to significantly reduce the networking latencies and to improve the available networking bandwidth. Please note that in this release we disabled the ibverbs and ipc parcel ports as those have not been ported to the new plugin system yet (see #839).
Another cornerstone of this release is our work towards a complete implementation of N4354 (Working Draft, Technical Specification for C++ Extensions for Parallelism). This document defines a set of parallel algorithms to be added to the C++ standard library. We have now implemented about 75% of all specified parallel algorithms (see Parallel Algorithms for more details). We also implemented some extensions to N4354 allowing to invoke all of the algorithms asynchronously.
This release adds a first implementation of
which is a distributed data structure closely aligned to the functionality
std::vector. The difference is that
stores the data in partitions where the partitions can be distributed over
different localities. We started work on the ability to use the parallel
hpx::vector. At this point we have implemented
only a few of the parallel algorithms to support distributed data structures
hpx::vector) for testing purposes (see #1338 for
a documentation of our progress).
With this release we put a lot of effort into changing the code base to be more compatible to C++11. These changes have caused the following issues for backward compatiblility:
hpx::wait_each, synchronous invocation of actions).
HPX_STD_TUPLE. This shouldn't affect any user code as we replaced
hpx::util::function_nonserwhich was the default expansion used for this macro. All HPX API functions which expect a
hpx::util::unique_function_nonser) can now be transparently called with a compatible
HPX_STD_TUPLEwas replaced by its default expansion as well:
hpx::unique_future, which was deprecated in the previous release for
hpx::futureis now completely removed from HPX. This completes the transition to a completely standards conforming implementation of
Here is a list of the important tickets we closed for this release.
--hpx:bindthrows unexpected error
parallel::countfor distributed data structures, adding tests