Ignore:
Timestamp:
06/08/18 19:34:51 (6 years ago)
Author:
yushan
Message:

save dev

File:
1 edited

Legend:

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

    r1520 r1533  
    99#include <mpi.h> 
    1010#include "ep_declaration.hpp" 
     11#include "ep_mpi.hpp" 
    1112 
    1213using namespace std; 
     
    1819  { 
    1920    Debug("MPI_Test with EP"); 
    20  
    21     *flag = false; 
    2221     
    23  
    24     if((*request)->type == 1)      // isend 
     22    if(*request==0) return *flag=true; 
     23     
     24    if((*request)->type !=1 && (*request)->type !=2 && (*request)->type !=3)  
    2525    { 
    26       ::MPI_Status mpi_status; 
    27       ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); 
    28        
    29       if(*flag)  
    30       { 
    31         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; 
    35         (*request)->state = 2; 
    36         delete (*request)->mpi_request; 
    37         delete *request; 
    38       } 
    39  
    40       return 0; 
     26      printf("MPI_Test : Error in request type\n"); 
     27  
     28      exit(1); 
    4129    } 
    4230 
    4331    if((*request)->type == 2)   // irecv message not probed 
    4432    { 
    45       Request_Check(); 
     33      *flag = false; 
     34      return Request_Check(); 
     35    } 
     36     
     37    else //(*request)->type == 1 || (*request)->type == 3      // isend or imrecv 
     38    { 
    4639       
    47       #pragma omp flush 
    48        
    49     } 
    50  
    51     if((*request)->type == 3)  // imrecv 
    52     { 
    53       if((*request)->state == 2) 
    54       { 
    55         return *flag = true; 
    56       } 
    5740      ::MPI_Status mpi_status; 
    5841       
    59       ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); 
    6042       
     43      ::MPI_Test(to_mpi_request_ptr(*request), flag, &mpi_status); 
    6144       
    62       if(*flag) 
     45      if(*flag)  
    6346      { 
    64         status->mpi_status = new ::MPI_Status(mpi_status); 
     47 
     48        status->mpi_status=new ::MPI_Status(mpi_status); 
    6549        status->ep_src = (*request)->ep_src; 
    6650        status->ep_tag = (*request)->ep_tag; 
     
    6852         
    6953        (*request)->state = 2; 
    70          
     54                 
     55        memcheck("delete "<< (*request)->mpi_request << " : in ep_lib::MPI_Test, delete (*request)->mpi_request"); 
    7156        delete (*request)->mpi_request; 
    7257        delete *request; 
    73         //int count; 
    74         //MPI_Get_count(status, request->ep_datatype, &count); 
    75         //check_sum_recv(request->buf, count, request->ep_datatype, request->ep_src, request->ep_tag, request->comm, 2); 
    76       }   
    77  
    78       return Request_Check(); 
     58        *request=0; 
     59      } 
    7960    } 
     61     
     62    return Request_Check(); 
    8063 
    8164  } 
     
    8568  { 
    8669    Debug("MPI_Testall with EP"); 
    87  
     70    *flag = false; 
     71    
     72    int rank = array_of_requests[0]->comm->ep_comm_ptr->size_rank_info[0].first; 
     73     
     74    for(int i=0; i<count; i++) 
     75    { 
     76      if(array_of_requests[i]->type == 2) 
     77      { 
     78        *flag=false; 
     79        return Request_Check(); 
     80      } 
     81    } 
     82     
    8883    ::MPI_Request* mpi_request = new ::MPI_Request[count]; 
    8984    ::MPI_Status* mpi_status = new ::MPI_Status[count]; 
     
    10196      for(int i=0; i<count; i++) 
    10297      { 
    103         array_of_statuses[i].mpi_status = &mpi_status[i]; 
     98        array_of_statuses[i].mpi_status = new ::MPI_Status(mpi_status[i]); 
    10499        array_of_statuses[i].ep_src = array_of_requests[i]->ep_src; 
    105100        array_of_statuses[i].ep_tag = array_of_requests[i]->ep_tag; 
     
    108103        array_of_requests[i]->state = 2; 
    109104       
    110         memcheck("delete "<< array_of_requests[i]->mpi_request <<" : in ep_lib::MPI_Waitall, array_of_requests["<<i<<"]->mpi_request"); 
     105        memcheck("delete "<< array_of_requests[i]->mpi_request <<" : in ep_lib::MPI_Testall, array_of_requests["<<i<<"]->mpi_request"); 
    111106        delete array_of_requests[i]->mpi_request; 
    112         delete array_of_requests[i];  
     107        delete array_of_requests[i]; 
     108        array_of_requests[i]=0; 
     109         
    113110      } 
    114111       
    115112    } 
     113     
     114    return Request_Check(); 
    116115 
    117     return Request_Check(); 
    118116  } 
    119117 
Note: See TracChangeset for help on using the changeset viewer.