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
andhpx::shared_future
fully in conformance with the C++11 Standard. Whilehpx::shared_future
is new and will not create any compatibility problems, we revised the interface and implementation of the existinghpx::future
. For more details please see the mailing list archive. To avoid any incompatibilities for existing code we named the type which implements thestd::future
interface ashpx::unique_future
. For the next release this will be renamed tohpx::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
andhpx::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
andapply_colocated_callback
Issue #1073 - The new
apply_colocated
andasync_colocated
functions lead to automatic registered functionsIssue #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
andhpx::runtime::resume
Issue #1062 - Fix
async_continue
to properly handle return typesIssue #1061 - Implement
async_colocated
andapply_colocated
Issue #1060 - Implement minimal component migration
Issue #1058 - Remove
HPX_UTIL_TUPLE
from code baseIssue #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 threadIssue #1045 - Security missing headers
Issue #1044 - Native TLS on FreeBSD via __thread
Issue #1043 -
async
et.al. compute the wrong result typeIssue #1042 -
async
et.al. implicitly unwrap reference_wrappersIssue #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 wrongIssue #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 typeIssue #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 callbackIssue #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
toHPX_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 writesIssue #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
crashesIssue #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 executionIssue #197 - Add
--console=address
option for PBS runsIssue #175 - Asynchronous AGAS API