HPX V0.9.10 (Mar 24, 2015)¶
General changes¶
This is the 12th official release of HPX. It coincides with the 7th anniversary of the first commit to our source code repository. Since then, we have seen over 12300 commits amounting to more than 220000 lines of C++ code.
The major focus of this release was to improve the reliability of large scale runs. We believe to have achieved this goal as we now can reliably run HPX applications on up to ~24k cores. We have also shown that HPX can be used with success for symmetric runs (applications using both, host cores and Intel Xeon/Phi coprocessors). This is a huge step forward in terms of the usability of HPX. The main focus of this work involved isolating the causes of the segmentation faults at start up and shut down. Many of these issues were discovered to be the result of the suspension of threads which hold locks.
A very important improvement introduced with this release is the refactoring of the code representing our parcel-port implementation. Parcel- ports can now be implemented by 3rd parties as independent plugins which are dynamically loaded at runtime (static linking of parcel-ports is also supported). This refactoring also includes a massive improvement of the performance of our existing parcel-ports. We were able to significantly reduce the networking latencies and to improve the available networking bandwidth. Please note that in this release we disabled the ibverbs and ipc parcel ports as those have not been ported to the new plugin system yet (see Issue #839).
Another corner stone of this release is our work towards a complete implementation of __cpp11_n4104__ (Working Draft, Technical Specification for C++ Extensions for Parallelism). This document defines a set of parallel algorithms to be added to the C++ standard library. We now have implemented about 75% of all specified parallel algorithms (see [link hpx.manual.parallel.parallel_algorithms Parallel Algorithms] for more details). We also implemented some extensions to __cpp11_n4104__ allowing to invoke all of the algorithms asynchronously.
This release adds a first implementation of hpx::vector
which is a
distributed data structure closely aligned to the functionality of
std::vector
. The difference is that hpx::vector
stores the data in
partitions where the partitions can be distributed over different localities. We
started to work on allowing to use the parallel algorithms with hpx::vector
.
At this point we have implemented only a few of the parallel algorithms to
support distributed data structures (like hpx::vector
) for testing purposes
(see Issue #1338 for a documentation of our progress).
Breaking changes¶
With this release we put a lot of effort into changing the code base to be more compatible to C++11. These changes have caused the following issues for backward compatibility:
Move to Variadics- All of the API now uses variadic templates. However, this change required to modify the argument sequence for some of the exiting API functions (
hpx::async_continue
,hpx::apply_continue
,hpx::when_each
,hpx::wait_each
, synchronous invocation of actions).Changes to Macros- We also removed the macros
HPX_STD_FUNCTION
andHPX_STD_TUPLE
. This shouldn’t affect any user code as we replacedHPX_STD_FUNCTION
withhpx::util::function_nonser
which was the default expansion used for this macro. All HPX API functions which expect ahpx::util::function_nonser
(or ahpx::util::unique_function_nonser
) can now be transparently called with a compatiblestd::function
instead. Similarly,HPX_STD_TUPLE
was replaced by its default expansion as well:hpx::util::tuple
.Changes to
hpx::unique_future
-hpx::unique_future
, which was deprecated in the previous release forhpx::future
is now completely removed from HPX. This completes the transition to a completely standards conforming implementation ofhpx::future
.Changes to Supported Compilers. Finally, in order to utilize more C++11 semantics, we have officially dropped support for GCC 4.4 and MSVC 2012. Please see our Prerequisites page for more details.
Bug fixes (closed tickets)¶
Here is a list of the important tickets we closed for this release.
Issue #1402 - Internal shared_future serialization copies
Issue #1399 - Build takes unusually long time…
Issue #1398 - Tests using the scan partitioner are broken on at least gcc 4.7 and intel compiler
Issue #1397 - Completely remove hpx::unique_future
Issue #1396 - Parallel scan algorithms with different initial values
Issue #1395 - Race Condition - 1d_stencil_8 - SuperMIC
Issue #1394 - “suspending thread while at least one lock is being held” - 1d_stencil_8 - SuperMIC
Issue #1393 - SEGFAULT in 1d_stencil_8 on SuperMIC
Issue #1392 - Fixing #1168
Issue #1391 - Parallel Algorithms for scan partitioner for small number of elements
Issue #1387 - Failure with more than 4 localities
Issue #1386 - Dispatching unhandled exceptions to outer user code
Issue #1385 - Adding Copy algorithms, fixing
parallel::copy_if
Issue #1384 - Fixing 1325
Issue #1383 - Fixed #504: Refactor Dataflow LCO to work with futures, this removes the dataflow component as it is obsolete
Issue #1382 -
is_sorted
,is_sorted_until
andis_partitioned
algorithmsIssue #1381 - fix for CMake versions prior to 3.1
Issue #1380 - resolved warning in CMake 3.1 and newer
Issue #1379 - Compilation error with papi
Issue #1378 - Towards safer migration
Issue #1377 - HPXConfig.cmake should include
TCMALLOC_LIBRARY
andTCMALLOC_INCLUDE_DIR
Issue #1376 - Warning on uninitialized member
Issue #1375 - Fixing 1163
Issue #1374 - Fixing the MSVC 12 release builder
Issue #1373 - Modifying parallel search algorithm for zero length searches
Issue #1372 - Modifying parallel search algorithm for zero length searches
Issue #1371 - Avoid holding a lock during agas::incref while doing a credit split
Issue #1370 -
--hpx:bind
throws unexpected errorIssue #1369 - Getting rid of (void) in loops
Issue #1368 - Variadic templates support for tuple
Issue #1367 - One last batch of variadic templates support
Issue #1366 - Fixing symbolic namespace hang
Issue #1365 - More held locks
Issue #1364 - Add counters 1363
Issue #1363 - Add thread overhead counters
Issue #1362 - Std config removal
Issue #1361 - Parcelport plugins
Issue #1360 - Detuplify transfer_action
Issue #1359 - Removed obsolete checks
Issue #1358 - Fixing 1352
Issue #1357 - Variadic templates support for runtime_support and components
Issue #1356 - fixed coordinate test for intel13
Issue #1355 - fixed coordinate.hpp
Issue #1354 - Lexicographical Compare completed
Issue #1353 - HPX should set
Boost_ADDITIONAL_VERSIONS
flagsIssue #1352 - Error: Cannot find action ‘’ in type registry: HPX(bad_action_code)
Issue #1351 - Variadic templates support for appliers
Issue #1350 - Actions simplification
Issue #1349 - Variadic when and wait functions
Issue #1348 - Added hpx_init header to test files
Issue #1347 - Another batch of variadic templates support
Issue #1346 - Segmented copy
Issue #1345 - Attempting to fix hangs during shutdown
Issue #1344 - Std config removal
Issue #1343 - Removing various distribution policies for hpx::vector
Issue #1342 - Inclusive scan
Issue #1341 - Exclusive scan
Issue #1340 - Adding
parallel::count
for distributed data structures, adding testsIssue #1339 - Update argument order for transform_reduce
Issue #1337 - Fix dataflow to handle properly ranges of futures
Issue #1336 - dataflow needs to hold onto futures passed to it
Issue #1335 - Fails to compile with msvc14
Issue #1334 - Examples build problem
Issue #1333 - Distributed transform reduce
Issue #1332 - Variadic templates support for actions
Issue #1331 - Some ambiguous calls of map::erase have been prevented by adding additional check in locality constructor.
Issue #1330 - Defining Plain Actions does not work as described in the documentation
Issue #1329 - Distributed vector cleanup
Issue #1328 - Sync docs and comments with code in hello_world example
Issue #1327 - Typos in docs
Issue #1326 - Documentation and code diverged in Fibonacci tutorial
Issue #1325 - Exceptions thrown during parcel handling are not handled correctly
Issue #1324 - fixed bandwidth calculation
Issue #1323 - mmap() failed to allocate thread stack due to insufficient resources
Issue #1322 - HPX fails to build aa182cf
Issue #1321 - Limiting size of outgoing messages while coalescing parcels
Issue #1320 - passing a future with launch::deferred in remote function call causes hang
Issue #1319 - An exception when tries to specify number high priority threads with abp-priority
Issue #1318 - Unable to run program with abp-priority and numa-sensitivity enabled
Issue #1317 - N4071 Search/Search_n finished, minor changes
Issue #1316 - Add config option to make -Ihpx.run_hpx_main!=1 the default
Issue #1314 - Variadic support for async and apply
Issue #1313 - Adjust when_any/some to the latest proposed interfaces
Issue #1312 - Fixing #857: hpx::naming::locality leaks parcelport specific information into the public interface
Issue #1311 - Distributed get’er/set’er_values for distributed vector
Issue #1310 - Crashing in hpx::parcelset::policies::mpi::connection_handler::handle_messages() on SuperMIC
Issue #1308 - Unable to execute an application with –hpx:threads
Issue #1307 - merge_graph linking issue
Issue #1306 - First batch of variadic templates support
Issue #1305 - Create a compiler wrapper
Issue #1304 - Provide a compiler wrapper for hpx
Issue #1303 - Drop support for GCC44
Issue #1302 - Fixing #1297
Issue #1301 - Compilation error when tried to use boost range iterators with wait_all
Issue #1298 - Distributed vector
Issue #1297 - Unable to invoke component actions recursively
Issue #1294 - HDF5 build error
Issue #1275 - The parcelport implementation is non-optimal
Issue #1267 - Added classes and unit tests for local_file, orangefs_file and pxfs_file
Issue #1264 - Error “assertion ‘!m_fun’ failed” randomly occurs when using TCP
Issue #1254 - thread binding seems to not work properly
Issue #1220 - parallel::copy_if is broken
Issue #1217 - Find a better way of fixing the issue patched by #1216
Issue #1168 - Starting HPX on Cray machines using aprun isn’t working correctly
Issue #1085 - Replace startup and shutdown barriers with broadcasts
Issue #981 - With SLURM, –hpx:threads=8 should not be necessary
Issue #857 - hpx::naming::locality leaks parcelport specific information into the public interface
Issue #850 - “flush” not documented
Issue #763 - Create buildbot instance that uses std::bind as HPX_STD_BIND
Issue #680 - Convert parcel ports into a plugin system
Issue #582 - Make exception thrown from HPX threads available from
hpx::init
Issue #504 - Refactor Dataflow LCO to work with futures
Issue #196 - Don’t store copies of the locality network metadata in the gva table