Ignore:
Timestamp:
07/05/17 14:14:09 (7 years ago)
Author:
yushan
Message:

add request_check. test client and complete OK

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_yushan_merged/extern/src_ep_dev/ep_message.cpp

    r1187 r1196  
    1111 
    1212using namespace std; 
     13 
     14extern std::list< ep_lib::MPI_Request* > * EP_PendingRequests; 
     15#pragma omp threadprivate(EP_PendingRequests) 
    1316 
    1417namespace ep_lib 
     
    248251          #pragma omp flush 
    249252          ptr_comm_target->ep_comm_ptr->message_queue->push_back(*msg_block); 
    250           printf("probed one message, ep_src = %d, tag = %d, mpi_status = %p (%p), message = %d\n", msg_block->ep_src, msg_block->ep_tag, msg_block->mpi_status, &status, msg_block->mpi_message); 
     253          //printf("probed one message, ep_src = %d, tag = %d, mpi_status = %p (%p), message = %d\n", msg_block->ep_src, msg_block->ep_tag, msg_block->mpi_status, &status, msg_block->mpi_message); 
    251254          #pragma omp flush 
    252255        } 
     
    261264  } 
    262265 
     266  int Request_Check() 
     267  { 
     268    MPI_Status status; 
     269    MPI_Message message; 
     270    int probed = false; 
     271    int recv_count = 0; 
     272    std::list<MPI_Request* >::iterator it; 
     273     
     274    for(it = EP_PendingRequests->begin(); it!=EP_PendingRequests->end(); it++) 
     275    {  
     276      Message_Check((*it)->comm); 
     277    } 
     278 
     279 
     280    for(it = EP_PendingRequests->begin(); it!=EP_PendingRequests->end(); ) 
     281    { 
     282      MPI_Improbe((*it)->ep_src, (*it)->ep_tag, (*it)->comm, &probed, &message, &status); 
     283      if(probed) 
     284      { 
     285        MPI_Get_count(&status, (*it)->ep_datatype, &recv_count); 
     286        MPI_Imrecv((*it)->buf, recv_count, (*it)->ep_datatype, &message, *it); 
     287        (*it)->type = 3; 
     288        //printf("request add = %p, mpi_request=%d\n", *it, (*it)->mpi_request); 
     289        EP_PendingRequests->erase(it); 
     290        it = EP_PendingRequests->begin(); 
     291        continue; 
     292      } 
     293      it++; 
     294    } 
     295  } 
     296 
    263297} 
Note: See TracChangeset for help on using the changeset viewer.