Created
March 6, 2017 12:33
-
-
Save jgreitemann/e9649178d90f78b07498b250c1364d06 to your computer and use it in GitHub Desktop.
Demonstration of measurement duplication after repeated collective merge
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
#include <alps/accumulators.hpp> | |
#include <alps/utilities/mpi.hpp> | |
#include <alps/hdf5/archive.hpp> | |
int main (int argc, char *argv[]) { | |
alps::mpi::environment env(argc, argv, false); | |
alps::mpi::communicator c; | |
alps::accumulators::accumulator_set measurements; | |
measurements << alps::accumulators::MeanAccumulator<double>("dummy"); | |
// measure some data | |
for (size_t i = c.rank() * 10; i < (c.rank() + 1) * 10; ++i) | |
measurements["dummy"] << i; | |
// write checkpoint before collecting | |
{ | |
std::stringstream ss; | |
ss << "before_rank_" << c.rank() << ".h5"; | |
alps::hdf5::archive ar(ss.str(), "w"); | |
ar["measurements"] << measurements; | |
ar.close(); | |
} | |
// collect results | |
if (c.rank() == 0) { | |
measurements["dummy"].collective_merge(c, 0); | |
alps::accumulators::result_set results; | |
results.insert("dummy", measurements["dummy"].result()); | |
alps::hdf5::archive ar("results.h5", "w"); | |
ar["/"] << results; | |
ar.close(); | |
} else { | |
measurements["dummy"].collective_merge(c, 0); | |
// resetting slaves manually solves the issue | |
// measurements["dummy"].reset(); | |
} | |
// measure some more | |
for (size_t i = c.rank() * 10; i < (c.rank() + 1) * 10; ++i) | |
measurements["dummy"] << i; | |
// final checkpoint | |
{ | |
std::stringstream ss; | |
ss << "after_rank_" << c.rank() << ".h5"; | |
alps::hdf5::archive ar(ss.str(), "w"); | |
ar["measurements"] << measurements; | |
ar.close(); | |
} | |
// collect results a second time | |
if (c.rank() == 0) { | |
measurements["dummy"].collective_merge(c, 0); | |
alps::accumulators::result_set results; | |
results.insert("dummy", measurements["dummy"].result()); | |
alps::hdf5::archive ar("results2.h5", "w"); | |
ar["/"] << results; | |
ar.close(); | |
} else { | |
measurements["dummy"].collective_merge(c, 0); | |
// measurements["dummy"].reset(); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
results2.h5
will show 110 measurements of dummy and yield the wrong mean of 20.863. Uncommenting line 41 in contrast yield the correct result of 19.5 at 80 samples.