HPX V0.9.8 (Mar 24, 2014)#

We have had over 800 commits since the last release and we have closed over 65 tickets (bugs, feature requests, etc.).

With the changes below, HPX is once again leading the charge of a whole new era of computation. By intrinsically breaking down and synchronizing the work to be done, HPX insures that application developers will no longer have to fret about where a segment of code executes. That allows coders to focus their time and energy to understanding the data dependencies of their algorithms and thereby the core obstacles to an efficient code. Here are some of the advantages of using HPX:

  • HPX is solidly rooted in a sophisticated theoretical execution model – ParalleX

  • HPX exposes an API fully conforming to the C++11 and the draft C++14 standards, extended and applied to distributed computing. Everything programmers know about the concurrency primitives of the standard C++ library is still valid in the context of HPX.

  • It provides a competitive, high performance implementation of modern, future-proof ideas which gives an smooth migration path from today’s mainstream techniques

  • There is no need for the programmer to worry about lower level parallelization paradigms like threads or message passing; no need to understand pthreads, MPI, OpenMP, or Windows threads, etc.

  • There is no need to think about different types of parallelism such as tasks, pipelines, or fork-join, task or data parallelism.

  • The same source of your program compiles and runs on Linux, BlueGene/Q, Mac OS X, Windows, and Android.

  • The same code runs on shared memory multi-core systems and supercomputers, on handheld devices and Intel® Xeon Phi™ accelerators, or a heterogeneous mix of those.

General changes#

  • A major API breaking change for this release was introduced by implementing hpx::future and hpx::shared_future fully in conformance with the C++11 Standard. While hpx::shared_future is new and will not create any compatibility problems, we revised the interface and implementation of the existing hpx::future. For more details please see the mailing list archive. To avoid any incompatibilities for existing code we named the type which implements the std::future interface as hpx::unique_future. For the next release this will be renamed to hpx::future, making it full conforming to C++11 Standard.

  • A large part of the code base of HPX has been refactored and partially re-implemented. The main changes were related to

    • The threading subsystem: these changes significantly reduce the amount of overheads caused by the schedulers, improve the modularity of the code base, and extend the variety of available scheduling algorithms.

    • The parcel subsystem: these changes improve the performance of the HPX networking layer, modularize the structure of the parcelports, and simplify the creation of new parcelports for other underlying networking libraries.

    • The API subsystem: these changes improved the conformance of the API to C++11 Standard, extend and unify the available API functionality, and decrease the overheads created by various elements of the API.

    • The robustness of the component loading subsystem has been improved significantly, allowing to more portably and more reliably register the components needed by an application as startup. This additionally speeds up general application initialization.

  • We added new API functionality like hpx::migrate and hpx::copy_component which are the basic building blocks necessary for implementing higher level abstractions for system-wide load balancing, runtime-adaptive resource management, and object-oriented checkpointing and state-management.

  • We removed the use of C++11 move emulation (using Boost.Move), replacing it with C++11 rvalue references. This is the first step towards using more and more native C++11 facilities which we plan to introduce in the future.

  • We improved the reference counting scheme used by HPX which helps managing distributed objects and memory. This improves the overall stability of HPX and further simplifies writing real world applications.

  • The minimal Boost version required to use HPX is now V1.49.0.

  • This release coincides with the first release of HPXPI (V0.1.0), the first implementation of the XPI specification.

Bug fixes (closed tickets)#

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

  • Issue #1086 - Expose internal boost::shared_array to allow user management of array lifetime

  • Issue #1083 - Make shell examples copyable in docs

  • Issue #1080 - /threads{locality#*/total}/count/cumulative broken

  • Issue #1079 - Build problems on OS X

  • Issue #1078 - Improve robustness of component loading

  • Issue #1077 - Fix a missing enum definition for ‘take’ mode

  • Issue #1076 - Merge Jb master

  • Issue #1075 - Unknown CMake command “add_hpx_pseudo_target”

  • Issue #1074 - Implement apply_continue_callback and apply_colocated_callback

  • Issue #1073 - The new apply_colocated and async_colocated functions lead to automatic registered functions

  • Issue #1071 - Remove deferred_packaged_task

  • Issue #1069 - serialize_buffer with allocator fails at destruction

  • Issue #1068 - Coroutine include and forward declarations missing

  • Issue #1067 - Add allocator support to util::serialize_buffer

  • Issue #1066 - Allow for MPI_Init being called before HPX launches

  • Issue #1065 - AGAS cache isn’t used/populated on worker localities

  • Issue #1064 - Reorder includes to ensure ws2 includes early

  • Issue #1063 - Add hpx::runtime::suspend and hpx::runtime::resume

  • Issue #1062 - Fix async_continue to properly handle return types

  • Issue #1061 - Implement async_colocated and apply_colocated

  • Issue #1060 - Implement minimal component migration

  • Issue #1058 - Remove HPX_UTIL_TUPLE from code base

  • Issue #1057 - Add performance counters for threading subsystem

  • Issue #1055 - Thread allocation uses two memory pools

  • Issue #1053 - Work stealing flawed

  • Issue #1052 - Fix a number of warnings

  • Issue #1049 - Fixes for TLS on OSX and more reliable test running

  • Issue #1048 - Fixing after 588 hang

  • Issue #1047 - Use port ‘0’ for networking when using one locality

  • Issue #1046 - composable_guard test is broken when having more than one thread

  • Issue #1045 - Security missing headers

  • Issue #1044 - Native TLS on FreeBSD via __thread

  • Issue #1043 - async et.al. compute the wrong result type

  • Issue #1042 - async et.al. implicitly unwrap reference_wrappers

  • Issue #1041 - Remove redundant costly Kleene stars from regex searches

  • Issue #1040 - CMake script regex match patterns has unnecessary kleenes

  • Issue #1039 - Remove use of Boost.Move and replace with std::move and real rvalue refs

  • Issue #1038 - Bump minimal required Boost to 1.49.0

  • Issue #1037 - Implicit unwrapping of futures in async broken

  • Issue #1036 - Scheduler hangs when user code attempts to “block” OS-threads

  • Issue #1035 - Idle-rate counter always reports 100% idle rate

  • Issue #1034 - Symbolic name registration causes application hangs

  • Issue #1033 - Application options read in from an options file generate an error message

  • Issue #1032 - hpx::id_type local reference counting is wrong

  • Issue #1031 - Negative entry in reference count table

  • Issue #1030 - Implement condition_variable

  • Issue #1029 - Deadlock in thread scheduling subsystem

  • Issue #1028 - HPX-thread cumulative count performance counters report incorrect value

  • Issue #1027 - Expose hpx::thread_interrupted error code as a separate exception type

  • Issue #1026 - Exceptions thrown in asynchronous calls can be lost if the value of the future is never queried

  • Issue #1025 - future::wait_for/wait_until do not remove callback

  • Issue #1024 - Remove dependence to boost assert and create hpx assert

  • Issue #1023 - Segfaults with tcmalloc

  • Issue #1022 - prerequisites link in readme is broken

  • Issue #1020 - HPX Deadlock on external synchronization

  • Issue #1019 - Convert using BOOST_ASSERT to HPX_ASSERT

  • Issue #1018 - compiling bug with gcc 4.8.1

  • Issue #1017 - Possible crash in io_pool executor

  • Issue #1016 - Crash at startup

  • Issue #1014 - Implement Increment/Decrement Merging

  • Issue #1013 - Add more logging channels to enable greater control over logging granularity

  • Issue #1012 - --hpx:debug-hpx-log and --hpx:debug-agas-log lead to non-thread safe writes

  • Issue #1011 - After installation, running applications from the build/staging directory no longer works

  • Issue #1010 - Mergeable decrement requests are not being merged

  • Issue #1009 - --hpx:list-symbolic-names crashes

  • Issue #1007 - Components are not properly destroyed

  • Issue #1006 - Segfault/hang in set_data

  • Issue #1003 - Performance counter naming issue

  • Issue #982 - Race condition during startup

  • Issue #912 - OS X: component type not found in map

  • Issue #663 - Create a buildbot slave based on Clang 3.2/OSX

  • Issue #636 - Expose this_locality::apply<act>(p1, p2); for local execution

  • Issue #197 - Add --console=address option for PBS runs

  • Issue #175 - Asynchronous AGAS API