HPX V0.8.0 (Mar 23, 2012)¶
We have had roughly 1000 commits since the last release and we have closed approximately 70 tickets (bugs, feature requests, etc.).
General changes¶
Improved PBS support, allowing for arbitrary naming schemes of node-hostnames.
Finished verification of the reference counting framework.
Implemented decrement merging logic to optimize the distributed reference counting system.
Restructured the LCO framework. Renamed
hpx::lcos::eager_future<>
andhpx::lcos::lazy_future<>
intohpx::lcos::packaged_task
andhpx::lcos::deferred_packaged_task
. Splithpx::lcos::promise
intohpx::lcos::packaged_task
andhpx::lcos::future
. Added ‘local’ futures (in namespacehpx::lcos::local
).Improved the general performance of local and remote action invocations. This (under certain circumstances) drastically reduces the number of copies created for each of the parameters and return values.
Reworked the performance counter framework. Performance counters are now created only when needed, which reduces the overall resource requirements. The new framework allows for much more flexible creation and management of performance counters. The new sine example application demonstrates some of the capabilities of the new infrastructure.
Added a buildbot-based continuous build system which gives instant, automated feedback on each commit to SVN.
Added more automated tests to verify proper functioning of HPX.
Started to create documentation for HPX and its API.
Added documentation toolchain to the build system.
Added dataflow LCO.
Changed default HPX command line options to have
hpx:
prefix. For instance, the former option--threads
is now--hpx:threads
. This has been done to make ambiguities with possible application specific command line options as unlikely as possible. See the section HPX Command Line Options for a full list of available options.Added the possibility to define command line aliases. The former short (one-letter) command line options have been predefined as aliases for backwards compatibility. See the section HPX Command Line Options for a detailed description of command line option aliasing.
Network connections are now cached based on the connected host. The number of simultaneous connections to a particular host is now limited. Parcels are buffered and bundled if all connections are in use.
Added more refined thread affinity control. This is based on the external library Portable Hardware Locality (HWLOC).
Improved support for Windows builds with CMake.
Added support for components to register their own command line options.
Added the possibility to register custom startup/shutdown functions for any component. These functions are guaranteed to be executed by an HPX thread.
Added two new experimental thread schedulers: hierarchy_scheduler and periodic_priority_scheduler. These can be activated by using the command line options
--hpx:queuing
=hierarchy
or--hpx:queuing
=periodic
.
Example applications¶
Graph500 performance benchmark (thanks to Matthew Anderson for contributing this application).
GTC (Gyrokinetic Toroidal Code): a skeleton for particle in cell type codes.
Random Memory Access: an example demonstrating random memory accesses in a large array
ShenEOS example, demonstrating partitioning of large read-only data structures and exposing an interpolation API.
Sine performance counter demo.
Accumulator examples demonstrating how to write and use HPX components.
Quickstart examples (like hello_world, fibonacci, quicksort, factorial, etc.) demonstrating simple HPX concepts which introduce some of the concepts in HPX.
Load balancing and work stealing demos.
API changes¶
Moved all local LCOs into a separate namespace
hpx::lcos::local
(for instance,hpx::lcos::local_mutex
is nowhpx::lcos::local::mutex
).Replaced
hpx::actions::function
withhpx::util::function
. Cleaned up related code.Removed
hpx::traits::handle_gid
and moved handling of global reference counts into the corresponding serialization code.Changed terminology:
prefix
is now calledlocality_id
, renamed the corresponding API functions (such ashpx::get_prefix
, which is now calledhpx::get_locality_id
).Adding
hpx::find_remote_localities
, andhpx::get_num_localities
.Changed performance counter naming scheme to make it more bash friendly. The new performance counter naming scheme is now
/object{parentname#parentindex/instance#index}/counter#parameters
Added
hpx::get_worker_thread_num
replacinghpx::threadmanager_base::get_thread_num
.Renamed
hpx::get_num_os_threads
tohpx::get_os_threads_count
.Added
hpx::threads::get_thread_count
.Restructured the Futures sub-system, renaming types in accordance with the terminology used by the C++11 ISO standard.
Bug fixes (closed tickets)¶
Here is a list of the important tickets we closed for this release:
Issue #31 - Specialize handle_gid<> for examples and tests
Issue #72 - Fix AGAS reference counting
Issue #104 - heartbeat throws an exception when decrefing the performance counter it’s watching
Issue #111 - throttle causes an exception on the target application
Issue #142 - One failed component loading causes an unrelated component to fail
Issue #165 - Remote exception propagation bug in AGAS reference counting test
Issue #186 - Test credit exhaustion/splitting (e.g. prepare_gid and symbol NS)
Issue #188 - Implement remaining AGAS reference counting test cases
Issue #258 - No type checking of GIDs in stubs classes
Issue #271 - Seg fault/shared pointer assertion in distributed code
Issue #281 - CMake options need descriptive text
Issue #283 - AGAS caching broken (gva_cache needs to be rewritten with ICL)
Issue #285 - HPX_INSTALL root directory not the same as CMAKE_INSTALL_PREFIX
Issue #286 - New segfault in dataflow applications
Issue #289 - Exceptions should only be logged if not handled
Issue #290 - c++11 tests failure
Issue #293 - Build target for component libraries
Issue #296 - Compilation error with Boost V1.49rc1
Issue #298 - Illegal instructions on termination
Issue #299 - gravity aborts with multiple threads
Issue #301 - Build error with Boost trunk
Issue #303 - Logging assertion failure in distributed runs
Issue #304 - Exception ‘what’ strings are lost when exceptions from decode_parcel are reported
Issue #306 - Performance counter user interface issues
Issue #307 - Logging exception in distributed runs
Issue #308 - Logging deadlocks in distributed
Issue #309 - Reference counting test failures and exceptions
Issue #311 - Merge AGAS remote_interface with the runtime_support object
Issue #314 - Object tracking for id_types
Issue #315 - Remove handle_gid and handle credit splitting in id_type serialization
Issue #320 - applier::get_locality_id() should return an error value (or throw an exception)
Issue #321 - Optimization for id_types which are never split should be restored
Issue #322 - Command line processing ignored with Boost 1.47.0
Issue #323 - Credit exhaustion causes object to stay alive
Issue #324 - Duplicate exception messages
Issue #326 - Integrate Quickbook with CMake
Issue #329 - –help and –version should still work
Issue #330 - Create pkg-config files
Issue #337 - Improve usability of performance counter timestamps
Issue #338 - Non-std exceptions deriving from std::exceptions in tfunc may be sliced
Issue #339 - Decrease the number of send_pending_parcels threads
Issue #343 - Dynamically setting the stack size doesn’t work
Issue #351 - ‘make install’ does not update documents
Issue #353 - Disable FIXMEs in the docs by default; add a doc developer CMake option to enable FIXMEs
Issue #355 - ‘make’ doesn’t do anything after correct configuration
Issue #356 - Don’t use
hpx::util::static_
in topology codeIssue #359 - Infinite recursion in hpx::tuple serialization
Issue #361 - Add compile time option to disable logging completely
Issue #364 - Installation seriously broken in r7443