MADNESS 0.10.1
|
cloud class More...
#include <cloud.h>
Classes | |
struct | cloudtimer |
struct | is_madness_function_vector |
struct | is_madness_function_vector< std::vector< Function< T, NDIM > > > |
struct | is_tuple |
struct | is_tuple< std::tuple< T... > > |
struct | is_vector |
struct | is_vector< std::vector< Q > > |
Public Types | |
typedef std::any | cached_objT |
typedef std::map< keyT, cached_objT > | cacheT |
template<typename T > | |
using | has_cloud_serialize = madness::meta::is_detected< member_cloud_serialize_t, T > |
using | keyT = madness::archive::ContainerRecordOutputArchive::keyT |
template<typename T > | |
using | member_cloud_serialize_t = decltype(std::declval< T >().cloud_store(std::declval< World & >(), std::declval< Cloud & >())) |
typedef Recordlist< keyT > | recordlistT |
using | valueT = std::vector< unsigned char > |
Public Member Functions | |
Cloud (madness::World &universe) | |
void | clear () |
void | clear_cache (World &subworld) |
void | clear_timings () |
template<typename T > | |
std::enable_if< is_vector< T >::value, T >::type | do_load (World &world, recordlistT &recordlist) const |
template<typename T > | |
std::enable_if<!is_vector< T >::value, T >::type | do_load (World &world, recordlistT &recordlist) const |
template<typename T > | |
T | forward_load (madness::World &world, recordlistT &recordlist) const |
load a single object from the cloud, recordlist is consumed while loading elements | |
template<typename T > | |
T | load (madness::World &world, const recordlistT recordlist) const |
template<typename T > | |
T | load_tuple (madness::World &world, recordlistT &recordlist) const |
void | print_size (World &universe) |
void | print_timings (World &universe) const |
void | replicate (const std::size_t chunk_size=INT_MAX) |
void | set_debug (bool value) |
void | set_fence (bool value) |
void | set_force_load_from_cache (bool value) |
template<typename T > | |
recordlistT | store (madness::World &world, const T &source) |
template<typename T > | |
recordlistT | store_other (madness::World &world, const std::vector< T > &source) |
template<typename... Ts> | |
recordlistT | store_tuple (World &world, const std::tuple< Ts... > &input) |
store a tuple in multiple records | |
Private Types | |
template<typename T > | |
using | is_parallel_serializable_object = std::is_base_of< archive::ParallelSerializableObject, T > |
template<typename T > | |
using | is_world_constructible = std::is_constructible< T, World & > |
Private Member Functions | |
template<typename T > | |
T | allocator (World &world) const |
template<typename T > | |
void | cache (madness::World &world, const T &obj, const keyT &record) const |
bool | is_cached (const keyT &key) const |
bool | is_in_container (const keyT &key) const |
checks if a (universe) container record is used | |
template<typename T > | |
T | load_from_cache (madness::World &world, const keyT &record) const |
load an object from the cache, record is unchanged | |
template<typename T > | |
recordlistT | store_other (madness::World &world, const T &source) |
Private Attributes | |
std::atomic< long > | cache_reads =0l |
std::atomic< long > | cache_stores =0l |
cacheT | cached_objects |
madness::WorldContainer< keyT, valueT > | container |
bool | debug = false |
prints debug output | |
bool | dofence = true |
fences after load/store | |
bool | force_load_from_cache = false |
forces load from cache (mainly for debugging) | |
bool | is_replicated =false |
if contents of the container are replicated | |
recordlistT | local_list_of_container_keys |
std::atomic< long > | reading_time =0l |
std::atomic< long > | replication_time =0l |
std::atomic< long > | writing_time =0l |
std::atomic< long > | writing_time1 =0l |
cloud class
store and load data to/from the cloud into arbitrary worlds
Distributed data is always bound to a certain world. If it needs to be present in another world it can be serialized to the cloud and deserialized from there again. For an example see test_cloud.cc
Data is stored into a distributed container living in the universe. During storing a (replicated) list of records is returned that can be used to find the data in the container. If a combined object (a vector, tuple, etc) is stored a list of records will be generated. When loading the data from the world the record list will be used to deserialize all stored objects.
Note that there must be a fence after the destruction of subworld containers, as in:
create subworlds { dcT(subworld) do work } subworld.gop.fence();
typedef std::any madness::Cloud::cached_objT |
typedef std::map<keyT, cached_objT> madness::Cloud::cacheT |
using madness::Cloud::has_cloud_serialize = madness::meta::is_detected<member_cloud_serialize_t, T> |
|
private |
|
private |
using madness::Cloud::member_cloud_serialize_t = decltype(std::declval<T>().cloud_store(std::declval<World&>(), std::declval<Cloud&>())) |
typedef Recordlist<keyT> madness::Cloud::recordlistT |
using madness::Cloud::valueT = std::vector<unsigned char> |
|
inline |
[in] | universe | the universe world |
References T().
|
inlineprivate |
References cached_objects.
|
inline |
References container.
Referenced by madness::MacroTaskQ::run_all(), and test_custom_serialization().
|
inline |
References cached_objects, madness::WorldGopInterface::fence(), madness::World::gop, and local_list_of_container_keys.
Referenced by main(), madness::MacroTaskQ::run_all(), and simple_example().
|
inline |
References cache_reads, cache_stores, reading_time, replication_time, writing_time, and writing_time1.
Referenced by main().
|
inline |
load a single object from the cloud, pop record from recordlist
[in,out] | world | destination world |
[in,out] | recordlist | list of records to load from (reduced by the first element) |
References madness::cache, container, debug, force_load_from_cache, madness::World::id(), is_cached(), MADNESS_CHECK, madness::name(), madness::print(), T(), and target().
|
inline |
load a single object from the cloud, recordlist is consumed while loading elements
Referenced by madness::CCPair::cloud_load(), madness::CCIntermediatePotentials::cloud_load(), madness::Info::cloud_load(), custom_serialize_tester::cloud_load(), and load_tuple().
|
inlineprivate |
References cached_objects.
Referenced by do_load().
|
inlineprivate |
checks if a (universe) container record is used
currently implemented with a local copy of the recordlist, might be reimplemented with container.find(), which would include blocking communication.
References local_list_of_container_keys.
Referenced by store_other().
|
inline |
[in] | world | the subworld the objects are loaded to |
[in] | recordlist | the list of records where the objects are stored |
References reading_time.
Referenced by chunk_example(), madness::MacroTask< taskT >::MacroTaskInternal::get_output(), main(), madness::MacroTask< taskT >::MacroTaskInternal::run(), simple_example(), test_custom_serialization(), and test_custom_worldobject().
|
inlineprivate |
load an object from the cache, record is unchanged
References cache_reads, cached_objects, debug, madness::World::id(), MADNESS_EXCEPTION, madness::name(), madness::print(), madness::World::rank(), T(), and target().
|
inline |
load a tuple from the cloud, pop records from recordlist
[in,out] | world | destination world |
[in,out] | recordlist | list of records to load from (reduced by the first few elements) |
References debug, forward_load(), madness::World::id(), madness::name(), T(), target(), and madness::type().
|
inline |
|
inline |
References cache_reads, cache_stores, madness::World::gop, madness::print(), madness::World::rank(), reading_time, replication_time, madness::WorldGopInterface::sum(), and writing_time.
Referenced by main(), and madness::MacroTaskQ::run_all().
|
inline |
References madness::WorldMpiInterface::Bcast(), container, madness::WorldGopInterface::fence(), madness::WorldContainer< keyT, valueT, hashfunT >::find(), madness::World::gop, is_replicated, MADNESS_CHECK, madness::World::mpi, MPI_BYTE, madness::World::rank(), replication_time, and madness::World::size().
Referenced by chunk_example(), and madness::MacroTaskQ::run_all().
|
inline |
References debug.
Referenced by main(), test_custom_serialization(), and test_custom_worldobject().
|
inline |
References dofence.
|
inline |
References force_load_from_cache.
Referenced by main(), and test_custom_worldobject().
|
inline |
[in] | world | presumably the universe |
References dofence, madness::WorldGopInterface::fence(), madness::World::gop, is_replicated, MADNESS_EXCEPTION, madness::print(), source(), store_other(), store_tuple(), and writing_time.
Referenced by chunk_example(), madness::CCPair::cloud_store(), madness::CCIntermediatePotentials::cloud_store(), madness::Info::cloud_store(), custom_serialize_tester::cloud_store(), main(), madness::MacroTask< taskT >::prepare_output_records(), simple_example(), store_tuple(), test_custom_serialization(), and test_custom_worldobject().
|
inline |
|
inlineprivate |
References cache_stores, madness::Recordlist< keyT >::compute_record(), container, debug, dofence, madness::WorldGopInterface::fence(), madness::World::gop, is_in_container(), local_list_of_container_keys, madness::name(), madness::World::rank(), source(), T(), and writing_time1.
Referenced by store(), and store_other().
|
inline |
|
mutableprivate |
Referenced by clear_timings(), load_from_cache(), and print_timings().
|
mutableprivate |
Referenced by clear_timings(), print_timings(), and store_other().
|
private |
Referenced by cache(), clear_cache(), is_cached(), and load_from_cache().
|
private |
Referenced by clear(), do_load(), print_size(), replicate(), store_other(), and store_other().
|
private |
prints debug output
Referenced by do_load(), load_from_cache(), load_tuple(), set_debug(), store_other(), and store_other().
|
private |
fences after load/store
Referenced by set_fence(), store(), store_other(), and store_other().
|
private |
forces load from cache (mainly for debugging)
Referenced by do_load(), and set_force_load_from_cache().
|
private |
if contents of the container are replicated
Referenced by print_size(), replicate(), and store().
|
private |
Referenced by clear_cache(), is_in_container(), and store_other().
|
mutableprivate |
Referenced by clear_timings(), load(), and print_timings().
|
mutableprivate |
Referenced by clear_timings(), print_timings(), and replicate().
|
mutableprivate |
Referenced by clear_timings(), print_timings(), and store().
|
mutableprivate |
Referenced by clear_timings(), and store_other().