HPX V1.4.0 (January 15, 2020)
Contents
HPX V1.4.0 (January 15, 2020)#
General changes#
We have added the collectives
all_to_allandall_reduce.We have added APIs for resiliency, which allows replication and replay for failed tasks. See the documentation for more details.
Components can now be checkpointed.
Performance improvements to schedulers and coroutines. A significant change is the addition of stackless coroutines. These are to be used for tasks that do not need to be suspended and can reduce overheads noticeably in applications with short tasks. A stackless coroutine can be created with the new stack size
thread_stacksize_nostack.We have added an implementation of
unique_any, which is a non-copyable version ofany.The
shared_priority_queue_schedulerhas been improved. It now has lower overheads than the default scheduler in many situations. Unlike the default scheduler it fully supports NUMA scheduling hints. Enable it with the command line option--hpx:queuing=shared-priority. This scheduler should still be considered experimental, but its use is encouraged in real applications to help us make it production ready.We have added the performance counters
background-receive-durationandbackground-receive-overheadfor inspecting the time and overhead spent on receiving parcels in the background.Compilation time has been further improved when
HPX_WITH_NETWORKING=OFF.We no longer require compiled Boost dependencies in certain configurations. This requires at least Boost 1.70, compiling on x86 with GCC 9, clang (libc++) 9, or VS2019 in C++17 mode. The dependency on Boost.Filesystem can explicitly be turned on with
HPX_FILESYSTEM_WITH_BOOST_FILESYSTEM_COMPATIBILITY=ON(it is off by default if the standard library supportsstd::filesystem). Boost.ProgramOptions has been copied into the HPX repository. We have a compatibility layer for users who must explicitly use Boost.ProgramOptions instead of the ProgramOptions provided by HPX. To remove the dependencyHPX_PROGRAM_OPTIONS_WITH_BOOST_PROGRAM_OPTIONS_COMPATIBILITYmust be explicitly set toOFF. This option will be removed in a future release. We have also removed several other header-only dependencies on Boost.It is now possible to use the process affinity mask set by tools like
numactland various batch environments with the command line option--hpx:use-process-mask. Enabling this option implies--hpx:ignore-batch-env.It is now possible to create standalone thread pools without starting the runtime. See the
standalone_thread_pool_executor.cpptest in theexecutionmodule for an example.Tasks annotated with
hpx::util::annotated_functionnow have their correct name when using APEX to generate OTF2 files.Cloning of APEX was defective in previous releases (it required manual intervention to check out the correct tag or branch). This has been fixed.
The option
HPX_WITH_MORE_THAN_64_THREADSis now ignored and will be removed in a future release. The value is instead derived directly fromHPX_WITH_MAX_CPU_COUNToption.We have deprecated compiling in C++11 mode. The next release will require a C++14 capable compiler.
We have deprecated support for the Vc library. This option will be replaced with SIMD support from the standard library in a future release.
We have significantly refactored our CMake setup. This is intended to be a non-breaking change and will allow for using HPX through CMake targets in the future.
We have continued modularizing the HPX library. In the process we have rearranged many header files into module-specific directories. All moved headers have compatibility headers which forward from the old location to the new location, together with a deprecation warning. The compatibility headers will eventually be removed.
We now enforce formatting with
clang-formaton the majority of our source files.We have added SPDX license tags to all files.
Many bugfixes.
Breaking changes#
The
HPX_WITH_THREAD_COMPATIBILITYoption and the associated compatibility layer has been removed.The
HPX_WITH_INCLUSIVE_SCAN_COMPATIBILITYoption and the associated compatibility layer has been removed.The
HPX_WITH_UNWRAPPED_COMPATIBLITYoption and the associated compatibility layer has been removed.
Closed issues#
Issue #4282 - Build Issues with Release on Windows
Issue #4278 - Build Issues with CMake 3.14.4
Issue #4273 - Clients of HPX 1.4.0-rc2 with APEX ar not linked to libhpx-apex
Issue #4269 - Building HPX 1.4.0-rc2 with support for APEX fails
Issue #4263 - Compilation fail on latest master
Issue #4232 - Configure of HPX project using CMake FetchContent fails
Issue #4223 - “Re-using the main() function as the main HPX entry point” doesn’t work
Issue #4220 - HPX won’t compile - error building
resource_partitionerIssue #4215 - HPX 1.4.0rc1 does not link on s390x
Issue #4204 - Trouble compiling HPX with Intel compiler
Issue #4199 - Refactor APEX to eliminate circular dependency
Issue #4187 - HPX can’t build on OSX
Issue #4185 - Simple debug output for development
Issue #4182 -
@HPX_CONF_PREFIX@is the empty stringIssue #4169 - HPX won’t build with APEX
Issue #4163 - Add back
HPX_LIBRARIESandHPX_INCLUDE_DIRSIssue #4161 - It should be possible to call
find_package(HPX)multiple timesIssue #4155 -
get_self_id()for stackless threads returnsinvalid_thread_idIssue #4151 - build error with MPI code
Issue #4150 - hpx won’t build on POWER9 with clang 8
Issue #4148 -
cacheline_datadelivers poor performance with C++17 compared to C++14Issue #4144 - target general in
HPX_LIBRARIESdoes not existIssue #4134 - CMake Error when
-DHPX_WITH_HPXMP=ONIssue #4132 - parallel fill leaves elements unfilled
Issue #4123 - PAPI performance counters are inaccessible
Issue #4118 -
static_chunk_sizeis not obeyed in scan algorithmsIssue #4115 - dependency chaining error with APEX
Issue #4107 - Initializing runtime without entry point function and command line arguments
Issue #4105 - Bug in
hpx:bind=numa-balancedIssue #4101 - Bound tasks
Issue #4100 - Add SPDX identifier to all files
Issue #4085 -
hpx_topologylibrary should depend on hwlocIssue #4067 - HPX fails to build on macOS
Issue #4056 - Building without thread manager idle backoff fails
Issue #4052 - Enforce
clang-formatstyle for modulesIssue #4032 - Simple hello world fails to launch correctly
Issue #4030 - Allow threads to skip context switching
Issue #4029 - Add support for mimalloc
Issue #4005 - Can’t link HPX when APEX enabled
Issue #4002 - Missing header for algorithm module
Issue #3989 - conversion from
longtounsigned intrequires a narrowing conversion on MSVCIssue #3958 -
/statistics/average@perf counter can’t be createdIssue #3953 - CMake errors from
HPX_AddPseudoDependenciesIssue #3941 - CMake error for APEX install target
Issue #3940 - Convert pseudo-doxygen function documentation into actual doxygen documentation
Issue #3935 - HPX compiler match too strict?
Issue #3929 - Buildbot failures on latest HPX stable
Issue #3912 - I recommend publishing a version that does not depend on the boost library
Issue #3890 -
hpx.ininot workingIssue #3883 - cuda compilation fails because of
-faligned-newIssue #3879 - HPX fails to configure with
-DHPX_WITH_TESTS=OFFIssue #3871 -
dataflowdoes not support void allocatorsIssue #3867 - Latest HTML docs placed in wrong directory on GitHub pages
Issue #3866 - Make sure all tests use
HPX_TEST*macros and notHPX_ASSERTIssue #3857 - CMake all-keyword or all-plain for
target_link_librariesIssue #3856 -
hpx_setup_targetadds rogue flagsIssue #3850 - HPX fails to build on POWER8 with Clang7
Issue #3848 - Remove
lvamember fromthread_init_dataIssue #3838 -
hpx::parallel::count/count_iffailing testsIssue #3651 -
hpx::parallel::transform_reducewith non const reference as lambda parameterIssue #3560 - Apex integration with HPX not working properly
Issue #3322 - No warning when mixing debug/release builds
Closed pull requests#
PR #4300 - Checks for
MPI_Initbeing called twicePR #4299 - Small CMake fixes
PR #4298 - Remove extra call to annotate function that messes up traces
PR #4296 - Fixing collectives locking problem
PR #4295 - Do not check
LICENSE_1_0.txtfor inspect violationsPR #4293 - Applying two small changes fixing carious MSVC/Windows problems
PR #4285 - Delete
apex.hppPR #4276 - Disable doxygen generation for
hpx/debugging/print.hppfilePR #4275 - Make sure APEX is linked to even when not explicitly referenced
PR #4272 - Fix pushing of documentation
PR #4271 - Updating APEX tag, don’t create new task_wrapper on
operator=of hpx_thread objectPR #4268 - Testing for noexcept function specializations in C++11/14 mode
PR #4267 - Fixing MSVC warning
PR #4266 - Make sure macOS Travis CI fails if build step fails
PR #4264 - Clean up compatibility header options
PR #4262 - Cleanup modules
CMakeLists.txtPR #4261 - Fixing HPX/APEX linking and dependencies for external projects like Phylanx
PR #4260 - Fix docs compilation problems
PR #4258 - Couple of minor changes
PR #4257 - Fix apex annotation for async dispatch
PR #4256 - Remove lambdas from assert expressions
PR #4255 - Ignoring lock in
all_to_allandall_reducePR #4254 - Adding action specializations for noexcept functions
PR #4253 - Move
partlit.hppto affinity modulePR #4252 - Make mismatching build types a hard error in CMake
PR #4249 - Scheduler improvement
PR #4248 - update hpxmp tag to v0.3.0
PR #4245 - Adding high performance channels
PR #4244 - Ignore lock in ignore_while_locked_1485 test
PR #4243 - Fix PAPI command line option documentation
PR #4242 - Ignore lock in target_distribution_policy
PR #4241 - Fix
start_stop_callbackstestPR #4240 - Mostly fix clang CUDA compilation
PR #4238 - Google Season of Docs updates to documentation; grammar edits.
PR #4237 - fixing annotated task to use the name, not the desc
PR #4236 - Move module print summary to modules
PR #4235 - Don’t use alignas in
cache_{aligned,line}_dataPR #4234 - Add basic overview sentence to all modules
PR #4230 - Add OS X builds to Travis CI
PR #4229 - Remove leftover queue compatibility checks
PR #4226 - Fixing APEX shutdown by explicitly shutting down throttling
PR #4225 - Allow
CMAKE_INSTALL_PREFIXto be a relative pathPR #4224 - Deprecate verbs parcelport
PR #4222 - Update
register_{thread,work}namespacesPR #4221 - Changing
HPX_GCC_VERSIONcheck from70000to70300PR #4218 - Google Season of Docs updates to documentation; grammar edits.
PR #4217 - Google Season of Docs updates to documentation; grammar edits.
PR #4216 - Fixing gcc warning on 32bit platforms (integer truncation)
PR #4214 - Apex callback refactoring
PR #4213 - Clean up allocator checks for dependent projects
PR #4212 - Google Season of Docs updates to documentation; grammar edits.
PR #4211 - Google Season of Docs updates to documentation; contributing to hpx
PR #4210 - Attempting to fix Intel compilation
PR #4209 - Fix CUDA 10 build
PR #4205 - Making sure that differences in
CMAKE_BUILD_TYPEare not reported on multi-configuration cmake generatorsPR #4203 - Deprecate Vc
PR #4202 - Fix CUDA configuration
PR #4200 - Making sure
hpx_wrapis not passed on to linker on non-Linux systemsPR #4198 - Fix
execution_agent.cppcompilation with GCC 5PR #4197 - Remove deprecated options for 1.4.0 release
PR #4196 - minor fixes for building on OSX Darwin
PR #4195 - Use full clone on CircleCI for pushing stable tag
PR #4193 - Add scheduling hints to hello_world_distributed
PR #4192 - Set up CUDA in HPXConfig.cmake
PR #4191 - Export allocators root variables
PR #4190 - Don’t use
constexprinthread_datawith GCC <= 6PR #4189 - Only use
quick_exitif availablePR #4188 - Google Season of Docs updates to documentation; writing single node hpx applications
PR #4186 - correct vc to cuda in cuda cmake
PR #4184 - Resetting some cached variables to make sure those are re-filled
PR #4183 - Fix
hpxcxxconfigurationPR #4181 - Rename base libraries var
PR #4180 - Move header left behind earlier to plugin module
PR #4179 - Moving
zip_iteratorandtransform_iteratorto iterator_support modulePR #4178 - Move checkpointing support to its own module
PR #4177 - Small const fix to
basic_executionmodulePR #4176 - Add back
HPX_LIBRARIESand friends toHPXConfig.cmakePR #4175 - Make Vc public and add it to
HPXConfig.cmakePR #4173 - Wait for runtime to be running before returning from hpx::start
PR #4172 - More protection against shutdown problems in error handling scenarios.
PR #4171 - Ignore lock in
condition_variable::waitPR #4170 - Adding APEX dependency to MPI parcelport
PR #4168 - Adding utility include
PR #4167 - Add a condition to setup the external libraries
PR #4166 - Add an
INTERNAL_FLAGSoption to link tohpx_internal_flagsPR #4165 - Forward
HPX_*cmake cache variables to external projectsPR #4164 - Affinity and batch environment modules
PR #4162 - Handle
quick exitPR #4160 - Using
target_link_librariesfor cmake versions >= 3.12PR #4159 - Make sure
HPX_WITH_NATIVE_TLSis forwarded to dependent projectsPR #4158 - Adding allocator imported target as a dependency of allocator module
PR #4157 - Add
hpx_memoryas a dependency of parcelport pluginsPR #4156 - Stackless coroutines now can refer to themselves (through get_self() and friends)
PR #4154 - Added CMake policy CMP0060 for HPX applications.
PR #4153 - add header
iomanipto tests and toolPR #4152 - Casting MPI tag value
PR #4149 - Add back private
m_descmember variable in program_options modulePR #4147 - Resource partitioner and threadmanager modules
PR #4146 - Google Season of Docs updates to documentation; creating hpx projects
PR #4145 - Adding basic support for stackless threads
PR #4143 - Exclude
test_client_1950from all targetPR #4142 - Add a new
thread_pool_executorPR #4140 - Google Season of Docs updates to documentation; why hpx
PR #4139 - Remove runtime includes from coroutines module
PR #4138 - Forking
boost::intrusive_ptrand adding it ashpx::intrusive_ptrPR #4137 - Fixing TSS destruction
PR #4136 - HPX.Compute modules
PR #4133 - Fix
block_executorPR #4131 - Applying fixes based on reports from PVS Studio
PR #4130 - Adding missing header to build system
PR #4129 - Fixing compilation if
HPX_WITH_DATAPAR_VCis enabledPR #4128 - Renaming
moveonly_anytounique_anyPR #4126 - Attempt to fix
basic_anyconstructor for gcc 7PR #4125 - Changing
extra_archive_dataimplementationPR #4124 - Don’t link to Boost.System unless required
PR #4122 - Add kernel launch helper utility (+saxpy demo) and merge in octotiger changes
PR #4121 - Fixing migration test if networking is disabled.
PR #4120 - Google Season of Docs updates to documentation; hpx build system v1
PR #4119 - Making sure
chunk_sizeandmax_chunkare actually applied to parallel algorithms if specifiedPR #4117 - Make CircleCI formatting check store diff
PR #4116 - Fix automatically setting C++ standard
PR #4114 - Module serialization
PR #4113 - Module datastructures
PR #4111 - Fixing performance regression introduced earlier
PR #4110 - Adding missing SPDX tags
PR #4109 - Overload for start without entry point/argv.
PR #4108 - Making sure C++ standard is properly detected and propagated
PR #4106 - use
std::roundfor guaranteed rounding without errorsPR #4104 - Extend
scheduler_modewith newwork_stealingand task assignment modesPR #4103 - Add this to lambda capture list
PR #4102 - Add spdx license and check
PR #4099 - Module coroutines
PR #4098 - Fix append module path in module CMakeLists template
PR #4097 - Function tests
PR #4096 - Removing return of
thread_result_typefrom functions not needing themPR #4095 - Stop-gap measure until cmake overhaul is in place
PR #4094 - Deprecate
HPX_WITH_MORE_THAN_64_THREADSPR #4093 - Fix initialization of
global_num_tasksinparallel_executorPR #4092 - Add support for mi-malloc
PR #4090 - Execution context
PR #4089 - Make counters in coroutines optional
PR #4087 - Making
hpx::util::anycompatible with C++17PR #4084 - Making sure destination array for
std::transformis properly resizedPR #4083 - Adapting
thread_queue_mcto behave even if no 128bit atomics are availablePR #4082 - Fix compilation on GCC 5
PR #4081 - Adding option allowing to force using Boost.FileSystem
PR #4080 - Updating module dependencies
PR #4079 - Add missing tests for iterator_support module
PR #4078 - Disable parcel-layer if networking is disabled
PR #4077 - Add missing include that causes build fails
PR #4076 - Enable compatibility headers for functional module
PR #4075 - Coroutines module
PR #4073 - Use
configure_filefor generated files in modulesPR #4071 - Fixing MPI detection for PMIx
PR #4070 - Fix macOS builds
PR #4069 - Moving more facilities to the collectives module
PR #4068 - Adding main HPX
#includedirectory to modulesPR #4066 - Switching the use of
message(STATUS "...")to hpx_infoPR #4065 - Move Boost.Filesystem handling to filesystem module
PR #4064 - Fix program_options test with older boost versions
PR #4062 - The
cpu_featurestool fails to compile on anything but x86 architecturesPR #4061 - Add
clang-formatchecking step for modulesPR #4060 - Making sure
HPX_IDLE_BACKOFF_TIME_MAXis always defined (even if its unused)PR #4059 - Renaming module
hpx_parallel_executorsintohpx_executionPR #4058 - Do not build networking tests when networking disabled
PR #4057 - Printing configuration summary for modules as well
PR #4055 - Google Season of Docs updates to documentation; hpx build systems
PR #4054 - Add troubleshooting section to manual
PR #4051 - Add more variations to
future_overheadtestPR #4050 - Creating plugin module
PR #4049 - Move missing modules tests
PR #4047 - Add boost/filesystem headers to inspect deprecated headers
PR #4045 - Module functional
PR #4043 - Fix preconditions and error messages for suspension functions
PR #4041 - Pass HPX_STANDARD on to dependent projects via HPXConfig.cmake
PR #4040 - Program options module
PR #4039 - Moving non-serializable
any(any_nonser) to datastructures modulePR #4038 - Adding MPark’s variant (V1.4.0) to HPX
PR #4037 - Adding resiliency module
PR #4036 - Add C++17 filesystem compatibility header
PR #4035 - Fixing support for mpirun
PR #4028 - CMake to target based directives
PR #4027 - Remove GitLab CI configuration
PR #4026 - Threading refactoring
PR #4025 - Refactoring thread queue configuration options
PR #4024 - Fix padding calculation in
cache_aligned_data.hppPR #4023 - Fixing Codacy issues
PR #4022 - Make sure process mask option is passed to
affinity_dataPR #4021 - Warn about compiling in C++11 mode
PR #4020 - Module concurrency
PR #4019 - Module topology
PR #4018 - Update deprecated header in
thread_queue_mc.hppPR #4015 - Avoid overwriting artifacts
PR #4014 - Future overheads
PR #4013 - Update URL to test output conversion script
PR #4012 - Fix CUDA compilation
PR #4011 - Fixing cyclic dependencies between modules
PR #4010 - Ignore stable tag on CircleCI
PR #4009 - Check circular dependencies in a circle ci step
PR #4008 - Extend cache aligned data to handle tuple-like data
PR #4007 - Fixing migration for components that have actions returning a client
PR #4006 - Move is_value_proxy.hpp to algorithms module
PR #4004 - Shorten CTest timeout on CircleCI
PR #4003 - Refactoring to remove (internal) dependencies
PR #4001 - Exclude tests from all target
PR #4000 - Module errors
PR #3999 - Enable support for compatibility headers for logging module
PR #3998 - Add process thread binding option
PR #3997 - Export handle_assert function
PR #3996 - Attempt to solve issue where
-latomicdoes not support 128bit atomicsPR #3993 - Make sure
__LINE__is an unsignedPR #3991 - Fix dependencies and flags for header tests
PR #3990 - Documentation tags fixes
PR #3988 - Adding missing solution folder for format module test
PR #3987 - Move runtime-dependent functions out of command line handling
PR #3986 - Fix CMake configuration with PAPI on
PR #3985 - Module timing
PR #3984 - Fix default behaviour of paths in
add_hpx_componentPR #3982 - Parallel executors module
PR #3981 - Segmented algorithms module
PR #3980 - Module logging
PR #3979 - Module util
PR #3978 - Fix
clang-tidystep on CircleCIPR #3977 - Fixing solution folders for moved components
PR #3976 - Module format
PR #3975 - Enable deprecation warnings on CircleCI
PR #3974 - Fix typos in documentation
PR #3973 - Fix compilation with GCC 9
PR #3972 - Add condition to clone apex + use of new cmake var APEX_ROOT
PR #3971 - Add testing module
PR #3968 - Remove unneeded file in hardware module
PR #3967 - Remove leftover PIC settings from main CMakeLists.txt
PR #3966 - Add missing export option in
add_hpx_modulePR #3965 - Change
current_function_helperback to non-constexprPR #3964 - Fixing merge problems
PR #3962 - Add a trait for
std::arrayfor unwrappingPR #3961 - Making
hpx::util::tuple<Ts...>andstd::tuple<Ts...>convertiblePR #3960 - fix compilation with CUDA 10 and GCC 6
PR #3959 - Fix C++11 incompatibility
PR #3957 - Algorithms module
PR #3956 - [
HPX_AddModule] Fix lower name var to upperPR #3955 - Fix CMake configuration with examples off and tests on
PR #3954 - Move components to separate subdirectory in root of repository
PR #3952 - Update
papi.cppPR #3951 - Exclude modules header tests from all target
PR #3950 - Adding
all_reducefacility to collectives modulePR #3949 - This adds a configuration file that will cause for stale issues to be automatically closed
PR #3948 - Fixing ALPS environment
PR #3947 - Add major compiler version check for building hpx as a binary package
PR #3946 - [Modules] Move the location of the generated headers
PR #3945 - Simplify tests and examples cmake
PR #3943 - Remove example module
PR #3942 - Add
NOEXPORToption toadd_hpx_{component,library}PR #3938 - Use https for CDash submissions
PR #3937 - Add
HPX_WITH_BUILD_BINARY_PACKAGEto the compiler check (refs #3935)PR #3936 - Fixing installation of binaries on windows
PR #3934 - Add set function for
sliding_semaphoremax_differencePR #3933 - Remove
cudadevrtfrom compile/link flags as it breaks downstream projectsPR #3932 - Fixing 3929
PR #3931 - Adding
all_to_allPR #3930 - Add test demonstrating the use of broadcast with component actions
PR #3928 - fixed number of tasks and number of threads for heterogeneous slurm environments
PR #3927 - Moving Cache module’s tests into separate solution folder
PR #3926 - Move unit tests to cache module
PR #3925 - Move version check to config module
PR #3924 - Add schedule hint executor parameters
PR #3923 - Allow aligning objects bigger than the cache line size
PR #3922 - Add Windows builds with Travis CI
PR #3921 - Add ccls cache directory to gitignore
PR #3920 - Fix
git_externalfetching of tagsPR #3905 - Correct rostambod url. Fix typo in doc
PR #3904 - Fix bug in context_base.hpp
PR #3903 - Adding new performance counters
PR #3902 - Add
add_hpx_modulefunctionPR #3901 - Factoring out container remapping into a separate trait
PR #3900 - Making sure errors during command line processing are properly reported and will not cause assertions
PR #3899 - Remove old compatibility bases from
make_actionPR #3898 - Make parameter size be of type
size_tPR #3897 - Making sure all tests are disabled if
HPX_WITH_TESTS=OFFPR #3895 - Add documentation for annotated_function
PR #3894 - Working around VS2019 problem with
make_actionPR #3892 - Avoid MSVC compatibility warning in internal allocator
PR #3891 - Removal of the default intel config include
PR #3888 - Fix
async_customizationdataflow example and Clarify what’s being testedPR #3887 - Add Doxygen documentation
PR #3882 - Minor docs fixes
PR #3880 - Updating APEX version tag
PR #3878 - Making sure symbols are properly exported from modules (needed for Windows/MacOS)
PR #3877 - Documentation
PR #3876 - Module hardware
PR #3875 - Converted typedefs in actions submodule to using directives
PR #3874 - Allow one to suppress target keywords in
hpx_setup_targetfor backwards compatibilityPR #3873 - Add scripts to create releases and generate lists of PRs and issues
PR #3872 - Fix latest HTML docs location
PR #3870 - Module cache
PR #3869 - Post 1.3.0 version bumps
PR #3868 - Replace the macro
HPX_ASSERTbyHPX_TESTin testsPR #3845 - Assertion module
PR #3839 - Make tuple serialization non-intrusive
PR #3832 - Config module
PR #3799 - Remove compat namespace and its contents
PR #3701 - MoodyCamel lockfree
PR #3496 - Disabling MPI’s (deprecated) C++ interface
PR #3192 - Move type info into
hpx::debugnamespace and add print helper functionsPR #3159 - Support Checkpointing Components