Pop the bubbles discovered previously. */
| 1101 | |
| 1102 | /** Pop the bubbles discovered previously. */ |
| 1103 | size_t NetworkSequenceCollection::controlPopBubbles(ostream& out) |
| 1104 | { |
| 1105 | controlDiscoverBubbles(); |
| 1106 | m_comm.sendControlMessage(APC_BARRIER); |
| 1107 | m_comm.barrier(); |
| 1108 | pumpNetwork(); |
| 1109 | |
| 1110 | // Perform a round-robin bubble pop to avoid concurrency issues |
| 1111 | SetState(NAS_POPBUBBLE); |
| 1112 | m_checkpointSum = performNetworkPopBubbles(out); |
| 1113 | EndState(); |
| 1114 | |
| 1115 | // Now tell all the slave nodes to perform the pop one by one |
| 1116 | for(int i = 1; i < opt::numProc; i++) { |
| 1117 | m_comm.sendControlMessage(APC_BARRIER); |
| 1118 | m_comm.barrier(); |
| 1119 | m_numReachedCheckpoint = 0; |
| 1120 | m_comm.sendControlMessageToNode(i, APC_POPBUBBLE, |
| 1121 | m_numPopped + m_checkpointSum); |
| 1122 | while (!checkpointReached(1)) |
| 1123 | pumpNetwork(); |
| 1124 | } |
| 1125 | |
| 1126 | size_t numPopped = m_checkpointSum; |
| 1127 | m_numPopped += numPopped; |
| 1128 | if (numPopped > 0) |
| 1129 | cout << "Removed " << numPopped << " bubbles.\n"; |
| 1130 | return numPopped; |
| 1131 | } |
| 1132 | |
| 1133 | /** Mark ambiguous branches. */ |
| 1134 | size_t NetworkSequenceCollection::controlMarkAmbiguous() |
nothing calls this directly
no test coverage detected