HPX 1.9.0 Released

We have released HPX 1.9.0 — a major update to our C++ Standard Library for Concurrency and Parallelism. The HPX parallel algorithms now have been fully adapted to C++23, all existing facilities have been adjusted to conform to this version of the Standard as well. We now can proudly announce full conformance to the C++23 concurrency and parallelism facilities. HPX supports all of the parallel algorithms as specified by C++23. We have been able to significantly improve the performance of some of our algorithms. On top of that we support parallel versions of all range-based algorithms and have added more support for explicit vectorization to our algorithms (using std::experimental::simd). Even more work has been done towards implementing P2300 (std::execution) and keeping the underlying senders/receivers facilities in line with the evolving standardization efforts. We have done a lot of refactoring to improve the consistency of our exposed APIs. Last but not least, we have continued to improve our documentation, please have a look here.

You can download the release from our releases page or check out the v1.9.0 tag using git. A full list of changes can be found in the release notes.

Important: IRC channel change

Because of the growing problems with Freenode we have decided to move our IRC channel to a different network. Please /join #ste||ar at Libra.Chat (irc://irc.libera.chat:6667). If you are using the Matrix bridge to IRC, you can join #ste||ar:libera.chat through Matrix.

HPX 1.5.1 Released!

We have just released HPX 1.5.1. This patch release fixes problems found in the 1.5.0 release. It contains the following changes:

  • Removes restriction on suspending runtime with multiple localities, users are now responsible for synchronizing work between localities before suspending.
  • Fixes several compilation problems and warnings.
  • Adds notes in the documentation explaining how to cite HPX.


Download the release from our releases page or by checking our the 1.5.1 tag. Please see our release notes for a full list of fixed issues and merged pull requests.


If you have any questions, comments, or exploits to report you can reach us on IRC (#ste||ar on freenode), on the matrix hpx channel, or email us at hpx-users. We depend on your input!

HPX 1.5.0 Released!

Make sure to read our release notes for a full list of changes as they contain important information on deprecations and breaking changes.

Thank you to everyone in the STE||AR Group and all the volunteers who have provided fixes, opened issues, and improved the documentation.

Download the release from our releases page.

The highlights of this release are:

  • We continued with the modularization. This results in the deprecation of several headers which have been moved to a different location while better matching the standard ones, we encourage you to update your includes to the new header location as soon as possible as it will be removed in a couple of releases. Here is the link to the headers you should refer to the public API.
  • We adapted several algorithms to be C++20 conformant and added hpx::stable_sort.
  • We have refactored the CMake target, you can now link directly to HPX::hpx (link additionally to HPX::wrap_main to have your main() to be used as the first HPX thread).
  • HPX now requires a C++14 compatible compiler and the standard is set by default to C++14.

If you have any questions, comments, or exploits to report you can reach us on IRC (#ste||ar on freenode), on the matrix hpx channel, or email us at hpx-users. We depend on your input!

Using HPX on Windows

HPX is a C++ Standard Library for Parallelism and Concurrency. Building and using it on Windows just got much less involved. We have now integrated HPX into the VcPkg VC++ Packaging Tool. This tool is design to help you getting C and C++ libraries built and installed on Windows without hassle. It manages all package dependencies for you, such that — once HPX has been built — no additional settings have to be supplied to your build environment.

HPX V1.0 Released!

The STE||AR Group is proud to announce the release of HPX V1.0. While we call it version one, it is in fact the fifteenth official release of our library. This release has become possible as we now have implemented all the features we set out to put in place for this version.

HPX is the C++ Standard library for parallelism and concurrency.  It implements all of the related facilities as defined by the C++ Standard. As of this writing, HPX provides the only widely available open-source implementation of the new C++17 parallel algorithms. Additionally, in HPX we implement functionalities proposed as part of the ongoing C++ standardization process, such as large parts of the C++ Concurrency TS, task blocks, data-parallel algorithms, executors, index-based parallel for loops, and many more. We also extend the existing C++ Standard APIs to the distributed case (e.g. compute clusters) and for heterogeneous systems (e.g. GPUs).

At its heart, HPX is an asynchronous many-task runtime system for the distributed world. It is portable in code and performance across a wide variety of architectures and operating systems. We have shown that it is usable on almost any machine from a Raspberry Pi to the biggest computers available to us. Applications relying on HPX will scale from small handheld devices up to machines with thousands of compute-nodes and millions of processors. For example, we have just successfully run an HPX application on the full NERSC Cori machine, a cluster with 9640 Intel Knight’s Landing compute nodes (655520 cores).

The new C++ Standard facilities listed fit perfectly with some of our extensions targeting asynchronous operations, such as asynchronous parallel algorithms, asynchronous task blocks, or dataflow constructs. As a result, HPX changes the way we write programs in modern C++. It seamlessly enables a new asynchronous C++ Standard Programming Model which tends to improve the parallel efficiency of our applications and helps reduce complexities usually associated with concurrency. At the same time, HPX’s API is strictly aligned with the C++ standardization process which removes the barriers of adoption.

The code base of HPX is very mature and of very high code quality. Our extensive testing has definitely paid off. Many people have contributed to this release — we would like to thank all of them for their efforts. This release incorporates nearly 1500 commits and has closed almost 300 tickets and pull requests submitted by collaborators from all over the world. We have introduced several important changes:

  • We added various new higher-level parallelization facilities, such as more parallel algorithms, range based parallel algorithms, and channels — all well aligned with various C++ standardization documents.
  • We now support transparently migrating objects across compute-node boundaries, which is a major feature supporting dynamic load balancing in large distributed applications.
  • We have refactored our thread-scheduling subsystem for improved performance and less overheads.
  • We have added a new network transport module enabling direct support for Infiniband networks.
  • We have added a long list of new performance counters exposing different runtime parameters.
  • We have improved the integration with external diagnostic tools, such as APEX and Intel Amplifier or Intel Inspector.

How to Download:

For a complete list of new features and breaking changes please see our release notes. If you have any questions, comments, or exploits to report you can comment below, reach us on IRC (#stellar on Freenode), or email us at hpx-users@stellar.cct.lsu.edu. We value your input!

Vectorized C++ Parallel Algorithms with HPX

In preparation for my talk at CppCon 2016 last week I decided to have a closer look at the possibility to add vectorization to HPX’s parallel abstractions1The slides for this talk can be downloaded here. The goal was to avoid using compiler specific extensions while enabling vectorization support. At the same time, I wanted to be able to integrate this with the already existing parallel algorithms in HPX, proving again that higher level APIs and best possible performance go hand in hand in HPX.

Notes

Notes
1 The slides for this talk can be downloaded here

HPX V0.9.99-rc1 Available

The STE||AR Group is proud to announce the first release candidate of HPX V0.9.99!

In preparation for the next major release of HPX we have put together a first release candidate. Please download one of the tarballs

  • HPX V0.9.99-rc1:
    File MD5 Hash
    zip (5.5M) 3f70d33f0ca737dc55e15e106abef259
    gz (3.7M) 10a0ad210ac33b5a91e25a9a375ce585
    bz2 (3.2M) d78657bce8435c0998648f09b280acee
    7z (2.8M) b109408218d5aa1320efd9fc7a0671d6

or check out the tag ‘0.9.99-rc1’ from the repository here and verify whether your code builds and runs fine when using this version.

Please see for a list of new features and fixed problems in this release here.

Please report any problems you might encounter through our ticket system.
We plan to do the final release of HPX V0.9.99 on July 15th, 2016.

 

GSoC 2016 Participants Announced!

We can now announce the participants in the STE||AR Group’s 2016 Google Summer of Code! We are very proud to announce the names of those 6 students who this year will be funded by Google to work on projects for our group.

These recipients represent only a handful of the many excellent proposals that we had to choose from. For those unfamiliar with the program, the Google Summer of Code brings together ambitious students from around the world with open source developers by giving each mentoring organization funds to hire a set number of participants. Students then write proposals, which they submit to a mentoring organization, in hopes of having their work funded.

HPX and Index-based C++ Parallel Loops

In Jacksonville at the winter 2016 C++ standardization meeting, Intel presented the second revision of their standardization proposal targeting index-based parallel for-loops (the latest document at the time of this writing is P0075R1). This document describes a couple of basic parallel for-loop constructs which complement the existing parallel algorithms which we have already implemented for quite some time in HPX. The following is taken from this document: