Ignore:
Timestamp:
06/04/18 19:25:08 (3 years ago)
Author:
yushan
Message:

save dev. TO DO : test with xios

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_test.cpp

    r1374 r1520  
    2222     
    2323 
    24     if(request->type == 1)      // isend 
     24    if((*request)->type == 1)      // isend 
    2525    { 
    2626      ::MPI_Status mpi_status; 
    27       ::MPI_Test(static_cast< ::MPI_Request*>(request->mpi_request), flag, &mpi_status); 
     27      ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); 
    2828       
    2929      if(*flag)  
    3030      { 
    3131        status->mpi_status = new ::MPI_Status(mpi_status); 
    32         status->ep_src = request->ep_src; 
    33         status->ep_tag = request->ep_tag; 
    34         status->ep_datatype = request->ep_datatype; 
     32        status->ep_src = (*request)->ep_src; 
     33        status->ep_tag = (*request)->ep_tag; 
     34        status->ep_datatype = (*request)->ep_datatype; 
     35        (*request)->state = 2; 
     36        delete (*request)->mpi_request; 
     37        delete *request; 
    3538      } 
    3639 
     
    3841    } 
    3942 
    40     if(request->type == 2)   // irecv message not probed 
     43    if((*request)->type == 2)   // irecv message not probed 
    4144    { 
    4245      Request_Check(); 
     
    4649    } 
    4750 
    48     if(request->type == 3)  // imrecv 
     51    if((*request)->type == 3)  // imrecv 
    4952    { 
     53      if((*request)->state == 2) 
     54      { 
     55        return *flag = true; 
     56      } 
    5057      ::MPI_Status mpi_status; 
    5158       
    52       ::MPI_Test(static_cast< ::MPI_Request*>(request->mpi_request), flag, &mpi_status); 
     59      ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); 
    5360       
    5461       
     
    5663      { 
    5764        status->mpi_status = new ::MPI_Status(mpi_status); 
    58         status->ep_src = request->ep_src; 
    59         status->ep_tag = request->ep_tag; 
    60         status->ep_datatype = request->ep_datatype; 
     65        status->ep_src = (*request)->ep_src; 
     66        status->ep_tag = (*request)->ep_tag; 
     67        status->ep_datatype = (*request)->ep_datatype; 
     68         
     69        (*request)->state = 2; 
     70         
     71        delete (*request)->mpi_request; 
     72        delete *request; 
    6173        //int count; 
    6274        //MPI_Get_count(status, request->ep_datatype, &count); 
     
    6476      }   
    6577 
    66       return 0; 
     78      return Request_Check(); 
    6779    } 
    6880 
     
    7385  { 
    7486    Debug("MPI_Testall with EP"); 
    75     *flag = true; 
    76     int i=0; 
    77     while(*flag && i<count ) 
     87 
     88    ::MPI_Request* mpi_request = new ::MPI_Request[count]; 
     89    ::MPI_Status* mpi_status = new ::MPI_Status[count]; 
     90 
     91 
     92    for(int i=0; i<count; i++) 
    7893    { 
    79       MPI_Test(&array_of_requests[i], flag, &array_of_statuses[i]); 
    80       i++; 
     94      mpi_request[i] = *static_cast< ::MPI_Request*>(array_of_requests[i]->mpi_request); 
    8195    } 
     96 
     97    ::MPI_Testall(count, mpi_request, flag, mpi_status); 
     98 
     99    if(*flag) 
     100    { 
     101      for(int i=0; i<count; i++) 
     102      { 
     103        array_of_statuses[i].mpi_status = &mpi_status[i]; 
     104        array_of_statuses[i].ep_src = array_of_requests[i]->ep_src; 
     105        array_of_statuses[i].ep_tag = array_of_requests[i]->ep_tag; 
     106        array_of_statuses[i].ep_datatype = array_of_requests[i]->ep_datatype; 
     107         
     108        array_of_requests[i]->state = 2; 
     109       
     110        memcheck("delete "<< array_of_requests[i]->mpi_request <<" : in ep_lib::MPI_Waitall, array_of_requests["<<i<<"]->mpi_request"); 
     111        delete array_of_requests[i]->mpi_request; 
     112        delete array_of_requests[i];  
     113      } 
     114       
     115    } 
     116 
     117    return Request_Check(); 
    82118  } 
    83119 
    84120 
    85121} 
     122 
Note: See TracChangeset for help on using the changeset viewer.