From 5730492f4eca9a84a417c19cc1adb349b71ce0c3 Mon Sep 17 00:00:00 2001 From: Thomas Heller Date: Thu, 14 Jul 2016 23:45:52 +0200 Subject: [PATCH 1/6] change default chunker of parallel executor to static one --- hpx/parallel/executors/parallel_executor.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hpx/parallel/executors/parallel_executor.hpp b/hpx/parallel/executors/parallel_executor.hpp index edeee9cde527..1ebd6f570052 100644 --- a/hpx/parallel/executors/parallel_executor.hpp +++ b/hpx/parallel/executors/parallel_executor.hpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include #include @@ -32,7 +32,7 @@ namespace hpx { namespace parallel { HPX_INLINE_NAMESPACE(v3) { /// Associate the auto_chunk_size executor parameters type as a default /// with this executor. - typedef auto_chunk_size executor_parameters_type; + typedef static_chunk_size executor_parameters_type; /// Create a new parallel executor explicit parallel_executor(launch l = launch::async) From 6bf657f4195ce033eea1f7e8affb15305b755d04 Mon Sep 17 00:00:00 2001 From: Hartmut Kaiser Date: Thu, 14 Jul 2016 18:53:57 -0500 Subject: [PATCH 2/6] Adding missing header #include, fix test --- tests/unit/parallel/task_block_executor.cpp | 23 +++++++++++---------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/tests/unit/parallel/task_block_executor.cpp b/tests/unit/parallel/task_block_executor.cpp index 13843d6bb225..15e03218adca 100644 --- a/tests/unit/parallel/task_block_executor.cpp +++ b/tests/unit/parallel/task_block_executor.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -20,7 +21,7 @@ using hpx::parallel::parallel_execution_policy; using hpx::parallel::parallel_task_execution_policy; using hpx::parallel::parallel_execution_policy_shim; using hpx::parallel::parallel_task_execution_policy_shim; -using hpx::parallel::auto_chunk_size; +using hpx::parallel::static_chunk_size; /////////////////////////////////////////////////////////////////////////////// template @@ -35,7 +36,7 @@ void define_task_block_test1(Executor& exec) bool task3_flag = false; typedef task_block< - parallel_execution_policy_shim + parallel_execution_policy_shim > task_block_type; define_task_block(par.on(exec), @@ -90,10 +91,10 @@ void define_task_block_test2(Executor& exec) bool task3_flag = false; typedef task_block< - parallel_execution_policy_shim + parallel_execution_policy_shim > task_block_type1; typedef task_block< - parallel_task_execution_policy_shim + parallel_task_execution_policy_shim > task_block_type2; hpx::future f = define_task_block(par(task).on(exec), @@ -149,7 +150,7 @@ void define_task_block_test3(Executor& exec) bool task3_flag = false; typedef task_block< - parallel_execution_policy_shim + parallel_execution_policy_shim > task_block_type; define_task_block(par.on(exec), @@ -204,10 +205,10 @@ void define_task_block_test4(Executor& exec) bool task3_flag = false; typedef task_block< - parallel_execution_policy_shim + parallel_execution_policy_shim > task_block_type1; typedef task_block< - parallel_task_execution_policy_shim + parallel_task_execution_policy_shim > task_block_type2; hpx::future f = define_task_block(par(task).on(exec), @@ -255,7 +256,7 @@ template void define_task_block_exceptions_test1(Executor& exec) { typedef task_block< - parallel_execution_policy_shim + parallel_execution_policy_shim > task_block_type; try { @@ -289,7 +290,7 @@ template void define_task_block_exceptions_test2(Executor& exec) { typedef task_block< - parallel_task_execution_policy_shim + parallel_task_execution_policy_shim > task_block_type; hpx::future f = define_task_block(par(task).on(exec), @@ -325,7 +326,7 @@ template void define_task_block_exceptions_test3(Executor& exec) { typedef task_block< - parallel_execution_policy_shim + parallel_execution_policy_shim > task_block_type; try { @@ -362,7 +363,7 @@ template void define_task_block_exceptions_test4(Executor& exec) { typedef task_block< - parallel_task_execution_policy_shim + parallel_task_execution_policy_shim > task_block_type; hpx::future f = define_task_block(par(task).on(exec), From 17756f409d35598e569664dd737475153b75b8a0 Mon Sep 17 00:00:00 2001 From: Hartmut Kaiser Date: Fri, 15 Jul 2016 07:22:07 -0500 Subject: [PATCH 3/6] Adding tickets to docs, more acknowledgments --- docs/people.qbk | 6 ++++-- docs/whats_new.qbk | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/people.qbk b/docs/people.qbk index eed0723904c2..b44f162a28f8 100644 --- a/docs/people.qbk +++ b/docs/people.qbk @@ -11,7 +11,7 @@ The __stellar__ Group (pronounced as stellar) stands for "[*S]ystems [*T]echnology, [*E]mergent Para[*ll]elism, and [*A]lgorithm [*R]esearch". We are an international group of faculty, researchers, and students working at various -institutions around the world. +institutions around the world. The goal of the __stellar__ Group is to promote the development of scalable parallel applications by providing a community for ideas, a framework for collaboration, and a platform for communicating these concepts to the @@ -26,7 +26,7 @@ to more conventional programming models such as MPI. __hpx__ is based on /ParalleX/ which is a new (and still experimental) parallel execution model aiming to -overcome the limitations imposed by the current hardware and the techniques +overcome the limitations imposed by the current hardware and the techniques we use to write applications today. Our group focuses on two types of applications - those requiring excellent strong scaling, allowing for a dramatic reduction of @@ -99,6 +99,8 @@ our tables below. Thanks also to the following people who contributed directly or indirectly to the project through discussions, pull requests, documentation patches, etc. +* Khalid Hasanov, who contributed changes which allowed to run HPX on 64Bit + power-pc architectures. * Zahra Khatami, who contributed the prefetching iterators and the persistent auto chunking executor parameters implementation. * Marcin Copik, who worked on implementing GPU support for C++AMP and HCC. diff --git a/docs/whats_new.qbk b/docs/whats_new.qbk index 5d3ddd818abd..5ee6ead96da0 100644 --- a/docs/whats_new.qbk +++ b/docs/whats_new.qbk @@ -14,7 +14,7 @@ As the version number of this release hints, we consider this release to be a preview -for the upcoming __hpx__ V1.0. All of the functionalities +for the upcoming __hpx__ V1.0. All of the functionalities we set out to implement for V1.0 are in place; all of the features we wanted to have exposed are ready. We are very happy with the stability and performance of __hpx__ and we would like @@ -143,6 +143,12 @@ particular order): Here is a list of the important tickets we closed for this release. +* [pr 2250] - change default chunker of parallel executor to static one +* [pr 2247] - HPX on ppc64le +* [pr 2244] - Fixing MSVC problems +* [pr 2238] - Fixing small typos +* [pr 2237] - Fixing small typos +* [pr 2234] - Fix broken add test macro when extra args are passed in * [pr 2231] - Fixing possible race during future awaiting in serialization * [pr 2230] - Fix stream nvcc * [pr 2229] - Fixed run_as_hpx_thread From d22884c287c469aa8b4c05ca182697f1a93e3a41 Mon Sep 17 00:00:00 2001 From: Adrian Serio Date: Fri, 15 Jul 2016 13:42:44 -0500 Subject: [PATCH 4/6] Bumping version to 1.0.0 --- CMakeLists.txt | 6 +++--- README.rst | 15 ++++++++++----- docs/CMakeLists.txt | 4 ++-- docs/hpx.qbk | 4 ++-- docs/people.qbk | 3 ++- hpx/config/version.hpp | 10 +++++----- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index df3ca8b9ed2a..06fff492a3e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,9 +45,9 @@ endif() ################################################################################ project(HPX CXX C) -set(HPX_MAJOR_VERSION 0) -set(HPX_MINOR_VERSION 9) -set(HPX_PATCH_LEVEL 99) +set(HPX_MAJOR_VERSION 1) +set(HPX_MINOR_VERSION 0) +set(HPX_PATCH_LEVEL 0) set(HPX_VERSION "${HPX_MAJOR_VERSION}.${HPX_MINOR_VERSION}.${HPX_PATCH_LEVEL}") set(HPX_LIBRARY_VERSION "${HPX_VERSION}") set(HPX_SOVERSION ${HPX_MAJOR_VERSION}) diff --git a/README.rst b/README.rst index 24ab72b2c887..f374887605b6 100644 --- a/README.rst +++ b/README.rst @@ -51,8 +51,8 @@ What's so special about HPX? active, and thriving developer community. -The documentation for the latest release of HPX (currently V0.9.11) can be -`found here `_. +The documentation for the latest release of HPX (currently V0.9.99) can be +`found here `_. In publications this release of HPX can be cited as: |zenodo_doi|. .. |zenodo_doi| image:: https://zenodo.org/badge/doi/10.5281/zenodo.33656.svg @@ -64,7 +64,7 @@ Additionally, we regularly upload the current status of the documentation single-page version of the documentation `here `_. If you plan to use HPX we suggest to start with the latest released version -(currently HPX V0.9.11) which can be `downloaded here `_. +(currently HPX V0.9.99) which can be `downloaded here `_. If you would like to work with the cutting edge version from this repository we suggest following the current health status of the master branch by looking at @@ -125,7 +125,7 @@ Linux cmake -DBOOST_ROOT=~/packages/boost \ -DHWLOC_ROOT=/packages/hwloc \ -DCMAKE_INSTALL_PREFIX=~/packages/hpx \ - ~/downloads/hpx_0.9.11 + ~/downloads/hpx_0.9.99 5) Invoke GNU make. If you are on a machine with multiple cores (very likely), add the -jN flag to your make invocation, where N is the number of cores @@ -181,7 +181,7 @@ OS X (Mac) cmake -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ -DBOOST_ROOT=~/packages/boost \ -DCMAKE_INSTALL_PREFIX=~/packages/hpx \ - ~/downloads/hpx_0.9.11 + ~/downloads/hpx_0.9.99 5) Invoke GNU make. If you are on a machine with multiple cores (very likely), add the -jN flag to your make invocation, where N is the number of cores @@ -354,6 +354,7 @@ The following images are currently available: `here `_ for the build status) * ``stellargroup/hpx:latest`` (latest release) +* ``stellargroup/hpx:0.9.99`` (release v0.9.99) * ``stellargroup/hpx:0.9.11`` (release v0.9.11) * ``stellargroup/hpx:0.9.10`` (release v0.9.10) @@ -424,3 +425,7 @@ HPX is currently funded by * The Bavarian Research Foundation (Bayerische Forschungsstfitung) through the grant AZ-987-11. + +* The European Commission's Horizon 2020 programme through the grant + H2020-EU.1.2.2. 671603 (AllScale). + diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index 3f35d22a1f7b..2438c8791a32 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -327,8 +327,8 @@ hpx_quickbook_to_html(hpx toc.max.depth=4 generate.section.toc.level=4 boost.image.src=${image} - boost.image.w=604 - boost.image.h=90 + boost.image.w=470 + boost.image.h=120 boost.image.alt="HPX" ${auto_index_xsl_param} QUICKBOOK_ARGS ${quickbook_fixme_mode} ${auto_index_mode} diff --git a/docs/hpx.qbk b/docs/hpx.qbk index 23899c235c19..9462c6e7afd5 100644 --- a/docs/hpx.qbk +++ b/docs/hpx.qbk @@ -11,7 +11,7 @@ [quickbook 1.7] [id hpx] [authors [STE||AR Group, The]] - [version 0.9.99] + [version 1.0.0] [copyright 2011 2012 2013 2014 2015 2016 The STE||AR Group (http://stellar-group.org)] [license Distributed under the Boost Software License, Version 1.0. (See @@ -40,7 +40,7 @@ [def __0_9_99__ [link hpx.whats_new.hpx_0_9_99 V0.9.99]] [def __1_0_0__ [link hpx.whats_new.hpx_1_0_0 V1.0.0]] -[def __version__ __0_9_99__] +[def __version__ __1_0_00__] [def __hpx__ /HPX/] [def __hpx_compute__ /HPX.Compute/] diff --git a/docs/people.qbk b/docs/people.qbk index b44f162a28f8..5b9751c43ae2 100644 --- a/docs/people.qbk +++ b/docs/people.qbk @@ -214,7 +214,8 @@ __hpx__ is currently funded by the following grants: United States Government or any agency thereof. * The Bavarian Research Foundation (Bayerische Forschungsstfitung) through the grant AZ-987-11. - +* The European Commission's Horizon 2020 programme through the grant + H2020-EU.1.2.2. 671603 (AllScale). [endsect] [/ People] diff --git a/hpx/config/version.hpp b/hpx/config/version.hpp index a63ee979bf65..24df20a85037 100644 --- a/hpx/config/version.hpp +++ b/hpx/config/version.hpp @@ -26,13 +26,13 @@ // HPX_VERSION_DATE YYYYMMDD is the date of the release // (estimated release date for master branch) // -#define HPX_VERSION_FULL 0x000999 +#define HPX_VERSION_FULL 0x001000 -#define HPX_VERSION_MAJOR 0 -#define HPX_VERSION_MINOR 9 -#define HPX_VERSION_SUBMINOR 99 +#define HPX_VERSION_MAJOR 1 +#define HPX_VERSION_MINOR 0 +#define HPX_VERSION_SUBMINOR 0 -#define HPX_VERSION_DATE 20160701 +#define HPX_VERSION_DATE 20161031 #if !defined(HPX_AGAS_VERSION) #define HPX_AGAS_VERSION 0x30 From cf5fc0b4e9a6be919a32fbc474d467e952577d1c Mon Sep 17 00:00:00 2001 From: Adrian Serio Date: Fri, 15 Jul 2016 13:49:44 -0500 Subject: [PATCH 5/6] Removing Docker info from README.rst --- README.rst | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) diff --git a/README.rst b/README.rst index f374887605b6..dd09a95aa4c2 100644 --- a/README.rst +++ b/README.rst @@ -337,56 +337,6 @@ For more detailed information about building HPX for the Xeon/Phi please refer t the `documentation `_. - -****************** - Docker -****************** - -We also provide several HPX docker images. -Those can be used for rapid prototyping, demonstrations or writing minimal -examples for issue reports. This also provides an HPX build environment for -continuous integration of external projects. - -The following images are currently available: - -* ``stellargroup/hpx:dev`` (HEAD, updated on every commit to master which - builds successfully, see - `here `_ for the - build status) -* ``stellargroup/hpx:latest`` (latest release) -* ``stellargroup/hpx:0.9.99`` (release v0.9.99) -* ``stellargroup/hpx:0.9.11`` (release v0.9.11) -* ``stellargroup/hpx:0.9.10`` (release v0.9.10) - -While a more detailed introduction to docker can be found at the official -`docker homepage `_, here are some easy -steps that explain how to use a docker image:: - - # Download/Update the image - docker pull stellargroup/hpx:dev - - # Run a command. - # NOTICE: Docker images are read-only and will be reset after execution. - docker run stellargroup/hpx:dev hello_world - - # Mount a host directory to make changes persistent. - # In this case, mount the current host directory $PWD to /hpx in the - # dockerfile via '-v'. - # Also, make /hpx the current working directory with '-w'. - docker run -v $PWD:/hpx -w /hpx stellargroup/hpx:dev - - # For example, build the binary "example" from "example.cpp" using - # the built-in hpx compilation script "hpxcxx". Note that hpx libraries - # other than the core library have to be linked explicitly (like hpx_iostreams). - docker run -v $PWD:/hpx -w /hpx stellargroup/hpx:dev \ - hpxcxx example.cpp --exe=example -lhpx_iostreams - - # Now run the resulting program: - docker run -v $PWD:/hpx -w /hpx stellargroup/hpx:dev ./example - - - - ****************** Acknowledgements ****************** From 27c61312a2229e5f99954df28c8a4223b007b825 Mon Sep 17 00:00:00 2001 From: Hartmut Kaiser Date: Fri, 15 Jul 2016 19:04:24 -0500 Subject: [PATCH 6/6] Preparing docs for master (targeting V1.0) --- README.rst | 6 +- docs/CMakeLists.txt | 4 +- docs/hpx.qbk | 4 +- docs/html/images/hpx_1_0_0.png | Bin 16711 -> 11154 bytes docs/html/images/hpx_1_0_0_draft.png | Bin 5514 -> 11751 bytes docs/version.pptx | Bin 49103 -> 50809 bytes docs/whats_new.qbk | 585 +------------------------- docs/whats_new_previous.qbk | 597 ++++++++++++++++++++++++++- 8 files changed, 605 insertions(+), 591 deletions(-) diff --git a/README.rst b/README.rst index dd09a95aa4c2..e471902674aa 100644 --- a/README.rst +++ b/README.rst @@ -55,8 +55,8 @@ The documentation for the latest release of HPX (currently V0.9.99) can be `found here `_. In publications this release of HPX can be cited as: |zenodo_doi|. -.. |zenodo_doi| image:: https://zenodo.org/badge/doi/10.5281/zenodo.33656.svg - :target: http://dx.doi.org/10.5281/zenodo.33656 +.. |zenodo_doi| image:: https://zenodo.org/badge/doi/10.5281/zenodo.58027.svg + :target: http://dx.doi.org/10.5281/zenodo.58027 Additionally, we regularly upload the current status of the documentation (which is being worked on as we speak) @@ -377,5 +377,5 @@ HPX is currently funded by the grant AZ-987-11. * The European Commission's Horizon 2020 programme through the grant - H2020-EU.1.2.2. 671603 (AllScale). + H2020-EU.1.2.2. 671603 (AllScale). diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index 2438c8791a32..6a17cb2bac62 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -327,8 +327,8 @@ hpx_quickbook_to_html(hpx toc.max.depth=4 generate.section.toc.level=4 boost.image.src=${image} - boost.image.w=470 - boost.image.h=120 + boost.image.w=562 + boost.image.h=104 boost.image.alt="HPX" ${auto_index_xsl_param} QUICKBOOK_ARGS ${quickbook_fixme_mode} ${auto_index_mode} diff --git a/docs/hpx.qbk b/docs/hpx.qbk index 9462c6e7afd5..984cd1ab8efe 100644 --- a/docs/hpx.qbk +++ b/docs/hpx.qbk @@ -37,10 +37,10 @@ [def __0_9_9__ [link hpx.whats_new.hpx_previous.hpx_0_9_9 V0.9.9]] [def __0_9_10__ [link hpx.whats_new.hpx_previous.hpx_0_9_10 V0.9.10]] [def __0_9_11__ [link hpx.whats_new.hpx_previous.hpx_0_9_11 V0.9.11]] -[def __0_9_99__ [link hpx.whats_new.hpx_0_9_99 V0.9.99]] +[def __0_9_99__ [link hpx.whats_new.hpx_previous.hpx_0_9_99 V0.9.99]] [def __1_0_0__ [link hpx.whats_new.hpx_1_0_0 V1.0.0]] -[def __version__ __1_0_00__] +[def __version__ __1_0_0__] [def __hpx__ /HPX/] [def __hpx_compute__ /HPX.Compute/] diff --git a/docs/html/images/hpx_1_0_0.png b/docs/html/images/hpx_1_0_0.png index 6363b98e282e4b566868f3db17121796e8e5f1b8..5a584821f6a16009b4e06c3711a6507ee021853c 100644 GIT binary patch literal 11154 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

2Z*Qo4=t@PmDkBpVtWTt(9lvA6av>Ylv5 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 diff --git a/docs/html/images/hpx_1_0_0_draft.png b/docs/html/images/hpx_1_0_0_draft.png index 15417537e8bafda7e18cd5a69d7e138a17dd6d8a..8bdcecbfa354c156be2b2eba5a119b81ebdeefc6 100644 GIT binary patch literal 11751 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

hDN@RYFr*h9tfP0P8C@d*bLkwdV6n9 zMKFkWWF#gc15yy1;rI~Bh)FYQ4)OtnhF)pW?1l?C+~^cionx=nGI2&m$48V-g25Rk zeiZXo_XZoSiuC1+F%rkdl$IbOw7dzbnRuU}ot}!?!Q)XTG{yYh?x!aGDQ4*nr3R^f~#9g-#{%@gE>oo>W9?hdm`NOb<~|QZ)hQ%UM_;qP*qW zPS@#Oxa-5tSiZt{yxL_;sw9(klvNGz`Co!bgmkzNIjKkekwp%ZF}vmh!j_$Bf(#Gb zc^upAC7Xv4`N^8M6Pa^{a~!p$bkBIts8(O({}FGBF|yAHdi=)-pV~?O93N#4Ro=>(Cz3C`9{rIA<*mFgC-uhi zNxVXfdXiADd@35Ln?vAI*lw7!=al?6URStZpr3P$-stI;38;>*Xsr!`FJf z|GEV+~dO*DREG8>^>qEnPf>?PC}eN+0Yz?FUiRE&1;eyE$o3^i0wZ zN6vgXIuQif+DT;F2t6BtE_{6MhMX#Tx{5A`A=kA>vl+aeT4TBB|LGt^M@wWq`cx+7 zv5Y6rwYHbywl^w4ss-84Usvrf<=`vXHBE2lQoN12TMVeoqU)m7NP!nIs>__p2KHJ9 zMKkVqCr?`usBv*|Gc#@qG?1>NNg#f!rb~yYx3||P3d!&fE3NKp5l6Fogm`px`M`!P z_j{2K{pQXO+mNimg_C8)Qta<~Ox|MZ+zVlgb@7z0xaj250aopLudPuX_i%DPuh-`@ zMeaMccf5^cN^9}YjI8C{u9wpg3!2wrmE#SjkVu1yqDFMu*1*8X*ucn8|FE>YW>jhu zH3uJ|uJ4>f=dTbMwKA=j7fg$~*On8AX?V?x5B`^J&pX~-CrL24NKRaQr%)vya`x%4 zJG{`<{$ZiXacK@umMP%l_EV?<*go1(4nsA%Z_L wbp_!4o%BH+?`-fnkrL+r(!liG?M+DjnB=o)c9jXloDC%{E-zLlqUZO204PSP82|tP literal 5514 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 LpW3T+f298p5Dr)U delta 14917 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 diff --git a/docs/whats_new.qbk b/docs/whats_new.qbk index 5ee6ead96da0..1cb79b965405 100644 --- a/docs/whats_new.qbk +++ b/docs/whats_new.qbk @@ -8,598 +8,17 @@ [section:whats_new What's New] -[section:hpx_0_9_99 __hpx__ V0.9.99] +[//////////////////////////////////////////////////////////////////////////////] +[section:hpx_1_0_0 __hpx__ V1.0] [heading General Changes] -As the version number of this release hints, we consider this release -to be a preview -for the upcoming __hpx__ V1.0. All of the functionalities -we set out to implement for -V1.0 are in place; all of the features we wanted to have exposed are ready. We -are very happy with the stability and performance of __hpx__ and we would like -to present this release to the community in order for us to -gather broad feedback before releasing V1.0. -We still expect for some minor details to change, but -on the whole this release represents what we would like to have in a V1.0. - -Overall, since the last release we have had almost 1600 commits while closing -almost 400 tickets. These numbers reflect the incredible development activity -we have seen over the last couple of months. We would like to express a big -'Thank you!' to all contributors and those who helped to make this release -happen. - -The most notable addition in terms of new functionality available with this -release is the full implementation of object migration (i.e. the ability to -transparently move __hpx__ components to a different compute node). -Additionally, this release of __hpx__ cleans up many minor issues and some -API inconsistencies. - -Here are some of the main highlights and changes for this release (in no -particular order): - -* We have fixed a couple of issues in AGAS and the parcel layer which have - caused hangs, segmentation faults at exit, and a slowdown of applications - over time. Fixing those has significantly increased the overall stability - and performance of distributed runs. -* We have started to add parallel algorithm overloads based on the C++ - Extensions for Ranges (__cpp17_n4560__) proposal. This also includes the - addition of projections to the existing algorithms. Please see [issue 1668] - for a list of algorithms which have been adapted to __cpp17_n4560__. -* We have implemented index-based parallel for-loops based on a - corresponding standardization proposal (__cpp20_p0075r1__). Please see - [issue 2016] for a list of available algorithms. -* We have added implementations for more parallel algorithms as proposed for - the upcoming C++ 17 Standard. See [issue 1141] for an overview of which - algorithms are available by now. -* We have started to implement a new prototypical functionality with - __hpx_compute__ which uniformly exposes some of the higher level APIs to - heterogeneous architectures (currently CUDA). This functionality is an early - preview and should not be considered stable. It may change considerably in - the future. -* We have pervasively added (optional) executor arguments to all API functions - which schedule new work. Executors are now used throughout the code base as - the main means of executing tasks. -* Added `hpx::make_future(future &&)` allowing to convert a future of - any type `T` into a future of any other type `R`, either based on default - conversion rules of the embedded types or using a given explicit conversion - function. -* We finally finished the implementation of transparent migration of components - to another locality. It is now possible to trigger - a migration operation without 'stopping the world' for the object to migrate. - __hpx__ will make sure that no work is being performed on an object before it - is migrated and that all subsequently scheduled work for the migrated object - will be transparently forwarded to the new locality. Please note that the - global id of the migrated object does not change, thus the application will - not have to be changed in any way to support this new functionality. Please - note that this feature is currently considered experimental. See [issue 559] - and [pr 1966] for more details. -* The `hpx::dataflow` facility is now usable with actions. Similarly to - `hpx::async`, actions can be specified as an explicit template argument - (`hpx::dataflow(target, ...)`) or as the first argument - (`hpx::dataflow(Action(), target, ...)`). We have also enabled the use of - distribution policies as the target for dataflow invocations. Please see - [issue 1265] and [pr 1912] for more information. -* Adding overloads of `gather_here` and `gather_there` to accept the plain - values of the data to gather (in addition to the existing overloads expecting - futures). -* We have cleaned up and refactored large parts of the code base. This helped - reducing compile and link times of __hpx__ itself and also of applications - depending on it. We have further decreased the dependency of __hpx__ on the - Boost libraries by replacing part of those with facilities available from the - standard libraries. -* Wherever possible we have removed dependencies of our API on Boost by - replacing those with the equivalent facility from the C++11 standard library. -* We have added new performance counters for parcel coalescing, file-IO, the - AGAS cache, and overall scheduler time. Resetting performance counters has - been overhauled and fixed. -* We have introduced a generic client type `hpx::components::client<>` and - added support for using it with `hpx::async`. This removes the necessity to - implement specific client types for every component type without losing - type safety. This deemphasizes the need for using the low level `hpx::id_type` - for referencing (possibly remote) component instances. The plan is to - deprecate the direct use of `hpx::id_type` in user code in the future. -* We have added a special iterator which supports automatic prefetching of - one or more arrays for speeding up loop-like code (see - `hpx::parallel::util::make_prefetcher_context()`). -* We have extended the interfaces exposed from executors (as proposed by - __cpp11_n4406__) to accept an arbitrary number of arguments. - [heading Breaking Changes] -* In order to move the dataflow facility to `namespace hpx` we added a - definition of `hpx::dataflow` which might create ambiguities in existing - codes. The previous definition of this facility (`hpx::lcos::local::dataflow`) - has been deprecated and is available only if the constant - `-DHPX_WITH_LOCAL_DATAFLOW_COMPATIBILITY=On` to __cmake __ is defined at - configuration time. - Please explicitly qualify all uses of the dataflow facility if you enable - this compatibility setting and encounter ambiguities. -* The adaptation of the C++ Extensions for Ranges (__cpp17_n4560__) proposal - imposes some breaking changes related to the return types of some of the - parallel algorithms. Please see [issue 1668] for a list of algorithms which - have already been adapted. -* The facility `hpx::lcos::make_future_void()` has been replaced by - `hpx::make_future()`. -* We have removed support for Intel V13 and gcc 4.4.x. -* We have removed (default) support for the generic - `hpx::parallel::execution_poliy` because it was removed from the Parallelism - TS (__cpp11_n4104__) while it was being added to the upcoming C++17 Standard. - This facility can be still enabled at configure time by specifying - `-DHPX_WITH_GENERIC_EXECUTION_POLICY=On` to __cmake__. -* Uses of `boost::shared_ptr` and related facilities have been replaced with - `std::shared_ptr` and friends. Uses of `boost::unique_lock`, - `boost::lock_guard` etc. have also been replaced by the equivalent (and - equally named) tools available from the C++11 standard library. -* Facilities that used to expect an explicit `boost::unique_lock` now take an - `std::unique_lock`. Additionally, `condition_variable` no longer aliases - `condition_variable_any`; its interface now only works with - `std::unique_lock`. -* Uses of `boost::function`, `boost::bind`, `boost::tuple` have been replaced - by the corresponding facilities in __hpx__ (`hpx::util::function`, - `hpx::util::bind`, and `hpx::util::tuple`, respectively). - [heading Bug Fixes (Closed Tickets)] Here is a list of the important tickets we closed for this release. -* [pr 2250] - change default chunker of parallel executor to static one -* [pr 2247] - HPX on ppc64le -* [pr 2244] - Fixing MSVC problems -* [pr 2238] - Fixing small typos -* [pr 2237] - Fixing small typos -* [pr 2234] - Fix broken add test macro when extra args are passed in -* [pr 2231] - Fixing possible race during future awaiting in serialization -* [pr 2230] - Fix stream nvcc -* [pr 2229] - Fixed run_as_hpx_thread -* [pr 2228] - On prefetching_test branch : adding prefetching_iterator and - related tests used for prefetching containers within lambda - functions -* [pr 2227] - Support for HPXCL's opencl::event -* [pr 2226] - Preparing for release of V0.9.99 -* [pr 2225] - fix issue when compiling components with hpxcxx -* [pr 2224] - Compute alloc fix -* [pr 2223] - Simplify promise -* [pr 2222] - Replace last uses of boost::function by util::function_nonser -* [pr 2221] - Fix config tests -* [pr 2220] - Fixing gcc 4.6 compilation issues -* [pr 2219] - nullptr support for [unique_]function -* [pr 2218] - Introducing clang tidy -* [pr 2216] - Replace NULL with nullptr -* [issue 2214] - Let inspect flag use of NULL, suggest nullptr instead -* [pr 2213] - Require support for nullptr -* [pr 2212] - Properly find jemalloc through pkg-config -* [pr 2211] - Disable a couple of warnings reported by Intel on Windows -* [pr 2210] - Fixed host::block_allocator::bulk_construct -* [pr 2209] - Started to clean up new sort algorithms, made things compile - for sort_by_key -* [pr 2208] - A couple of fixes that were exposed by a new sort algorithm -* [pr 2207] - Adding missing includes in /hpx/include/serialization.hpp -* [pr 2206] - Call package_action::get_future before package_action::apply -* [pr 2205] - The indirect_packaged_task::operator() needs to be run on a - HPX thread -* [pr 2204] - Variadic executor parameters -* [pr 2203] - Delay-initialize members of partitoned iterator -* [pr 2202] - Added segmented fill for hpx::vector -* [issue 2201] - Null Thread id encountered on partitioned_vector -* [pr 2200] - Fix hangs -* [pr 2199] - Deprecating hpx/traits.hpp -* [pr 2198] - Making explicit inclusion of external libraries into build -* [pr 2197] - Fix typo in QT CMakeLists -* [pr 2196] - Fixing a gcc warning about attributes being ignored -* [pr 2194] - Fixing partitioned_vector_spmd_foreach example -* [issue 2193] - partitioned_vector_spmd_foreach seg faults -* [pr 2192] - Support Boost.Thread v4 -* [pr 2191] - HPX.Compute prototype -* [pr 2190] - Spawning operation on new thread if remaining stack space - becomes too small -* [pr 2189] - Adding callback taking index and future to when_each -* [pr 2188] - Adding new example demonstrating receive_buffer -* [pr 2187] - Mask 128-bit ints if CUDA is being used -* [pr 2186] - Make startup & shutdown functions unique_function -* [pr 2185] - Fixing logging output not to cause hang on shutdown -* [pr 2184] - Allowing component clients as action return types -* [issue 2183] - Enabling logging output causes hang on shutdown -* [issue 2182] - 1d_stencil seg fault -* [issue 2181] - Setting small stack size does not change default -* [pr 2180] - Changing default bind mode to balanced -* [pr 2179] - adding prefetching_iterator and related tests used for - prefetching containers within lambda functions -* [pr 2177] - Fixing 2176 -* [issue 2176] - Launch process test fails on OSX -* [pr 2175] - Fix unbalanced config/warnings includes, add some new ones -* [pr 2174] - Fix test categorization : regression not unit -* [issue 2172] - Different performance results -* [issue 2171] - "negative entry in reference count table" running octotiger on - 32 nodes on queenbee -* [issue 2170] - Error while compiling on Mac + boost 1.60 -* [pr 2168] - Fixing problems with is_bitwise_serializable -* [issue 2167] - startup & shutdown function should accept unique_function -* [issue 2166] - Simple receive_buffer example -* [pr 2165] - Fix wait all -* [pr 2164] - Fix wait all -* [pr 2163] - Fix some typos in config tests -* [pr 2162] - Improve #includes -* [pr 2160] - Add inspect check for missing #include -* [pr 2159] - Add missing finalize call to stop test hanging -* [pr 2158] - Algo fixes -* [pr 2157] - Stack check -* [issue 2156] - OSX reports stack space incorrectly (generic context coroutines) -* [issue 2155] - Race condition suspected in runtime -* [pr 2154] - Replace boost::detail::atomic_count with the new - util::atomic_count -* [pr 2153] - Fix stack overflow on OSX -* [pr 2152] - Define is_bitwise_serializable as is_trivially_copyable when - available -* [pr 2151] - Adding missing for std::mem* functions -* [issue 2150] - Unable to use component clients as action return types -* [pr 2149] - std::memmove copies bytes, use bytes*sizeof(type) when copying - larger types -* [pr 2146] - Adding customization point for parallel copy/move -* [pr 2145] - Applying changes to address warnings issued by latest version - of PVS Studio -* [issue 2148] - hpx::parallel::copy is broken after trivially copyable changes -* [pr 2144] - Some minor tweaks to compute prototype -* [pr 2143] - Added Boost version support information over OSX platform -* [pr 2142] - Fixing memory leak in example -* [pr 2141] - Add missing specializations in execution policies -* [pr 2139] - This PR fixes a few problems reported by Clang's Undefined - Behavior sanitizer -* [pr 2138] - Revert "Adding fedora docs" -* [pr 2136] - Removed double semicolon -* [pr 2135] - Add deprecated #include check for hpx_fwd.hpp -* [pr 2134] - Resolved memory leak in stencil_8 -* [pr 2133] - Replace uses of boost pointer containers -* [pr 2132] - Removing unused typedef -* [pr 2131] - Add several include checks for std facilities -* [pr 2130] - Fixing parcel compression, adding test -* [pr 2129] - Fix invalid attribute warnings -* [issue 2128] - hpx::init seems to segfault -* [pr 2127] - Making executor_traits N-nary -* [pr 2126] - GCC 4.6 fails to deduce the correct type in lambda -* [pr 2125] - Making parcel coalescing test actually test something -* [issue 2124] - Make a testcase for parcel compression -* [issue 2123] - hpx/hpx/runtime/applier_fwd.hpp - Multiple defined types -* [issue 2122] - Exception in primary_namespace::resolve_free_list -* [issue 2121] - Possible memory leak in 1d_stencil_8 -* [pr 2120] - Fixing 2119 -* [issue 2119] - reduce_by_key compilation problems -* [issue 2118] - Premature unwrapping of boost::ref'ed arguments -* [pr 2117] - Added missing initializer on last constructor for - thread_description -* [pr 2116] - Use a lightweight bind implementation when no placeholders are - given -* [pr 2115] - Replace boost::shared_ptr with std::shared_ptr -* [pr 2114] - Adding hook functions for executor_parameter_traits supporting timers -* [issue 2113] - Compilation error with gcc version 4.9.3 (MacPorts gcc49 4.9.3_0) -* [pr 2112] - Replace uses of safe_bool with explicit operator bool -* [issue 2111] - Compilation error on QT example -* [issue 2110] - Compilation error when passing non-future argument to unwrapped - continuation in dataflow -* [issue 2109] - Warning while compiling hpx -* [issue 2109] - Stack trace of last bug causing issues with octotiger -* [issue 2108] - Stack trace of last bug causing issues with octotiger -* [pr 2107] - Making sure that a missing parcel_coalescing module does not - cause startup exceptions -* [pr 2106] - Stop using hpx_fwd.hpp -* [issue 2105] - coalescing plugin handler is not optional any more -* [issue 2104] - Make executor_traits N-nary -* [issue 2103] - Build error with octotiger and hpx commit e657426d -* [pr 2102] - Combining thread data storage -* [pr 2101] - Added repartition version of 1d stencil that uses any - performance counter -* [pr 2100] - Drop obsolete TR1 result_of protocol -* [pr 2099] - Replace uses of boost::bind with util::bind -* [pr 2098] - Deprecated inspect checks -* [pr 2097] - Reduce by key, extends #1141 -* [pr 2096] - Moving local cache from external to hpx/util -* [pr 2095] - Bump minimum required Boost to 1.50.0 -* [pr 2094] - Add include checks for several Boost utilities -* [issue 2093] - /.../local_cache.hpp(89): error #303: explicit type is missing - ("int" assumed) -* [pr 2091] - Fix for Raspberry pi build -* [pr 2090] - Fix storage size for util::function<> -* [pr 2089] - Fix #2088 -* [issue 2088] - More verbose output from cmake configuration -* [pr 2087] - Making sure init_globally always executes hpx_main -* [issue 2086] - Race condition with recent HPX -* [pr 2085] - Adding #include checker -* [pr 2084] - Replace boost lock types with standard library ones -* [pr 2083] - Simplify packaged task -* [pr 2082] - Updating APEX version for testing -* [pr 2081] - Cleanup exception headers -* [pr 2080] - Make call_once variadic -* [issue 2079] - With GNU C++, line 85 of hpx/config/version.hpp causes link - failure when linking application -* [issue 2078] - Simple test fails with _GLIBCXX_DEBUG defined -* [pr 2077] - Instantiate board in nqueen client -* [pr 2076] - Moving coalescing registration to TUs -* [pr 2075] - Fixed some documentation typos -* [pr 2074] - Adding flush-mode to message handler flush -* [pr 2073] - Fixing performance regression introduced lately -* [pr 2072] - Refactor local::condition_variable -* [pr 2071] - Timer based on boost::asio::deadline_timer -* [pr 2070] - Refactor tuple based functionality -* [pr 2069] - Fixed typos -* [issue 2068] - Seg fault with octotiger -* [pr 2067] - Algorithm cleanup -* [pr 2066] - Split credit fixes -* [pr 2065] - Rename HPX_MOVABLE_BUT_NOT_COPYABLE to HPX_MOVABLE_ONLY -* [pr 2064] - Fixed some typos in docs -* [pr 2063] - Adding example demonstrating template components -* [issue 2062] - Support component templates -* [pr 2061] - Replace some uses of lexical_cast with C++11 - std::to_string -* [pr 2060] - Replace uses of boost::noncopyable with HPX_NON_COPYABLE -* [pr 2059] - Adding missing for_loop algorithms -* [pr 2058] - Move several definitions to more appropriate headers -* [pr 2057] - Simplify assert_owns_lock and ignore_while_checking -* [pr 2056] - Replacing std::result_of with util::result_of -* [pr 2055] - Fix process launching/connecting back -* [pr 2054] - Add a forwarding coroutine header -* [pr 2053] - Replace uses of boost::unordered_map with std::unordered_map -* [pr 2052] - Rewrite tuple unwrap -* [pr 2050] - Replace uses of BOOST_SCOPED_ENUM with C++11 scoped enums -* [pr 2049] - Attempt to narrow down split_credit problem -* [pr 2048] - Fixing gcc startup hangs -* [pr 2047] - Fixing when_xxx and wait_xxx for MSVC12 -* [pr 2046] - adding persistent_auto_chunk_size and related tests for for_each -* [pr 2045] - Fixing HPX_HAVE_THREAD_BACKTRACE_DEPTH build time configuration -* [pr 2044] - Adding missing service executor types -* [pr 2043] - Removing ambiguous definitions for is_future_range and - future_range_traits -* [pr 2042] - Clarify that HPX builds can use (much) more than 2GB per process -* [pr 2041] - Changing future_iterator_traits to support pointers -* [issue 2040] - Improve documentation memory usage warning? -* [pr 2039] - Coroutine cleanup -* [pr 2038] - Fix cmake policy CMP0042 warning MACOSX_RPATH -* [pr 2037] - Avoid redundant specialization of [unique_]function_nonser -* [pr 2036] - nvcc dies with an internal error upon pushing/popping warnings - inside templates -* [issue 2035] - Use a less restrictive iterator definition in - hpx::lcos::detail::future_iterator_traits -* [pr 2034] - Fixing compilation error with thread queue wait time - performance counter -* [issue 2033] - Compilation error when compiling with thread queue waittime - performance counter -* [issue 2032] - Ambiguous template instantiation for is_future_range and - future_range_traits. -* [pr 2031] - Don't restart timer on every incoming parcel -* [pr 2030] - Unify handling of execution policies in parallel algorithms -* [pr 2029] - Make pkg-config .pc files use .dylib on OSX -* [pr 2028] - Adding process component -* [pr 2027] - Making check for compiler compatibility independent on compiler - path -* [pr 2025] - Fixing inspect tool -* [pr 2024] - Intel13 removal -* [pr 2023] - Fix errors related to older boost versions and parameter pack - expansions in lambdas -* [issue 2022] - gmake fail: "No rule to make target - /usr/lib46/libboost_context-mt.so" -* [pr 2021] - Added Sudoku example -* [issue 2020] - Make errors related to init_globally.cpp example while building - HPX out of the box -* [pr 2019] - Fixed some compilation and cmake errors encountered in nqueen - example -* [pr 2018] - For loop algorithms -* [pr 2017] - Non-recursive at_index implementation -* [issue 2016] - Add index-based for-loops -* [issue 2015] - Change default bind-mode to balanced -* [pr 2014] - Fixed dataflow if invoked action returns a future -* [pr 2013] - Fixing compilation issues with external example -* [pr 2012] - Added Sierpinski Triangle example -* [issue 2011] - Compilation error while running sample hello_world_component code -* [pr 2010] - Segmented move implemented for hpx::vector -* [issue 2009] - pkg-config order incorrect on 14.04 / GCC 4.8 -* [issue 2008] - Compilation error in dataflow of action returning a future -* [pr 2007] - Adding new performance counter exposing overall scheduler time -* [pr 2006] - Function includes -* [pr 2005] - Adding an example demonstrating how to initialize HPX from a - global object -* [pr 2004] - Fixing 2000 -* [pr 2003] - Adding generation parameter to gather to enable using it more - than once -* [pr 2002] - Turn on position independent code to solve link problem with - hpx_init -* [issue 2001] - Gathering more than once segfaults -* [issue 2000] - Undefined reference to hpx::assertion_failed -* [issue 1999] - Seg fault in hpx::lcos::base_lco_with_value<*>::set_value_nonvirt() - when running octo-tiger -* [pr 1998] - Detect unknown command line options -* [pr 1997] - Extending thread description -* [pr 1996] - Adding natvis files to solution (MSVC only) -* [issue 1995] - Command line handling does not produce error -* [pr 1994] - Possible missing include in test_utils.hpp -* [pr 1993] - Add missing LANGUAGES tag to a hpx_add_compile_flag_if_available() - call in CMakeLists.txt -* [pr 1992] - Fixing shared_executor_test -* [pr 1991] - Making sure the winsock library is properly initialized -* [pr 1990] - Fixing bind_test placeholder ambiguity coming from boost-1.60 -* [pr 1989] - Performance tuning -* [pr 1987] - Make configurable size of internal storage in util::function -* [pr 1986] - AGAS Refactoring+1753 Cache mods -* [pr 1985] - Adding missing task_block::run() overload taking an executor -* [pr 1984] - Adding an optimized LRU Cache implementation (for AGAS) -* [pr 1983] - Avoid invoking migration table look up for all objects -* [pr 1981] - Replacing uintptr_t (which is not defined everywhere) with - std::size_t -* [pr 1980] - Optimizing LCO continuations -* [pr 1979] - Fixing Cori -* [pr 1978] - Fix test check that got broken in hasty fix to memory overflow -* [pr 1977] - Refactor action traits -* [pr 1976] - Fixes typo in README.rst -* [pr 1975] - Reduce size of benchmark timing arrays to fix test failures -* [pr 1974] - Add action to update data owned by the partitioned_vector - component -* [pr 1972] - Adding partitioned_vector SPMD example -* [pr 1971] - Fixing 1965 -* [pr 1970] - Papi fixes -* [pr 1969] - Fixing continuation recursions to not depend on fixed amount - of recursions -* [pr 1968] - More segmented algorithms -* [issue 1967] - Simplify component implementations -* [pr 1966] - Migrate components -* [issue 1964] - fatal error: 'boost/lockfree/detail/branch_hints.hpp' file - not found -* [issue 1962] - parallel:copy_if has race condition when used on in place - arrays -* [pr 1963] - Fixing Static Parcelport initialization -* [pr 1961] - Fix function target -* [issue 1960] - Papi counters don't reset -* [pr 1959] - Fixing 1958 -* [issue 1958] - inclusive_scan gives incorrect results with non-commutative - operator -* [pr 1957] - Fixing #1950 -* [pr 1956] - Sort by key example -* [pr 1955] - Adding regression test for #1946: Hang in wait_all() in - distributed run -* [issue 1954] - HPX releases should not use -Werror -* [pr 1953] - Adding performance analysis for AGAS cache -* [pr 1952] - Adapting test for explicit variadics to fail for gcc 4.6 -* [pr 1951] - Fixing memory leak -* [issue 1950] - Simplify external builds -* [pr 1949] - Fixing yet another lock that is being held during suspension -* [pr 1948] - Fixed container algorithms for Intel -* [pr 1947] - Adding workaround for tagged_tuple -* [issue 1946] - Hang in wait_all() in distributed run -* [pr 1945] - Fixed container algorithm tests -* [issue 1944] - assertion 'p.destination_locality() == hpx::get_locality()' - failed -* [pr 1943] - Fix a couple of compile errors with clang -* [pr 1942] - Making parcel coalescing functional -* [issue 1941] - Re-enable parcel coalescing -* [pr 1940] - Touching up make_future -* [pr 1939] - Fixing problems in over-subscription management in the - resource manager -* [pr 1938] - Removing use of unified Boost.Thread header -* [pr 1937] - Cleaning up the use of Boost.Accumulator headers -* [pr 1936] - Making sure interval timer is started for aggregating - performance counters -* [pr 1935] - Tagged results -* [pr 1934] - Fix remote async with deferred launch policy -* [issue 1933] - Floating point exception in - `statistics_counter::get_counter_value` -* [pr 1932] - Removing superfluous includes of - boost/lockfree/detail/branch_hints.hpp -* [pr 1931] - fix compilation with clang 3.8.0 -* [issue 1930] - Missing online documentation for HPX 0.9.11 -* [pr 1929] - LWG2485: get() should be overloaded for const tuple&& -* [pr 1928] - Revert "Using ninja for circle-ci builds" -* [pr 1927] - Using ninja for circle-ci builds -* [pr 1926] - Fixing serialization of std::array -* [issue 1925] - Issues with static HPX libraries -* [issue 1924] - Peformance degrading over time -* [issue 1923] - serialization of std::array appears broken in latest commit -* [pr 1922] - Container algorithms -* [pr 1921] - Tons of smaller quality improvements -* [issue 1920] - Seg fault in hpx::serialization::output_archive::add_gid when - running octotiger -* [issue 1919] - Intel 15 compiler bug preventing HPX build -* [pr 1918] - Address sanitizer fixes -* [pr 1917] - Fixing compilation problems of parallel::sort with Intel - compilers -* [pr 1916] - Making sure code compiles if HPX_WITH_HWLOC=Off -* [issue 1915] - max_cores undefined if HPX_WITH_HWLOC=Off -* [pr 1913] - Add utility member functions for partitioned_vector -* [pr 1912] - Adding support for invoking actions to dataflow -* [pr 1911] - Adding first batch of container algorithms -* [pr 1910] - Keep cmake_module_path -* [pr 1909] - Fix mpirun with pbs -* [pr 1908] - Changing parallel::sort to return the last iterator as - proposed by N4560 -* [pr 1907] - Adding a minimum version for Open MPI -* [pr 1906] - Updates to the Release Procedure -* [pr 1905] - Fixing #1903 -* [pr 1904] - Making sure std containers are cleared before serialization - loads data -* [issue 1903] - When running octotiger, I get: assertion - '(*new_gids_)[gid].size() == 1' failed: HPX(assertion_failure) -* [issue 1902] - Immediate crash when running hpx/octotiger with _GLIBCXX_DEBUG - defined. -* [pr 1901] - Making non-serializable classes non-serializable -* [issue 1900] - Two possible issues with std::list serialization -* [pr 1899] - Fixing a problem with credit splitting as revealed by #1898 -* [issue 1898] - Accessing component from locality where it was not created - segfaults -* [pr 1897] - Changing parallel::sort to return the last iterator as - proposed by N4560 -* [issue 1896] - version 1.0? -* [issue 1895] - Warning comment on numa_allocator is not very clear -* [pr 1894] - Add support for compilers that have thread_local -* [pr 1893] - Fixing 1890 -* [pr 1892] - Adds typed future_type for executor_traits -* [pr 1891] - Fix wording in certain parallel algorithm docs -* [issue 1890] - Invoking papi counters give segfault -* [pr 1889] - Fixing problems as reported by clang-check -* [pr 1888] - WIP parallel is_heap -* [pr 1887] - Fixed resetting performance counters related to idle-rate, etc -* [issue 1886] - Run hpx with qsub does not work -* [pr 1885] - Warning cleaning pass -* [pr 1884] - Add missing parallel algorithm header -* [pr 1883] - Add feature test for thread_local on Clang for TLS -* [pr 1882] - Fix some redundant qualifiers -* [issue 1881] - Unable to compile Octotiger using HPX and Intel MPI on SuperMIC -* [issue 1880] - clang with libc++ on Linux needs TLS case -* [pr 1879] - Doc fixes for #1868 -* [pr 1878] - Simplify functions -* [pr 1877] - Removing most usage of Boost.Config -* [pr 1876] - Add missing parallel algorithms to algorithm.hpp -* [pr 1875] - Simplify callables -* [pr 1874] - Address long standing FIXME on using `std::unique_ptr` with - incomplete types -* [pr 1873] - Fixing 1871 -* [pr 1872] - Making sure PBS environment uses specified node list even if - no PBS_NODEFILE env is available -* [issue 1871] - Fortran checks should be optional -* [pr 1870] - Touch local::mutex -* [pr 1869] - Documentation refactoring based off #1868 -* [pr 1867] - Embrace static_assert -* [pr 1866] - Fix #1803 with documentation refactoring -* [pr 1865] - Setting OUTPUT_NAME as target properties -* [pr 1863] - Use SYSTEM for boost includes -* [pr 1862] - Minor cleanups -* [pr 1861] - Minor Corrections for Release -* [pr 1860] - Fixing hpx gdb script -* [issue 1859] - reset_active_counters resets times and thread counts before - some of the counters are evaluated -* [pr 1858] - Release V0.9.11 -* [pr 1857] - removing diskperf example from 9.11 release -* [pr 1856] - fix return in packaged_task_base::reset() -* [issue 1842] - Install error: file INSTALL cannot find - libhpx_parcel_coalescing.so.0.9.11 -* [pr 1839] - Adding fedora docs -* [pr 1824] - Changing version on master to V0.9.12 -* [pr 1818] - Fixing #1748 -* [issue 1815] - seg fault in AGAS -* [issue 1803] - wait_all documentation -* [issue 1796] - Outdated documentation to be revised -* [issue 1759] - glibc munmap_chunk or free(): invalid pointer on SuperMIC -* [issue 1753] - HPX performance degrades with time since execution begins -* [issue 1748] - All public HPX headers need to be self contained -* [pr 1719] - How to build HPX with Visual Studio -* [issue 1684] - Race condition when using --hpx:connect? -* [pr 1658] - Add serialization for std::set (as there is for std::vector - and std::map) -* [pr 1641] - Generic client -* [issue 1632] - heartbeat example fails on separate nodes -* [pr 1603] - Adds preferred namespace check to inspect tool -* [issue 1559] - Extend inspect tool -* [issue 1523] - Remote async with deferred launch policy never executes -* [issue 1472] - Serialization issues -* [issue 1457] - Implement N4392: C++ Latches and Barriers -* [pr 1444] - Enabling usage of moveonly types for component construction -* [issue 1407] - The Intel 13 compiler has failing unit tests -* [issue 1405] - Allow component constructors to take movable only types -* [issue 1265] - Enable dataflow() to be usable with actions -* [issue 1236] - NUMA aware allocators -* [issue 802] - Fix Broken Examples -* [issue 559] - Add hpx::migrate facility -* [issue 449] - Make actions with template arguments usable and add documentation -* [issue 279] - Refactor addressing_service into a base class and two derived - classes -* [issue 224] - Changing thread state metadata is not thread safe -* [issue 55] - Uniform syntax for enums should be implemented - [endsect] [/////////////////////////////////////////////////////////////////////////////] diff --git a/docs/whats_new_previous.qbk b/docs/whats_new_previous.qbk index 85e6f0d9cd85..3477bd54378a 100644 --- a/docs/whats_new_previous.qbk +++ b/docs/whats_new_previous.qbk @@ -1,5 +1,5 @@ [/============================================================================== - Copyright (C) 2007-2015 Hartmut Kaiser + Copyright (C) 2007-2016 Hartmut Kaiser Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -7,6 +7,601 @@ [section:hpx_previous Previous __hpx__ Releases] +[//////////////////////////////////////////////////////////////////////////////] +[section:hpx_0_9_99 __hpx__ V0.9.99 (Jul 15, 2016)] + +[heading General Changes] + +As the version number of this release hints, we consider this release +to be a preview +for the upcoming __hpx__ V1.0. All of the functionalities +we set out to implement for +V1.0 are in place; all of the features we wanted to have exposed are ready. We +are very happy with the stability and performance of __hpx__ and we would like +to present this release to the community in order for us to +gather broad feedback before releasing V1.0. +We still expect for some minor details to change, but +on the whole this release represents what we would like to have in a V1.0. + +Overall, since the last release we have had almost 1600 commits while closing +almost 400 tickets. These numbers reflect the incredible development activity +we have seen over the last couple of months. We would like to express a big +'Thank you!' to all contributors and those who helped to make this release +happen. + +The most notable addition in terms of new functionality available with this +release is the full implementation of object migration (i.e. the ability to +transparently move __hpx__ components to a different compute node). +Additionally, this release of __hpx__ cleans up many minor issues and some +API inconsistencies. + +Here are some of the main highlights and changes for this release (in no +particular order): + +* We have fixed a couple of issues in AGAS and the parcel layer which have + caused hangs, segmentation faults at exit, and a slowdown of applications + over time. Fixing those has significantly increased the overall stability + and performance of distributed runs. +* We have started to add parallel algorithm overloads based on the C++ + Extensions for Ranges (__cpp17_n4560__) proposal. This also includes the + addition of projections to the existing algorithms. Please see [issue 1668] + for a list of algorithms which have been adapted to __cpp17_n4560__. +* We have implemented index-based parallel for-loops based on a + corresponding standardization proposal (__cpp20_p0075r1__). Please see + [issue 2016] for a list of available algorithms. +* We have added implementations for more parallel algorithms as proposed for + the upcoming C++ 17 Standard. See [issue 1141] for an overview of which + algorithms are available by now. +* We have started to implement a new prototypical functionality with + __hpx_compute__ which uniformly exposes some of the higher level APIs to + heterogeneous architectures (currently CUDA). This functionality is an early + preview and should not be considered stable. It may change considerably in + the future. +* We have pervasively added (optional) executor arguments to all API functions + which schedule new work. Executors are now used throughout the code base as + the main means of executing tasks. +* Added `hpx::make_future(future &&)` allowing to convert a future of + any type `T` into a future of any other type `R`, either based on default + conversion rules of the embedded types or using a given explicit conversion + function. +* We finally finished the implementation of transparent migration of components + to another locality. It is now possible to trigger + a migration operation without 'stopping the world' for the object to migrate. + __hpx__ will make sure that no work is being performed on an object before it + is migrated and that all subsequently scheduled work for the migrated object + will be transparently forwarded to the new locality. Please note that the + global id of the migrated object does not change, thus the application will + not have to be changed in any way to support this new functionality. Please + note that this feature is currently considered experimental. See [issue 559] + and [pr 1966] for more details. +* The `hpx::dataflow` facility is now usable with actions. Similarly to + `hpx::async`, actions can be specified as an explicit template argument + (`hpx::dataflow(target, ...)`) or as the first argument + (`hpx::dataflow(Action(), target, ...)`). We have also enabled the use of + distribution policies as the target for dataflow invocations. Please see + [issue 1265] and [pr 1912] for more information. +* Adding overloads of `gather_here` and `gather_there` to accept the plain + values of the data to gather (in addition to the existing overloads expecting + futures). +* We have cleaned up and refactored large parts of the code base. This helped + reducing compile and link times of __hpx__ itself and also of applications + depending on it. We have further decreased the dependency of __hpx__ on the + Boost libraries by replacing part of those with facilities available from the + standard libraries. +* Wherever possible we have removed dependencies of our API on Boost by + replacing those with the equivalent facility from the C++11 standard library. +* We have added new performance counters for parcel coalescing, file-IO, the + AGAS cache, and overall scheduler time. Resetting performance counters has + been overhauled and fixed. +* We have introduced a generic client type `hpx::components::client<>` and + added support for using it with `hpx::async`. This removes the necessity to + implement specific client types for every component type without losing + type safety. This deemphasizes the need for using the low level `hpx::id_type` + for referencing (possibly remote) component instances. The plan is to + deprecate the direct use of `hpx::id_type` in user code in the future. +* We have added a special iterator which supports automatic prefetching of + one or more arrays for speeding up loop-like code (see + `hpx::parallel::util::make_prefetcher_context()`). +* We have extended the interfaces exposed from executors (as proposed by + __cpp11_n4406__) to accept an arbitrary number of arguments. + +[heading Breaking Changes] + +* In order to move the dataflow facility to `namespace hpx` we added a + definition of `hpx::dataflow` which might create ambiguities in existing + codes. The previous definition of this facility (`hpx::lcos::local::dataflow`) + has been deprecated and is available only if the constant + `-DHPX_WITH_LOCAL_DATAFLOW_COMPATIBILITY=On` to __cmake __ is defined at + configuration time. + Please explicitly qualify all uses of the dataflow facility if you enable + this compatibility setting and encounter ambiguities. +* The adaptation of the C++ Extensions for Ranges (__cpp17_n4560__) proposal + imposes some breaking changes related to the return types of some of the + parallel algorithms. Please see [issue 1668] for a list of algorithms which + have already been adapted. +* The facility `hpx::lcos::make_future_void()` has been replaced by + `hpx::make_future()`. +* We have removed support for Intel V13 and gcc 4.4.x. +* We have removed (default) support for the generic + `hpx::parallel::execution_poliy` because it was removed from the Parallelism + TS (__cpp11_n4104__) while it was being added to the upcoming C++17 Standard. + This facility can be still enabled at configure time by specifying + `-DHPX_WITH_GENERIC_EXECUTION_POLICY=On` to __cmake__. +* Uses of `boost::shared_ptr` and related facilities have been replaced with + `std::shared_ptr` and friends. Uses of `boost::unique_lock`, + `boost::lock_guard` etc. have also been replaced by the equivalent (and + equally named) tools available from the C++11 standard library. +* Facilities that used to expect an explicit `boost::unique_lock` now take an + `std::unique_lock`. Additionally, `condition_variable` no longer aliases + `condition_variable_any`; its interface now only works with + `std::unique_lock`. +* Uses of `boost::function`, `boost::bind`, `boost::tuple` have been replaced + by the corresponding facilities in __hpx__ (`hpx::util::function`, + `hpx::util::bind`, and `hpx::util::tuple`, respectively). + +[heading Bug Fixes (Closed Tickets)] + +Here is a list of the important tickets we closed for this release. + +* [pr 2250] - change default chunker of parallel executor to static one +* [pr 2247] - HPX on ppc64le +* [pr 2244] - Fixing MSVC problems +* [pr 2238] - Fixing small typos +* [pr 2237] - Fixing small typos +* [pr 2234] - Fix broken add test macro when extra args are passed in +* [pr 2231] - Fixing possible race during future awaiting in serialization +* [pr 2230] - Fix stream nvcc +* [pr 2229] - Fixed run_as_hpx_thread +* [pr 2228] - On prefetching_test branch : adding prefetching_iterator and + related tests used for prefetching containers within lambda + functions +* [pr 2227] - Support for HPXCL's opencl::event +* [pr 2226] - Preparing for release of V0.9.99 +* [pr 2225] - fix issue when compiling components with hpxcxx +* [pr 2224] - Compute alloc fix +* [pr 2223] - Simplify promise +* [pr 2222] - Replace last uses of boost::function by util::function_nonser +* [pr 2221] - Fix config tests +* [pr 2220] - Fixing gcc 4.6 compilation issues +* [pr 2219] - nullptr support for [unique_]function +* [pr 2218] - Introducing clang tidy +* [pr 2216] - Replace NULL with nullptr +* [issue 2214] - Let inspect flag use of NULL, suggest nullptr instead +* [pr 2213] - Require support for nullptr +* [pr 2212] - Properly find jemalloc through pkg-config +* [pr 2211] - Disable a couple of warnings reported by Intel on Windows +* [pr 2210] - Fixed host::block_allocator::bulk_construct +* [pr 2209] - Started to clean up new sort algorithms, made things compile + for sort_by_key +* [pr 2208] - A couple of fixes that were exposed by a new sort algorithm +* [pr 2207] - Adding missing includes in /hpx/include/serialization.hpp +* [pr 2206] - Call package_action::get_future before package_action::apply +* [pr 2205] - The indirect_packaged_task::operator() needs to be run on a + HPX thread +* [pr 2204] - Variadic executor parameters +* [pr 2203] - Delay-initialize members of partitoned iterator +* [pr 2202] - Added segmented fill for hpx::vector +* [issue 2201] - Null Thread id encountered on partitioned_vector +* [pr 2200] - Fix hangs +* [pr 2199] - Deprecating hpx/traits.hpp +* [pr 2198] - Making explicit inclusion of external libraries into build +* [pr 2197] - Fix typo in QT CMakeLists +* [pr 2196] - Fixing a gcc warning about attributes being ignored +* [pr 2194] - Fixing partitioned_vector_spmd_foreach example +* [issue 2193] - partitioned_vector_spmd_foreach seg faults +* [pr 2192] - Support Boost.Thread v4 +* [pr 2191] - HPX.Compute prototype +* [pr 2190] - Spawning operation on new thread if remaining stack space + becomes too small +* [pr 2189] - Adding callback taking index and future to when_each +* [pr 2188] - Adding new example demonstrating receive_buffer +* [pr 2187] - Mask 128-bit ints if CUDA is being used +* [pr 2186] - Make startup & shutdown functions unique_function +* [pr 2185] - Fixing logging output not to cause hang on shutdown +* [pr 2184] - Allowing component clients as action return types +* [issue 2183] - Enabling logging output causes hang on shutdown +* [issue 2182] - 1d_stencil seg fault +* [issue 2181] - Setting small stack size does not change default +* [pr 2180] - Changing default bind mode to balanced +* [pr 2179] - adding prefetching_iterator and related tests used for + prefetching containers within lambda functions +* [pr 2177] - Fixing 2176 +* [issue 2176] - Launch process test fails on OSX +* [pr 2175] - Fix unbalanced config/warnings includes, add some new ones +* [pr 2174] - Fix test categorization : regression not unit +* [issue 2172] - Different performance results +* [issue 2171] - "negative entry in reference count table" running octotiger on + 32 nodes on queenbee +* [issue 2170] - Error while compiling on Mac + boost 1.60 +* [pr 2168] - Fixing problems with is_bitwise_serializable +* [issue 2167] - startup & shutdown function should accept unique_function +* [issue 2166] - Simple receive_buffer example +* [pr 2165] - Fix wait all +* [pr 2164] - Fix wait all +* [pr 2163] - Fix some typos in config tests +* [pr 2162] - Improve #includes +* [pr 2160] - Add inspect check for missing #include +* [pr 2159] - Add missing finalize call to stop test hanging +* [pr 2158] - Algo fixes +* [pr 2157] - Stack check +* [issue 2156] - OSX reports stack space incorrectly (generic context coroutines) +* [issue 2155] - Race condition suspected in runtime +* [pr 2154] - Replace boost::detail::atomic_count with the new + util::atomic_count +* [pr 2153] - Fix stack overflow on OSX +* [pr 2152] - Define is_bitwise_serializable as is_trivially_copyable when + available +* [pr 2151] - Adding missing for std::mem* functions +* [issue 2150] - Unable to use component clients as action return types +* [pr 2149] - std::memmove copies bytes, use bytes*sizeof(type) when copying + larger types +* [pr 2146] - Adding customization point for parallel copy/move +* [pr 2145] - Applying changes to address warnings issued by latest version + of PVS Studio +* [issue 2148] - hpx::parallel::copy is broken after trivially copyable changes +* [pr 2144] - Some minor tweaks to compute prototype +* [pr 2143] - Added Boost version support information over OSX platform +* [pr 2142] - Fixing memory leak in example +* [pr 2141] - Add missing specializations in execution policies +* [pr 2139] - This PR fixes a few problems reported by Clang's Undefined + Behavior sanitizer +* [pr 2138] - Revert "Adding fedora docs" +* [pr 2136] - Removed double semicolon +* [pr 2135] - Add deprecated #include check for hpx_fwd.hpp +* [pr 2134] - Resolved memory leak in stencil_8 +* [pr 2133] - Replace uses of boost pointer containers +* [pr 2132] - Removing unused typedef +* [pr 2131] - Add several include checks for std facilities +* [pr 2130] - Fixing parcel compression, adding test +* [pr 2129] - Fix invalid attribute warnings +* [issue 2128] - hpx::init seems to segfault +* [pr 2127] - Making executor_traits N-nary +* [pr 2126] - GCC 4.6 fails to deduce the correct type in lambda +* [pr 2125] - Making parcel coalescing test actually test something +* [issue 2124] - Make a testcase for parcel compression +* [issue 2123] - hpx/hpx/runtime/applier_fwd.hpp - Multiple defined types +* [issue 2122] - Exception in primary_namespace::resolve_free_list +* [issue 2121] - Possible memory leak in 1d_stencil_8 +* [pr 2120] - Fixing 2119 +* [issue 2119] - reduce_by_key compilation problems +* [issue 2118] - Premature unwrapping of boost::ref'ed arguments +* [pr 2117] - Added missing initializer on last constructor for + thread_description +* [pr 2116] - Use a lightweight bind implementation when no placeholders are + given +* [pr 2115] - Replace boost::shared_ptr with std::shared_ptr +* [pr 2114] - Adding hook functions for executor_parameter_traits supporting timers +* [issue 2113] - Compilation error with gcc version 4.9.3 (MacPorts gcc49 4.9.3_0) +* [pr 2112] - Replace uses of safe_bool with explicit operator bool +* [issue 2111] - Compilation error on QT example +* [issue 2110] - Compilation error when passing non-future argument to unwrapped + continuation in dataflow +* [issue 2109] - Warning while compiling hpx +* [issue 2109] - Stack trace of last bug causing issues with octotiger +* [issue 2108] - Stack trace of last bug causing issues with octotiger +* [pr 2107] - Making sure that a missing parcel_coalescing module does not + cause startup exceptions +* [pr 2106] - Stop using hpx_fwd.hpp +* [issue 2105] - coalescing plugin handler is not optional any more +* [issue 2104] - Make executor_traits N-nary +* [issue 2103] - Build error with octotiger and hpx commit e657426d +* [pr 2102] - Combining thread data storage +* [pr 2101] - Added repartition version of 1d stencil that uses any + performance counter +* [pr 2100] - Drop obsolete TR1 result_of protocol +* [pr 2099] - Replace uses of boost::bind with util::bind +* [pr 2098] - Deprecated inspect checks +* [pr 2097] - Reduce by key, extends #1141 +* [pr 2096] - Moving local cache from external to hpx/util +* [pr 2095] - Bump minimum required Boost to 1.50.0 +* [pr 2094] - Add include checks for several Boost utilities +* [issue 2093] - /.../local_cache.hpp(89): error #303: explicit type is missing + ("int" assumed) +* [pr 2091] - Fix for Raspberry pi build +* [pr 2090] - Fix storage size for util::function<> +* [pr 2089] - Fix #2088 +* [issue 2088] - More verbose output from cmake configuration +* [pr 2087] - Making sure init_globally always executes hpx_main +* [issue 2086] - Race condition with recent HPX +* [pr 2085] - Adding #include checker +* [pr 2084] - Replace boost lock types with standard library ones +* [pr 2083] - Simplify packaged task +* [pr 2082] - Updating APEX version for testing +* [pr 2081] - Cleanup exception headers +* [pr 2080] - Make call_once variadic +* [issue 2079] - With GNU C++, line 85 of hpx/config/version.hpp causes link + failure when linking application +* [issue 2078] - Simple test fails with _GLIBCXX_DEBUG defined +* [pr 2077] - Instantiate board in nqueen client +* [pr 2076] - Moving coalescing registration to TUs +* [pr 2075] - Fixed some documentation typos +* [pr 2074] - Adding flush-mode to message handler flush +* [pr 2073] - Fixing performance regression introduced lately +* [pr 2072] - Refactor local::condition_variable +* [pr 2071] - Timer based on boost::asio::deadline_timer +* [pr 2070] - Refactor tuple based functionality +* [pr 2069] - Fixed typos +* [issue 2068] - Seg fault with octotiger +* [pr 2067] - Algorithm cleanup +* [pr 2066] - Split credit fixes +* [pr 2065] - Rename HPX_MOVABLE_BUT_NOT_COPYABLE to HPX_MOVABLE_ONLY +* [pr 2064] - Fixed some typos in docs +* [pr 2063] - Adding example demonstrating template components +* [issue 2062] - Support component templates +* [pr 2061] - Replace some uses of lexical_cast with C++11 + std::to_string +* [pr 2060] - Replace uses of boost::noncopyable with HPX_NON_COPYABLE +* [pr 2059] - Adding missing for_loop algorithms +* [pr 2058] - Move several definitions to more appropriate headers +* [pr 2057] - Simplify assert_owns_lock and ignore_while_checking +* [pr 2056] - Replacing std::result_of with util::result_of +* [pr 2055] - Fix process launching/connecting back +* [pr 2054] - Add a forwarding coroutine header +* [pr 2053] - Replace uses of boost::unordered_map with std::unordered_map +* [pr 2052] - Rewrite tuple unwrap +* [pr 2050] - Replace uses of BOOST_SCOPED_ENUM with C++11 scoped enums +* [pr 2049] - Attempt to narrow down split_credit problem +* [pr 2048] - Fixing gcc startup hangs +* [pr 2047] - Fixing when_xxx and wait_xxx for MSVC12 +* [pr 2046] - adding persistent_auto_chunk_size and related tests for for_each +* [pr 2045] - Fixing HPX_HAVE_THREAD_BACKTRACE_DEPTH build time configuration +* [pr 2044] - Adding missing service executor types +* [pr 2043] - Removing ambiguous definitions for is_future_range and + future_range_traits +* [pr 2042] - Clarify that HPX builds can use (much) more than 2GB per process +* [pr 2041] - Changing future_iterator_traits to support pointers +* [issue 2040] - Improve documentation memory usage warning? +* [pr 2039] - Coroutine cleanup +* [pr 2038] - Fix cmake policy CMP0042 warning MACOSX_RPATH +* [pr 2037] - Avoid redundant specialization of [unique_]function_nonser +* [pr 2036] - nvcc dies with an internal error upon pushing/popping warnings + inside templates +* [issue 2035] - Use a less restrictive iterator definition in + hpx::lcos::detail::future_iterator_traits +* [pr 2034] - Fixing compilation error with thread queue wait time + performance counter +* [issue 2033] - Compilation error when compiling with thread queue waittime + performance counter +* [issue 2032] - Ambiguous template instantiation for is_future_range and + future_range_traits. +* [pr 2031] - Don't restart timer on every incoming parcel +* [pr 2030] - Unify handling of execution policies in parallel algorithms +* [pr 2029] - Make pkg-config .pc files use .dylib on OSX +* [pr 2028] - Adding process component +* [pr 2027] - Making check for compiler compatibility independent on compiler + path +* [pr 2025] - Fixing inspect tool +* [pr 2024] - Intel13 removal +* [pr 2023] - Fix errors related to older boost versions and parameter pack + expansions in lambdas +* [issue 2022] - gmake fail: "No rule to make target + /usr/lib46/libboost_context-mt.so" +* [pr 2021] - Added Sudoku example +* [issue 2020] - Make errors related to init_globally.cpp example while building + HPX out of the box +* [pr 2019] - Fixed some compilation and cmake errors encountered in nqueen + example +* [pr 2018] - For loop algorithms +* [pr 2017] - Non-recursive at_index implementation +* [issue 2016] - Add index-based for-loops +* [issue 2015] - Change default bind-mode to balanced +* [pr 2014] - Fixed dataflow if invoked action returns a future +* [pr 2013] - Fixing compilation issues with external example +* [pr 2012] - Added Sierpinski Triangle example +* [issue 2011] - Compilation error while running sample hello_world_component code +* [pr 2010] - Segmented move implemented for hpx::vector +* [issue 2009] - pkg-config order incorrect on 14.04 / GCC 4.8 +* [issue 2008] - Compilation error in dataflow of action returning a future +* [pr 2007] - Adding new performance counter exposing overall scheduler time +* [pr 2006] - Function includes +* [pr 2005] - Adding an example demonstrating how to initialize HPX from a + global object +* [pr 2004] - Fixing 2000 +* [pr 2003] - Adding generation parameter to gather to enable using it more + than once +* [pr 2002] - Turn on position independent code to solve link problem with + hpx_init +* [issue 2001] - Gathering more than once segfaults +* [issue 2000] - Undefined reference to hpx::assertion_failed +* [issue 1999] - Seg fault in hpx::lcos::base_lco_with_value<*>::set_value_nonvirt() + when running octo-tiger +* [pr 1998] - Detect unknown command line options +* [pr 1997] - Extending thread description +* [pr 1996] - Adding natvis files to solution (MSVC only) +* [issue 1995] - Command line handling does not produce error +* [pr 1994] - Possible missing include in test_utils.hpp +* [pr 1993] - Add missing LANGUAGES tag to a hpx_add_compile_flag_if_available() + call in CMakeLists.txt +* [pr 1992] - Fixing shared_executor_test +* [pr 1991] - Making sure the winsock library is properly initialized +* [pr 1990] - Fixing bind_test placeholder ambiguity coming from boost-1.60 +* [pr 1989] - Performance tuning +* [pr 1987] - Make configurable size of internal storage in util::function +* [pr 1986] - AGAS Refactoring+1753 Cache mods +* [pr 1985] - Adding missing task_block::run() overload taking an executor +* [pr 1984] - Adding an optimized LRU Cache implementation (for AGAS) +* [pr 1983] - Avoid invoking migration table look up for all objects +* [pr 1981] - Replacing uintptr_t (which is not defined everywhere) with + std::size_t +* [pr 1980] - Optimizing LCO continuations +* [pr 1979] - Fixing Cori +* [pr 1978] - Fix test check that got broken in hasty fix to memory overflow +* [pr 1977] - Refactor action traits +* [pr 1976] - Fixes typo in README.rst +* [pr 1975] - Reduce size of benchmark timing arrays to fix test failures +* [pr 1974] - Add action to update data owned by the partitioned_vector + component +* [pr 1972] - Adding partitioned_vector SPMD example +* [pr 1971] - Fixing 1965 +* [pr 1970] - Papi fixes +* [pr 1969] - Fixing continuation recursions to not depend on fixed amount + of recursions +* [pr 1968] - More segmented algorithms +* [issue 1967] - Simplify component implementations +* [pr 1966] - Migrate components +* [issue 1964] - fatal error: 'boost/lockfree/detail/branch_hints.hpp' file + not found +* [issue 1962] - parallel:copy_if has race condition when used on in place + arrays +* [pr 1963] - Fixing Static Parcelport initialization +* [pr 1961] - Fix function target +* [issue 1960] - Papi counters don't reset +* [pr 1959] - Fixing 1958 +* [issue 1958] - inclusive_scan gives incorrect results with non-commutative + operator +* [pr 1957] - Fixing #1950 +* [pr 1956] - Sort by key example +* [pr 1955] - Adding regression test for #1946: Hang in wait_all() in + distributed run +* [issue 1954] - HPX releases should not use -Werror +* [pr 1953] - Adding performance analysis for AGAS cache +* [pr 1952] - Adapting test for explicit variadics to fail for gcc 4.6 +* [pr 1951] - Fixing memory leak +* [issue 1950] - Simplify external builds +* [pr 1949] - Fixing yet another lock that is being held during suspension +* [pr 1948] - Fixed container algorithms for Intel +* [pr 1947] - Adding workaround for tagged_tuple +* [issue 1946] - Hang in wait_all() in distributed run +* [pr 1945] - Fixed container algorithm tests +* [issue 1944] - assertion 'p.destination_locality() == hpx::get_locality()' + failed +* [pr 1943] - Fix a couple of compile errors with clang +* [pr 1942] - Making parcel coalescing functional +* [issue 1941] - Re-enable parcel coalescing +* [pr 1940] - Touching up make_future +* [pr 1939] - Fixing problems in over-subscription management in the + resource manager +* [pr 1938] - Removing use of unified Boost.Thread header +* [pr 1937] - Cleaning up the use of Boost.Accumulator headers +* [pr 1936] - Making sure interval timer is started for aggregating + performance counters +* [pr 1935] - Tagged results +* [pr 1934] - Fix remote async with deferred launch policy +* [issue 1933] - Floating point exception in + `statistics_counter::get_counter_value` +* [pr 1932] - Removing superfluous includes of + boost/lockfree/detail/branch_hints.hpp +* [pr 1931] - fix compilation with clang 3.8.0 +* [issue 1930] - Missing online documentation for HPX 0.9.11 +* [pr 1929] - LWG2485: get() should be overloaded for const tuple&& +* [pr 1928] - Revert "Using ninja for circle-ci builds" +* [pr 1927] - Using ninja for circle-ci builds +* [pr 1926] - Fixing serialization of std::array +* [issue 1925] - Issues with static HPX libraries +* [issue 1924] - Peformance degrading over time +* [issue 1923] - serialization of std::array appears broken in latest commit +* [pr 1922] - Container algorithms +* [pr 1921] - Tons of smaller quality improvements +* [issue 1920] - Seg fault in hpx::serialization::output_archive::add_gid when + running octotiger +* [issue 1919] - Intel 15 compiler bug preventing HPX build +* [pr 1918] - Address sanitizer fixes +* [pr 1917] - Fixing compilation problems of parallel::sort with Intel + compilers +* [pr 1916] - Making sure code compiles if HPX_WITH_HWLOC=Off +* [issue 1915] - max_cores undefined if HPX_WITH_HWLOC=Off +* [pr 1913] - Add utility member functions for partitioned_vector +* [pr 1912] - Adding support for invoking actions to dataflow +* [pr 1911] - Adding first batch of container algorithms +* [pr 1910] - Keep cmake_module_path +* [pr 1909] - Fix mpirun with pbs +* [pr 1908] - Changing parallel::sort to return the last iterator as + proposed by N4560 +* [pr 1907] - Adding a minimum version for Open MPI +* [pr 1906] - Updates to the Release Procedure +* [pr 1905] - Fixing #1903 +* [pr 1904] - Making sure std containers are cleared before serialization + loads data +* [issue 1903] - When running octotiger, I get: assertion + '(*new_gids_)[gid].size() == 1' failed: HPX(assertion_failure) +* [issue 1902] - Immediate crash when running hpx/octotiger with _GLIBCXX_DEBUG + defined. +* [pr 1901] - Making non-serializable classes non-serializable +* [issue 1900] - Two possible issues with std::list serialization +* [pr 1899] - Fixing a problem with credit splitting as revealed by #1898 +* [issue 1898] - Accessing component from locality where it was not created + segfaults +* [pr 1897] - Changing parallel::sort to return the last iterator as + proposed by N4560 +* [issue 1896] - version 1.0? +* [issue 1895] - Warning comment on numa_allocator is not very clear +* [pr 1894] - Add support for compilers that have thread_local +* [pr 1893] - Fixing 1890 +* [pr 1892] - Adds typed future_type for executor_traits +* [pr 1891] - Fix wording in certain parallel algorithm docs +* [issue 1890] - Invoking papi counters give segfault +* [pr 1889] - Fixing problems as reported by clang-check +* [pr 1888] - WIP parallel is_heap +* [pr 1887] - Fixed resetting performance counters related to idle-rate, etc +* [issue 1886] - Run hpx with qsub does not work +* [pr 1885] - Warning cleaning pass +* [pr 1884] - Add missing parallel algorithm header +* [pr 1883] - Add feature test for thread_local on Clang for TLS +* [pr 1882] - Fix some redundant qualifiers +* [issue 1881] - Unable to compile Octotiger using HPX and Intel MPI on SuperMIC +* [issue 1880] - clang with libc++ on Linux needs TLS case +* [pr 1879] - Doc fixes for #1868 +* [pr 1878] - Simplify functions +* [pr 1877] - Removing most usage of Boost.Config +* [pr 1876] - Add missing parallel algorithms to algorithm.hpp +* [pr 1875] - Simplify callables +* [pr 1874] - Address long standing FIXME on using `std::unique_ptr` with + incomplete types +* [pr 1873] - Fixing 1871 +* [pr 1872] - Making sure PBS environment uses specified node list even if + no PBS_NODEFILE env is available +* [issue 1871] - Fortran checks should be optional +* [pr 1870] - Touch local::mutex +* [pr 1869] - Documentation refactoring based off #1868 +* [pr 1867] - Embrace static_assert +* [pr 1866] - Fix #1803 with documentation refactoring +* [pr 1865] - Setting OUTPUT_NAME as target properties +* [pr 1863] - Use SYSTEM for boost includes +* [pr 1862] - Minor cleanups +* [pr 1861] - Minor Corrections for Release +* [pr 1860] - Fixing hpx gdb script +* [issue 1859] - reset_active_counters resets times and thread counts before + some of the counters are evaluated +* [pr 1858] - Release V0.9.11 +* [pr 1857] - removing diskperf example from 9.11 release +* [pr 1856] - fix return in packaged_task_base::reset() +* [issue 1842] - Install error: file INSTALL cannot find + libhpx_parcel_coalescing.so.0.9.11 +* [pr 1839] - Adding fedora docs +* [pr 1824] - Changing version on master to V0.9.12 +* [pr 1818] - Fixing #1748 +* [issue 1815] - seg fault in AGAS +* [issue 1803] - wait_all documentation +* [issue 1796] - Outdated documentation to be revised +* [issue 1759] - glibc munmap_chunk or free(): invalid pointer on SuperMIC +* [issue 1753] - HPX performance degrades with time since execution begins +* [issue 1748] - All public HPX headers need to be self contained +* [pr 1719] - How to build HPX with Visual Studio +* [issue 1684] - Race condition when using --hpx:connect? +* [pr 1658] - Add serialization for std::set (as there is for std::vector + and std::map) +* [pr 1641] - Generic client +* [issue 1632] - heartbeat example fails on separate nodes +* [pr 1603] - Adds preferred namespace check to inspect tool +* [issue 1559] - Extend inspect tool +* [issue 1523] - Remote async with deferred launch policy never executes +* [issue 1472] - Serialization issues +* [issue 1457] - Implement N4392: C++ Latches and Barriers +* [pr 1444] - Enabling usage of moveonly types for component construction +* [issue 1407] - The Intel 13 compiler has failing unit tests +* [issue 1405] - Allow component constructors to take movable only types +* [issue 1265] - Enable dataflow() to be usable with actions +* [issue 1236] - NUMA aware allocators +* [issue 802] - Fix Broken Examples +* [issue 559] - Add hpx::migrate facility +* [issue 449] - Make actions with template arguments usable and add documentation +* [issue 279] - Refactor addressing_service into a base class and two derived + classes +* [issue 224] - Changing thread state metadata is not thread safe +* [issue 55] - Uniform syntax for enums should be implemented + +[endsect] + [//////////////////////////////////////////////////////////////////////////////] [section:hpx_0_9_11 __hpx__ V0.9.11 (Nov 11, 2015)]