Changeset 1576 for XIOS/dev/dev_olga/src/node/grid.cpp
- Timestamp:
- 09/10/18 17:18:33 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/node/grid.cpp
r1571 r1576 841 841 // Even if a client has no index, it must connect to at least one server and 842 842 // send an "empty" data to this server 843 // if (connectedServerRank_[receiverSize].empty())844 // connectedServerRank_[receiverSize].push_back(client->clientRank % client->serverSize);845 846 // Trying instead: send empty data to all servers847 843 if (connectedServerRank_[receiverSize].empty()) 848 for (int i = 0; i < client->serverSize; ++i) 849 connectedServerRank_[receiverSize].push_back(i); 844 connectedServerRank_[receiverSize].push_back(client->clientRank % client->serverSize); 845 846 // Now check if all servers have data to receive. If not, master client will send empty data. 847 // This ensures that all servers will participate in collective calls upon receiving even if they have no date to receive. 848 std::vector<int> counts (client->clientSize); 849 std::vector<int> displs (client->clientSize); 850 displs[0] = 0; 851 int localCount = connectedServerRank_[receiverSize].size() ; 852 MPI_Gather(&localCount, 1, MPI_INT, &counts[0], 1, MPI_INT, 0, client->intraComm) ; 853 for (int i = 0; i < client->clientSize-1; ++i) 854 { 855 displs[i+1] = displs[i] + counts[i]; 856 } 857 std::vector<int> allConnectedServers(displs[client->clientSize-1]+counts[client->clientSize-1]); 858 MPI_Gatherv(&(connectedServerRank_[receiverSize])[0], localCount, MPI_INT, &allConnectedServers[0], &counts[0], &displs[0], MPI_INT, 0, client->intraComm); 859 860 if ((allConnectedServers.size() != receiverSize) && (client->clientRank == 0)) 861 { 862 std::vector<bool> isSrvConnected (receiverSize, false); 863 for (int i = 0; i < allConnectedServers.size(); ++i) isSrvConnected[allConnectedServers[i]] = true; 864 for (int i = 0; i < receiverSize; ++i) 865 { 866 if (!isSrvConnected[i]) connectedServerRank_[receiverSize].push_back(i); 867 } 868 } 850 869 851 870 nbSenders[receiverSize] = clientServerMap_->computeConnectedClients(receiverSize, client->clientSize, client->intraComm, connectedServerRank_[receiverSize]);
Note: See TracChangeset
for help on using the changeset viewer.