Skip to content
Snippets Groups Projects
Commit c0a84e8d authored by Benjamin Lindner2's avatar Benjamin Lindner2
Browse files

added mpi free serialization test

parent 2f36b0c8
No related branches found
No related tags found
No related merge requests found
......@@ -113,6 +113,9 @@ TARGET_LINK_LIBRARIES (sass_report
)
TARGET_LINK_LIBRARIES (sass_mpi
sass_log
sass_controlio
sass_sample
${Boost_LIBRARIES}
)
......
......@@ -17,7 +17,7 @@ namespace mpi {
namespace wrapper {
void broadcast_stream(boost::mpi::communicator& comm,std::stringstream& stream, size_t root);
class<T> void broadcast_class(boost::mpi::communicator& comm,T& any, size_t root);
template <class T> void broadcast_class(boost::mpi::communicator& comm,T& any, size_t root);
}
}
......
......@@ -12,6 +12,13 @@
#include <sstream>
#include <boost/mpi.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include "control/database.hpp"
#include "control/parameters.hpp"
#include "sample.hpp"
using namespace std;
namespace mpi {
......@@ -38,19 +45,24 @@ namespace mpi {
}
}
class<T> void broadcast_class(boost::mpi::communicator& comm,T& any, size_t root) {
template <class T> void broadcast_class(boost::mpi::communicator& comm,T& any, size_t root) {
std::stringstream stream;
if (world.rank()==0) {
if (comm.rank()==root) {
boost::archive::text_oarchive ar(stream);
ar << *any;
ar << any;
}
mpi::wrapper::broadcast_stream(world,stream,root);
if (world.rank()!=0) {
mpi::wrapper::broadcast_stream(comm,stream,root);
if (comm.rank()!=root) {
boost::archive::text_iarchive ar(stream);
ar >> *any;
ar >> any;
}
}
}
}
template void mpi::wrapper::broadcast_class<Sample>(boost::mpi::communicator& comm,Sample& any, size_t root);
template void mpi::wrapper::broadcast_class<Database>(boost::mpi::communicator& comm,Database& any, size_t root);
template void mpi::wrapper::broadcast_class<Params>(boost::mpi::communicator& comm,Params& any, size_t root);
// end of file
......@@ -249,7 +249,7 @@ int main(int argc,char* argv[]) {
timer.start("sample::communication");
if (world.rank()==0) Info::Inst()->write("params... ");
broadcast_class<Params>(world,*params,0);
mpi::wrapper::broadcast_class<Params>(world,*params,0);
// std::stringstream paramsstream;
// if (world.rank()==0) {
......@@ -266,7 +266,7 @@ int main(int argc,char* argv[]) {
if (world.rank()==0) Info::Inst()->write("database... ");
broadcast_class<Database>(world,*database,0);
mpi::wrapper::broadcast_class<Database>(world,*database,0);
// std::stringstream databasestream;
// if (world.rank()==0) {
// boost::archive::text_oarchive ar(databasestream);
......@@ -282,7 +282,7 @@ int main(int argc,char* argv[]) {
if (world.rank()==0) Info::Inst()->write("sample... ");
broadcast_class<Sample>(world,sample,0);
mpi::wrapper::broadcast_class<Sample>(world,sample,0);
// std::stringstream samplestream;
// if (world.rank()==0) {
......
......@@ -150,9 +150,9 @@ int main(int argc,char* argv[]) {
Err::Inst();
Warn::Inst();
Info::Inst()->set_prefix(boost::lexical_cast<string>(string(".Info>>"));
Warn::Inst()->set_prefix(boost::lexical_cast<string>(string(".Warn>>"));
Err::Inst()->set_prefix(boost::lexical_cast<string>(string(".Err>>"));
Info::Inst()->set_prefix(boost::lexical_cast<string>(string(".Info>>")));
Warn::Inst()->set_prefix(boost::lexical_cast<string>(string(".Warn>>")));
Err::Inst()->set_prefix(boost::lexical_cast<string>(string(".Err>>")));
Params* params = Params::Inst();
Database* database = Database::Inst();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment