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 todays
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.
-
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.
Here is a list of the important tickets we closed for this release.
-
#1086 - Expose internal boost::shared_array to allow user management
of array lifetime
-
#1083 - Make shell examples copyable in docs
-
#1080 - /threads{locality#*/total}/count/cumulative broken
-
#1079 - Build problems on OS X
-
#1078 - Improve robustness of component loading
-
#1077 - Fix a missing enum definition for 'take' mode
-
#1076 - Merge Jb master
-
#1075 - Unknown CMake command "add_hpx_pseudo_target"
-
#1074 - Implement
apply_continue_callback
and apply_colocated_callback
-
#1073 - The new
apply_colocated
and async_colocated
functions lead to automatic registered functions
-
#1071 - Remove deferred_packaged_task
-
#1069 - serialize_buffer with allocator fails at destruction
-
#1068 - Coroutine include and forward declarations missing
-
#1067 - Add allocator support to util::serialize_buffer
-
#1066 - Allow for MPI_Init being called before HPX launches
-
#1065 - AGAS cache isn't used/populated on worker localities
-
#1064 - Reorder includes to ensure ws2 includes early
-
#1063 - Add
hpx::runtime::suspend
and hpx::runtime::resume
-
#1062 - Fix
async_continue
to propery handle return types
-
#1061 - Implement
async_colocated
and apply_colocated
-
#1060 - Implement minimal component migration
-
#1058 - Remove
HPX_UTIL_TUPLE
from code base
-
#1057 - Add performance counters for threading subsystem
-
#1055 - Thread allocation uses two memory pools
-
#1053 - Work stealing flawed
-
#1052 - Fix a number of warnings
-
#1049 - Fixes for TLS on OSX and more reliable test running
-
#1048 - Fixing after 588 hang
-
#1047 - Use port '0' for networking when using one locality
-
#1046 -
composable_guard
test is broken when having more than one thread
-
#1045 - Security missing headers
-
#1044 - Native TLS on FreeBSD via __thread
-
#1043 -
async
et.al.
compute the wrong result type
-
#1042 -
async
et.al.
implicitly unwrap reference_wrappers
-
#1041 - Remove redundant costly Kleene stars from regex searches
-
#1040 - CMake script regex match patterns has unnecessary kleenes
-
#1039 - Remove use of Boost.Move and replace with std::move and
real rvalue refs
-
#1038 - Bump minimal required Boost to 1.49.0
-
#1037 - Implicit unwrapping of futures in async broken
-
#1036 - Scheduler hangs when user code attempts to "block"
OS-threads
-
#1035 - Idle-rate counter always reports 100% idle rate
-
#1034 - Symbolic name registration causes application hangs
-
#1033 - Application options read in from an options file generate
an error message
-
#1032 -
hpx::id_type
local reference counting
is wrong
-
#1031 - Negative entry in reference count table
-
#1030 - Implement condition_variable
-
#1029 - Deadlock in thread scheduling subsystem
-
#1028 - HPX-thread cumulative count performance counters report
incorrect value
-
#1027 - Expose
hpx::thread_interrupted
error code as a separate exception type
-
#1026 - Exceptions thrown in asynchronous calls can be lost if the
value of the future is never queried
-
#1025 -
future::wait_for
/wait_until
do not remove callback
-
#1024 - Remove dependence to boost assert and create hpx assert
-
#1023 - Segfaults with tcmalloc
-
#1022 - prerequisites link in readme is broken
-
#1020 - HPX Deadlock on external synchronization
-
#1019 - Convert using
BOOST_ASSERT
to HPX_ASSERT
-
#1018 - compiling bug with gcc 4.8.1
-
#1017 - Possible crash in io_pool executor
-
#1016 - Crash at startup
-
#1014 - Implement Increment/Decrement Merging
-
#1013 - Add more logging channels to enable greater control over
logging granularity
-
#1012 -
--hpx:debug-hpx-log
and --hpx:debug-agas-log
lead to non-thread safe writes
-
#1011 - After installation, running applications from the build/staging
directory no longer works
-
#1010 - Mergable decrement requests are not being merged
-
#1009 -
--hpx:list-symbolic-names
crashes
-
#1007 - Components are not properly destroyed
-
#1006 - Segfault/hang in set_data
-
#1003 - Performance counter naming issue
-
#982 - Race condition during startup
-
#912 - OS X: component type not found in map
-
#663 - Create a buildbot slave based on Clang 3.2/OSX
-
#636 - Expose
this_locality::apply<act>(p1, p2);
for local execution
-
#197 - Add
--console=address
option for PBS runs
-
#175 - Asynchronous AGAS API