HPX V0.9.5 (Jan 16, 2013)#

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

General changes#

This release is continuing along the lines of code and API consolidation, and overall usability inprovements. We dedicated much attention to performance and we were able to significantly improve the threading and networking subsystems.

We successfully ported HPX to the Android platform. HPX applications now not only can run on mobile devices, but we support heterogeneous applications running across architecture boundaries. At the Supercomputing Conference 2012 we demonstrated connecting Android tablets to simulations running on a Linux cluster. The Android tablet was used to query performance counters from the Linux simulation and to steer its parameters.

We successfully ported HPX to Mac OSX (using the Clang compiler). Thanks to Pyry Jahkola for contributing the corresponding patches. Please see the section macos_installation for more details.

We made a special effort to make HPX usable in highly concurrent use cases. Many of the HPX API functions which possibly take longer than 100 microseconds to execute now can be invoked asynchronously. We added uniform support for composing futures which simplifies to write asynchronous code. HPX actions (function objects encapsulating possibly concurrent remote function invocations) are now well integrated with all other API facilities such like hpx::bind.

All of the API has been aligned as much as possible with established paradigms. HPX now mirrors many of the facilities as defined in the C++11 Standard, such as hpx::thread, hpx::function, hpx::future, etc.

A lot of work has been put into improving the documentation. Many of the API functions are documented now, concepts are explained in detail, and examples are better described than before. The new documentation index enables finding information with lesser effort.

This is the first release of HPX we perform after the move to Github This step has enabled a wider participation from the community and further encourages us in our decision to release HPX as a true open source library (HPX is licensed under the very liberal Boost Software License).

Bug fixes (closed tickets)#

Here is a list of the important tickets we closed for this release. This is by far the longest list of newly implemented features and fixed issues for any of HPX’ releases so far.

  • Issue #666 - Segfault on calling hpx::finalize twice

  • Issue #665 - Adding declaration num_of_cores

  • Issue #662 - pkgconfig is building wrong

  • Issue #660 - Need uninterrupt function

  • Issue #659 - Move our logging library into a different namespace

  • Issue #658 - Dynamic performance counter types are broken

  • Issue #657 - HPX v0.9.5 (RC1) hello_world example segfaulting

  • Issue #656 - Define the affinity of parcel-pool, io-pool, and timer-pool threads

  • Issue #654 - Integrate the Boost auto_index tool with documentation

  • Issue #653 - Make HPX build on OS X + Clang + libc++

  • Issue #651 - Add fine-grained control for thread pinning

  • Issue #650 - Command line no error message when using -hpx:(anything)

  • Issue #645 - Command line aliases don’t work in [teletype]``@file``[c++]

  • Issue #644 - Terminated threads are not always properly cleaned up

  • Issue #640 - future_data<T>::set_on_completed_ used without locks

  • Issue #638 - hpx build with intel compilers fails on linux

  • Issue #637 - –copy-dt-needed-entries breaks with gold

  • Issue #635 - Boost V1.53 will add Boost.Lockfree and Boost.Atomic

  • Issue #633 - Re-add examples to final 0.9.5 release

  • Issue #632 - Example thread_aware_timer is broken

  • Issue #631 - FFT application throws error in parcellayer

  • Issue #630 - Event synchronization example is broken

  • Issue #629 - Waiting on futures hangs

  • Issue #628 - Add an HPX_ALWAYS_ASSERT macro

  • Issue #625 - Port coroutines context switch benchmark

  • Issue #621 - New INI section for stack sizes

  • Issue #618 - pkg_config support does not work with a HPX debug build

  • Issue #617 - hpx/external/logging/boost/logging/detail/cache_before_init.hpp:139:67: error: ‘get_thread_id’ was not declared in this scope

  • Issue #616 - Change wait_xxx not to use locking

  • Issue #615 - Revert visibility ‘fix’ (fb0b6b8245dad1127b0c25ebafd9386b3945cca9)

  • Issue #614 - Fix Dataflow linker error

  • Issue #613 - find_here should throw an exception on failure

  • Issue #612 - Thread phase doesn’t show up in debug mode

  • Issue #611 - Make stack guard pages configurable at runtime (initialization time)

  • Issue #610 - Co-Locate Components

  • Issue #609 - future_overhead

  • Issue #608 - --hpx:list-counter-infos problem

  • Issue #607 - Update Boost.Context based backend for coroutines

  • Issue #606 - 1d_wave_equation is not working

  • Issue #605 - Any C++ function that has serializable arguments and a serializable return type should be remotable

  • Issue #604 - Connecting localities isn’t working anymore

  • Issue #603 - Do not verify any ini entries read from a file

  • Issue #602 - Rename argument_size to type_size/ added implementation to get parcel size

  • Issue #599 - Enable locality specific command line options

  • Issue #598 - Need an API that accesses the performance counter reporting the system uptime

  • Issue #597 - compiling on ranger

  • Issue #595 - I need a place to store data in a thread self pointer

  • Issue #594 - 32/64 interoperability

  • Issue #593 - Warn if logging is disabled at compile time but requested at runtime

  • Issue #592 - Add optional argument value to --hpx:list-counters and --hpx:list-counter-infos

  • Issue #591 - Allow for wildcards in performance counter names specified with --hpx:print-counter

  • Issue #590 - Local promise semantic differences

  • Issue #589 - Create API to query performance counter names

  • Issue #587 - Add get_num_localities and get_num_threads to AGAS API

  • Issue #586 - Adjust local AGAS cache size based on number of localities

  • Issue #585 - Error while using counters in HPX

  • Issue #584 - counting argument size of actions, initial pass.

  • Issue #581 - Remove RemoteResult template parameter for future<>

  • Issue #580 - Add possibility to hook into actions

  • Issue #578 - Use angle brackets in HPX error dumps

  • Issue #576 - Exception incorrectly thrown when --help is used

  • Issue #575 - HPX(bad_component_type) with gcc 4.7.2 and boost 1.51

  • Issue #574 - --hpx:connect command line parameter not working correctly

  • Issue #571 - hpx::wait() (callback version) should pass the future to the callback function

  • Issue #570 - hpx::wait should operate on boost::arrays and std::lists

  • Issue #569 - Add a logging sink for Android

  • Issue #568 - 2-argument version of HPX_DEFINE_COMPONENT_ACTION

  • Issue #567 - Connecting to a running HPX application works only once

  • Issue #565 - HPX doesn’t shutdown properly

  • Issue #564 - Partial preprocessing of new component creation interface

  • Issue #563 - Add hpx::start/hpx::stop to avoid blocking main thread

  • Issue #562 - All command line arguments swallowed by hpx

  • Issue #561 - Boost.Tuple is not move aware

  • Issue #558 - boost::shared_ptr<> style semantics/syntax for client classes

  • Issue #556 - Creation of partially preprocessed headers should be enabled for Boost newer than V1.50

  • Issue #555 - BOOST_FORCEINLINE does not name a type

  • Issue #554 - Possible race condition in thread get_id()

  • Issue #552 - Move enable client_base

  • Issue #550 - Add stack size category ‘huge’

  • Issue #549 - ShenEOS run seg-faults on single or distributed runs

  • Issue #545 - AUTOGLOB broken for add_hpx_component

  • Issue #542 - FindHPX_HDF5 still searches multiple times

  • Issue #541 - Quotes around application name in hpx::init

  • Issue #539 - Race conditition occurring with new lightweight threads

  • Issue #535 - hpx_run_tests.py exits with no error code when tests are missing

  • Issue #530 - Thread description(<unknown>) in logs

  • Issue #523 - Make thread objects more lightweight

  • Issue #521 - hpx::error_code is not usable for lightweight error handling

  • Issue #520 - Add full user environment to HPX logs

  • Issue #519 - Build succeeds, running fails

  • Issue #517 - Add a guard page to linux coroutine stacks

  • Issue #516 - hpx::thread::detach suspends while holding locks, leads to hang in debug

  • Issue #514 - Preprocessed headers for <hpx/apply.hpp> don’t compile

  • Issue #513 - Buildbot configuration problem

  • Issue #512 - Implement action based stack size customization

  • Issue #511 - Move action priority into a separate type trait

  • Issue #510 - trunk broken

  • Issue #507 - no matching function for call to boost::scoped_ptr<hpx::threads::topology>::scoped_ptr(hpx::threads::linux_topology*)

  • Issue #505 - undefined_symbol regression test currently failing

  • Issue #502 - Adding OpenCL and OCLM support to HPX for Windows and Linux

  • Issue #501 - find_package(HPX) sets cmake output variables

  • Issue #500 - wait_any/wait_all are badly named

  • Issue #499 - Add support for disabling pbs support in pbs runs

  • Issue #498 - Error during no-cache runs

  • Issue #496 - Add partial preprocessing support to cmake

  • Issue #495 - Support HPX modules exporting startup/shutdown functions only

  • Issue #494 - Allow modules to specify when to run startup/shutdown functions

  • Issue #493 - Avoid constructing a string in make_success_code

  • Issue #492 - Performance counter creation is no longer synchronized at startup

  • Issue #491 - Performance counter creation is no longer synchronized at startup

  • Issue #490 - Sheneos on_completed_bulk seg fault in distributed

  • Issue #489 - compiling issue with g++44

  • Issue #488 - Adding OpenCL and OCLM support to HPX for the MSVC platform

  • Issue #487 - FindHPX.cmake problems

  • Issue #485 - Change distributing_factory and binpacking_factory to use bulk creation

  • Issue #484 - Change HPX_DONT_USE_PREPROCESSED_FILES to HPX_USE_PREPROCESSED_FILES

  • Issue #483 - Memory counter for Windows

  • Issue #479 - strange errors appear when requesting performance counters on multiple nodes

  • Issue #477 - Create (global) timer for multi-threaded measurements

  • Issue #472 - Add partial preprocessing using Wave

  • Issue #471 - Segfault stack traces don’t show up in release

  • Issue #468 - External projects need to link with internal components

  • Issue #462 - Startup/shutdown functions are called more than once

  • Issue #458 - Consolidate hpx::util::high_resolution_timer and hpx::util::high_resolution_clock

  • Issue #457 - index out of bounds in allgather_and_gate on 4 cores or more

  • Issue #448 - Make HPX compile with clang

  • Issue #447 - ‘make tests’ should execute tests on local installation

  • Issue #446 - Remove SVN-related code from the codebase

  • Issue #444 - race condition in smp

  • Issue #441 - Patched Boost.Serialization headers should only be installed if needed

  • Issue #439 - Components using HPX_REGISTER_STARTUP_MODULE fail to compile with MSVC

  • Issue #436 - Verify that no locks are being held while threads are suspended

  • Issue #435 - Installing HPX should not clobber existing Boost installation

  • Issue #434 - Logging external component failed (Boost 1.50)

  • Issue #433 - Runtime crash when building all examples

  • Issue #432 - Dataflow hangs on 512 cores/64 nodes

  • Issue #430 - Problem with distributing factory

  • Issue #424 - File paths referring to XSL-files need to be properly escaped

  • Issue #417 - Make dataflow LCOs work out of the box by using partial preprocessing

  • Issue #413 - hpx_svnversion.py fails on Windows

  • Issue #412 - Make hpx::error_code equivalent to hpx::exception

  • Issue #398 - HPX clobbers out-of-tree application specific CMake variables (specifically CMAKE_BUILD_TYPE)

  • Issue #394 - Remove code generating random port numbers for network

  • Issue #378 - ShenEOS scaling issues

  • Issue #354 - Create a coroutines wrapper for Boost.Context

  • Issue #349 - Commandline option --localities=N/-lN should be necessary only on AGAS locality

  • Issue #334 - Add auto_index support to cmake based documentation toolchain

  • Issue #318 - Network benchmarks

  • Issue #317 - Implement network performance counters

  • Issue #310 - Duplicate logging entries

  • Issue #230 - Add compile time option to disable thread debugging info

  • Issue #171 - Add an INI option to turn off deadlock detection independently of logging

  • Issue #170 - OSHL internal counters are incorrect

  • Issue #103 - Better diagnostics for multiple component/action registerations under the same name

  • Issue #48 - Support for Darwin (Xcode + Clang)

  • Issue #21 - Build fails with GCC 4.6