mpi all reduce with std::vector and back_inserter
Hello, I have a std::vectorstd::string vector at each CPU. I would like to "reduce" all vectors on all CPUs. For example: CPU 0: vec = [a, b, c, d] CPU 1: vec = [e, f, g, h] std::vectorstd::string myreduce; mpi::all_reduce( mpi com object, vec, myreduce, #); myreduce = [a, b, c, d, e, f, g, h] How can I do this? Should I replace my # with a back_inserter of the std::vector? Thx for help Phil
Hi Kraus,
If i understood well, it's not the case for `all_reduce`, you need
`all_gather` instead:
http://www.boost.org/doc/libs/1_46_1/doc/html/boost/mpi/all_gather.html
http://www.boost.org/doc/libs/1_46_1/doc/html/boost/mpi/all_gather.htmlThe
vectors has the same size?
Regards,
Júlio.
2011/5/5 Kraus Philipp
Hello,
I have a std::vectorstd::string vector at each CPU. I would like to "reduce" all vectors on all CPUs. For example:
CPU 0: vec = [a, b, c, d] CPU 1: vec = [e, f, g, h]
std::vectorstd::string myreduce; mpi::all_reduce( mpi com object, vec, myreduce, #);
myreduce = [a, b, c, d, e, f, g, h]
How can I do this? Should I replace my # with a back_inserter of the std::vector?
Thx for help
Phil _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
Am 06.05.2011 um 00:24 schrieb Júlio Hoffimann:
Hi Kraus,
If i understood well, it's not the case for `all_reduce`, you need `all_gather` instead:
http://www.boost.org/doc/libs/1_46_1/doc/html/boost/mpi/ all_gather.html
The vectors has the same size?
No, they have different sizes. I use all_gather, but I must iterate over each element in the result vector and put the elements into a new vector. I do this at the time: std::vector< std::vectorstd::string > result; mpi::all_gather( mpi object, vec, result); std::vectorstd::string myvec; foreach( result as res ) myvec.push_back( foreach in res ); I need the loop after all_gather and my question is: Can I do the loop call into the mpi command, so that I don't have a loop after the gather? Thx Phil
Your first post referred to other implementation. Anyway, if you have two
vectors of strings:
CPU 0: vec = [ a b c d e ]
CPU 1: vec = [ f g h i j ]
then all_gather will produce a vector of strings:
result = [ a b c d e f g h i j ]
If you have a vector
Am 06.05.2011 um 00:24 schrieb Júlio Hoffimann:
Hi Kraus,
If i understood well, it's not the case for `all_reduce`, you need `all_gather` instead:
http://www.boost.org/doc/libs/1_46_1/doc/html/boost/mpi/all_gather.html
http://www.boost.org/doc/libs/1_46_1/doc/html/boost/mpi/all_gather.htmlThe vectors has the same size?
No, they have different sizes. I use all_gather, but I must iterate over each element in the result vector and put the elements into a new vector. I do this at the time:
std::vector< std::vectorstd::string > result; mpi::all_gather( mpi object, vec, result);
std::vectorstd::string myvec; foreach( result as res ) myvec.push_back( foreach in res );
I need the loop after all_gather and my question is: Can I do the loop call into the mpi command, so that I don't have a loop after the gather?
Thx
Phil
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
Júlio Hoffimann
-
Kraus Philipp