14 : indexGlobalOnServer_()
32 MPI_Comm& clientIntraComm,
33 const std::vector<int>& connectedServerRank)
35 std::map<int, int> connectedClients;
37 std::vector<int>::const_iterator itbVec, iteVec, it;
38 itbVec = it = connectedServerRank.begin();
39 iteVec = connectedServerRank.end();
41 std::vector<int> connectedServer;
42 std::vector<bool> isConnected(nbServer,
false);
44 for (it = itbVec; it != iteVec; ++it)
46 for (
int serverNum = 0; serverNum < nbServer; ++serverNum)
47 if (*it == serverNum) isConnected[serverNum] =
true;
50 for(
int serverNum = 0; serverNum<nbServer; ++serverNum)
51 if (isConnected[serverNum])
52 connectedServer.push_back(serverNum);
55 int nbConnectedServer=connectedServer.size();
56 int* recvCount=
new int[nbClient];
57 int* displ=
new int[nbClient];
58 int* sendBuff=
new int[nbConnectedServer];
59 valarray<int> clientRes(0,nbServer);
61 for(
int n=0;n<nbConnectedServer;n++) sendBuff[n]=connectedServer[n] ;
64 MPI_Allgather(&nbConnectedServer,1,MPI_INT,recvCount,1,MPI_INT,clientIntraComm) ;
67 for(
int n=1;n<nbClient;n++) displ[n]=displ[n-1]+recvCount[n-1] ;
68 int recvSize=displ[nbClient-1]+recvCount[nbClient-1] ;
69 int* recvBuff=
new int[recvSize] ;
72 MPI_Allgatherv(sendBuff,nbConnectedServer,MPI_INT,recvBuff,recvCount,displ,MPI_INT,clientIntraComm) ;
73 for(
int n=0;n<recvSize;n++) clientRes[recvBuff[n]]++ ;
75 for(
int n=0;n<nbConnectedServer;n++)
77 connectedClients[connectedServer[n]] = clientRes[connectedServer[n]];
85 return connectedClients;
const GlobalIndexMap & getGlobalIndexOnServer() const
Return global index of data on each connected server.
std::unordered_map< int, std::vector< size_t > > GlobalIndexMap
virtual ~CClientServerMapping()
Mapping between index client and server.
GlobalIndexMap indexGlobalOnServer_
Global index of data on SERVER, which are calculated by client(s)
static std::map< int, int > computeConnectedClients(int nbServer, int nbClient, MPI_Comm &clientIntraComm, const std::vector< int > &connectedServerRank)
Compute how many clients each server will receive data from On client can send data to several server...