boost::mpi::scatter 可以把一个vector中的元素传递给其他所有进程。
#include "stdafx.h"
#include <boost/mpi.hpp>
#include <boost/serialization/string.hpp>
#include <vector>
#include <string>
#include <iostream>
namespace mpi = boost::mpi;
int main(int argc, char *argv[]) {
boost::mpi::environment env(argc, argv);
boost::mpi::communicator world;
std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
//std::string s;
int s;
boost::mpi::scatter(world, v, s, 0);
std::cout << world.rank() << ": " << s << '\n';
}
如果用2个进程运行:
1 : 20
0 : 10
如果用4个进程运行:
1 : 20
0 : 10
2 : 30
3 : 40
如果用5个进程,由于vector只有4个元素,所以第5个元素无效,程序传递一个未定义的整数给进程4:
1 : 20
0 : 10
2 : 30
3 : 40
4 : -33686019
现在问题是如果vector中有4N个元素,现在想把他们分配到4个处理器上,应该怎么弄?