We are very proud to announce the release of version 0.8.0 of our High Performance ParalleX (HPX) parallel runtime system. This is our third formal release, and we would like to thank everyone involved for their hard work which has made this release possible. You can download the release files from the downloads page. The release note are available from here. Please feel free to try the examples and let us know what you think. The best way to get in contact with us is to leave a comment on this page or to send a mail to firstname.lastname@example.org. We have made substantial progress since the previous release last November. We have had roughly 1000 commits since the last release and we closed approximately 70 tickets (bugs, feature requests, etc.). This post will expand on some of the most important changes we have made.
We are especially proud of ourselves to have finally started an effort to document HPX. You can see the beginnings of what will be a full and detailed documentation in the next release here. Our plan is to eventually have three major sections:
- A ‘Getting Started Guide’: we have made some progress here already and we hope it will help you to get started with HPX smoothly. However, we know that much more work needs to be done to complete this.
- Description of the ParalleX execution model as implemented in HPX, this will contain more detailed information about HPX’s architectures, some more examples showing best practices, etc. We started working on this by describing some of our examples, but we need to invest more time into this as well.
- A Programmers Manual describing the API exposed by HPX (that’s still work in progress)
We believe that the documentation work is heading into the right direction and we would like to hear back about things you would like to see described.
General Consolidation and Performance Improvements
There is no major single feature to highlight in this release. However, there are many, many performance improvements, changes, and bug fixes all over the place which make this release a lot more usable. One of the most important changes is the consequent usage of C++11 move semantics which improves the performance of invoking an HPX action considerably. Thanks to using the Boost.Move library this is available even for compilers not supporting r-value references yet. This (under certain circumstances) drastically reduces the number of copies created for each of the parameters and return values for (remote) action invocations.
Distributed runs are much more reliable now. We touched up the PBS support, which simplifies to run HPX applications on clusters. We have been able to run some of the applications on hundreds of cores and we have shown applications to scale when doing so.
Other new things are related to building a reliable testing framework for HPX, which includes an automated build system giving instant, automated feedback on each commit to SVN, and new tests which are being executed automatically there as well. We improved the build system support, added support for building HPX on Windows using the same build system, we added the possibility to build your application outside of the source tree of HPX.
This release is a release of refactoring. The performance counter framework has been touched (and almost completely rewritten) to accommodate for a more flexible extension mechanism. The command line handling has been revamped and command line options have been unified and streamlined; user defined components now can easily add their own command line options enabling user-specific configuration. The networking layer has been reworked to allow for better resource utilization and to avoid contention under heavy parcel traffic. The LCO (lightweight control object) framework has been overhauled, unified, and the naming conventions for its components have been adapted to commonly used terminology. The reference counting framework has been verified, and optimized to perform better when dealing with massive quantities of objects. The threading subsystem has been made NUMA aware and we added a couple more experimental thread schedulers exposing different characteristics for different use cases. For more details, please see our release notes.
We added a couple of applications demonstrating how HPX can be used. Most notably, we added the Graph500 benchmark (thanks to Matt Anderson), which demonstrates that it is possible to achieve competitive performance in the domain of graph applications.
All in all, we are very pleased with this release as we were able to stabilize our API, to improve overall performance, to fix quite a number of bugs, and to clean up a lot of things in our code base. The next release is special as it marks V1.0 and it is scheduled for June later this year and we plan to continue working on all of those issues – stay tuned.