HPX V0.9.10 (Mar 24, 2015)#

General changes#

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 12300 commits amounting to more than 220000 lines of C++ code.

The major focus of this release was to improve the reliability of large scale runs. We believe to have achieved this goal 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 involved 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 Issue #839).

Another corner stone of this release is our work towards a complete implementation of __cpp11_n4104__ (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 now have implemented about 75% of all specified parallel algorithms (see [link hpx.manual.parallel.parallel_algorithms Parallel Algorithms] for more details). We also implemented some extensions to __cpp11_n4104__ allowing to invoke all of the algorithms asynchronously.

This release adds a first implementation of hpx::vector which is a distributed data structure closely aligned to the functionality of std::vector. The difference is that hpx::vector stores the data in partitions where the partitions can be distributed over different localities. We started to work on allowing to use the parallel algorithms with hpx::vector. At this point we have implemented only a few of the parallel algorithms to support distributed data structures (like hpx::vector) for testing purposes (see Issue #1338 for a documentation of our progress).

Breaking changes#

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 compatibility:

  • Move to Variadics- All of the API now uses variadic templates. However, this change required to modify the argument sequence for some of the exiting API functions (hpx::async_continue, hpx::apply_continue, hpx::when_each, hpx::wait_each, synchronous invocation of actions).

  • Changes to Macros- We also removed the macros HPX_STD_FUNCTION and HPX_STD_TUPLE. This shouldn’t affect any user code as we replaced HPX_STD_FUNCTION with hpx::util::function_nonser which was the default expansion used for this macro. All HPX API functions which expect a hpx::util::function_nonser (or a hpx::util::unique_function_nonser) can now be transparently called with a compatible std::function instead. Similarly, HPX_STD_TUPLE was replaced by its default expansion as well: hpx::util::tuple.

  • Changes to hpx::unique_future- hpx::unique_future, which was deprecated in the previous release for hpx::future is now completely removed from HPX. This completes the transition to a completely standards conforming implementation of hpx::future.

  • Changes to Supported Compilers. Finally, in order to utilize more C++11 semantics, we have officially dropped support for GCC 4.4 and MSVC 2012. Please see our Prerequisites page for more details.

Bug fixes (closed tickets)#

Here is a list of the important tickets we closed for this release.

  • Issue #1402 - Internal shared_future serialization copies

  • Issue #1399 - Build takes unusually long time…

  • Issue #1398 - Tests using the scan partitioner are broken on at least gcc 4.7 and intel compiler

  • Issue #1397 - Completely remove hpx::unique_future

  • Issue #1396 - Parallel scan algorithms with different initial values

  • Issue #1395 - Race Condition - 1d_stencil_8 - SuperMIC

  • Issue #1394 - “suspending thread while at least one lock is being held” - 1d_stencil_8 - SuperMIC

  • Issue #1393 - SEGFAULT in 1d_stencil_8 on SuperMIC

  • Issue #1392 - Fixing #1168

  • Issue #1391 - Parallel Algorithms for scan partitioner for small number of elements

  • Issue #1387 - Failure with more than 4 localities

  • Issue #1386 - Dispatching unhandled exceptions to outer user code

  • Issue #1385 - Adding Copy algorithms, fixing parallel::copy_if

  • Issue #1384 - Fixing 1325

  • Issue #1383 - Fixed #504: Refactor Dataflow LCO to work with futures, this removes the dataflow component as it is obsolete

  • Issue #1382 - is_sorted, is_sorted_until and is_partitioned algorithms

  • Issue #1381 - fix for CMake versions prior to 3.1

  • Issue #1380 - resolved warning in CMake 3.1 and newer

  • Issue #1379 - Compilation error with papi

  • Issue #1378 - Towards safer migration

  • Issue #1377 - HPXConfig.cmake should include TCMALLOC_LIBRARY and TCMALLOC_INCLUDE_DIR

  • Issue #1376 - Warning on uninitialized member

  • Issue #1375 - Fixing 1163

  • Issue #1374 - Fixing the MSVC 12 release builder

  • Issue #1373 - Modifying parallel search algorithm for zero length searches

  • Issue #1372 - Modifying parallel search algorithm for zero length searches

  • Issue #1371 - Avoid holding a lock during agas::incref while doing a credit split

  • Issue #1370 - --hpx:bind throws unexpected error

  • Issue #1369 - Getting rid of (void) in loops

  • Issue #1368 - Variadic templates support for tuple

  • Issue #1367 - One last batch of variadic templates support

  • Issue #1366 - Fixing symbolic namespace hang

  • Issue #1365 - More held locks

  • Issue #1364 - Add counters 1363

  • Issue #1363 - Add thread overhead counters

  • Issue #1362 - Std config removal

  • Issue #1361 - Parcelport plugins

  • Issue #1360 - Detuplify transfer_action

  • Issue #1359 - Removed obsolete checks

  • Issue #1358 - Fixing 1352

  • Issue #1357 - Variadic templates support for runtime_support and components

  • Issue #1356 - fixed coordinate test for intel13

  • Issue #1355 - fixed coordinate.hpp

  • Issue #1354 - Lexicographical Compare completed

  • Issue #1353 - HPX should set Boost_ADDITIONAL_VERSIONS flags

  • Issue #1352 - Error: Cannot find action ‘’ in type registry: HPX(bad_action_code)

  • Issue #1351 - Variadic templates support for appliers

  • Issue #1350 - Actions simplification

  • Issue #1349 - Variadic when and wait functions

  • Issue #1348 - Added hpx_init header to test files

  • Issue #1347 - Another batch of variadic templates support

  • Issue #1346 - Segmented copy

  • Issue #1345 - Attempting to fix hangs during shutdown

  • Issue #1344 - Std config removal

  • Issue #1343 - Removing various distribution policies for hpx::vector

  • Issue #1342 - Inclusive scan

  • Issue #1341 - Exclusive scan

  • Issue #1340 - Adding parallel::count for distributed data structures, adding tests

  • Issue #1339 - Update argument order for transform_reduce

  • Issue #1337 - Fix dataflow to handle properly ranges of futures

  • Issue #1336 - dataflow needs to hold onto futures passed to it

  • Issue #1335 - Fails to compile with msvc14

  • Issue #1334 - Examples build problem

  • Issue #1333 - Distributed transform reduce

  • Issue #1332 - Variadic templates support for actions

  • Issue #1331 - Some ambiguous calls of map::erase have been prevented by adding additional check in locality constructor.

  • Issue #1330 - Defining Plain Actions does not work as described in the documentation

  • Issue #1329 - Distributed vector cleanup

  • Issue #1328 - Sync docs and comments with code in hello_world example

  • Issue #1327 - Typos in docs

  • Issue #1326 - Documentation and code diverged in Fibonacci tutorial

  • Issue #1325 - Exceptions thrown during parcel handling are not handled correctly

  • Issue #1324 - fixed bandwidth calculation

  • Issue #1323 - mmap() failed to allocate thread stack due to insufficient resources

  • Issue #1322 - HPX fails to build aa182cf

  • Issue #1321 - Limiting size of outgoing messages while coalescing parcels

  • Issue #1320 - passing a future with launch::deferred in remote function call causes hang

  • Issue #1319 - An exception when tries to specify number high priority threads with abp-priority

  • Issue #1318 - Unable to run program with abp-priority and numa-sensitivity enabled

  • Issue #1317 - N4071 Search/Search_n finished, minor changes

  • Issue #1316 - Add config option to make -Ihpx.run_hpx_main!=1 the default

  • Issue #1314 - Variadic support for async and apply

  • Issue #1313 - Adjust when_any/some to the latest proposed interfaces

  • Issue #1312 - Fixing #857: hpx::naming::locality leaks parcelport specific information into the public interface

  • Issue #1311 - Distributed get’er/set’er_values for distributed vector

  • Issue #1310 - Crashing in hpx::parcelset::policies::mpi::connection_handler::handle_messages() on SuperMIC

  • Issue #1308 - Unable to execute an application with –hpx:threads

  • Issue #1307 - merge_graph linking issue

  • Issue #1306 - First batch of variadic templates support

  • Issue #1305 - Create a compiler wrapper

  • Issue #1304 - Provide a compiler wrapper for hpx

  • Issue #1303 - Drop support for GCC44

  • Issue #1302 - Fixing #1297

  • Issue #1301 - Compilation error when tried to use boost range iterators with wait_all

  • Issue #1298 - Distributed vector

  • Issue #1297 - Unable to invoke component actions recursively

  • Issue #1294 - HDF5 build error

  • Issue #1275 - The parcelport implementation is non-optimal

  • Issue #1267 - Added classes and unit tests for local_file, orangefs_file and pxfs_file

  • Issue #1264 - Error “assertion ‘!m_fun’ failed” randomly occurs when using TCP

  • Issue #1254 - thread binding seems to not work properly

  • Issue #1220 - parallel::copy_if is broken

  • Issue #1217 - Find a better way of fixing the issue patched by #1216

  • Issue #1168 - Starting HPX on Cray machines using aprun isn’t working correctly

  • Issue #1085 - Replace startup and shutdown barriers with broadcasts

  • Issue #981 - With SLURM, –hpx:threads=8 should not be necessary

  • Issue #857 - hpx::naming::locality leaks parcelport specific information into the public interface

  • Issue #850 - “flush” not documented

  • Issue #763 - Create buildbot instance that uses std::bind as HPX_STD_BIND

  • Issue #680 - Convert parcel ports into a plugin system

  • Issue #582 - Make exception thrown from HPX threads available from hpx::init

  • Issue #504 - Refactor Dataflow LCO to work with futures

  • Issue #196 - Don’t store copies of the locality network metadata in the gva table