Receive a control message. */
| 177 | |
| 178 | /** Receive a control message. */ |
| 179 | ControlMessage CommLayer::receiveControlMessage() |
| 180 | { |
| 181 | int flag; |
| 182 | MPI_Status status; |
| 183 | MPI_Test(&m_request, &flag, &status); |
| 184 | assert(flag); |
| 185 | assert((APMessage)status.MPI_TAG == APM_CONTROL); |
| 186 | |
| 187 | int count; |
| 188 | MPI_Get_count(&status, MPI_BYTE, &count); |
| 189 | ControlMessage msg; |
| 190 | assert(count == sizeof msg); |
| 191 | memcpy(&msg, m_rxBuffer, sizeof msg); |
| 192 | assert(m_request == MPI_REQUEST_NULL); |
| 193 | MPI_Irecv(m_rxBuffer, RX_BUFSIZE, |
| 194 | MPI_BYTE, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, |
| 195 | &m_request); |
| 196 | return msg; |
| 197 | } |
| 198 | |
| 199 | /** Send a buffered collection of messages. */ |
| 200 | void CommLayer::sendBufferedMessage(int destID, |