Ignore:
Timestamp:
05/31/17 10:51:06 (7 years ago)
Author:
yushan
Message:

bug fixed in mpi_comm_split. Key needs to be specifify.

Location:
XIOS/dev/branch_yushan_merged/extern
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_yushan_merged/extern/remap/src/intersect.cpp

    r1016 r1149  
    5656    for (int j = 0; j < b.n; j++) 
    5757    { 
    58 // share a full edge ? be carefull at the orientation 
    59       assert(squaredist(a.vertex[ i       ], b.vertex[ j       ]) > 1e-10*1e-10 || 
    60              squaredist(a.vertex[(i+1)%a.n], b.vertex[(j+1)%b.n]) > 1e-10*1e-10); 
     58      // share a full edge ? be carefull at the orientation 
     59      /* 
     60      if(squaredist(a.vertex[i], b.vertex[j]) > 1e-10*1e-10 || 
     61         squaredist(a.vertex[(i+1)%a.n], b.vertex[(j+1)%b.n]) > 1e-10*1e-10 ) 
     62      {       
     63        printf("A : squaredist(a.vertex[%d], b.vertex[%d]) = %.10e  %d\n",  
     64                i, j, squaredist(a.vertex[i], b.vertex[j]),  
     65                squaredist(a.vertex[i], b.vertex[j]) > 1e-10*1e-10 ? true : false); 
     66        printf("B : squaredist(a.vertex[%d], b.vertex[%d]) = %.10e  %d\n",  
     67                (i+1)%a.n, (j+1)%b.n, squaredist(a.vertex[(i+1)%a.n], b.vertex[(j+1)%b.n]), 
     68                squaredist(a.vertex[(i+1)%a.n], b.vertex[(j+1)%b.n]) > 1e-10*1e-10 ? true : false); 
     69 
     70        assert(squaredist(a.vertex[ i       ], b.vertex[ j       ]) > 1e-10*1e-10 || 
     71               squaredist(a.vertex[(i+1)%a.n], b.vertex[(j+1)%b.n]) > 1e-10*1e-10); 
     72        exit(0); 
     73      }*/ 
    6174      if (   squaredist(a.vertex[ i       ], b.vertex[ j           ]) < 1e-10*1e-10 && 
    6275             squaredist(a.vertex[(i+1)%a.n], b.vertex[(j+b.n-1)%b.n]) < 1e-10*1e-10) 
  • XIOS/dev/branch_yushan_merged/extern/remap/src/mapper.cpp

    r1147 r1149  
    270270    MPI_Status *status = new MPI_Status[4*mpiSize]; 
    271271     
     272    MPI_Waitall(nbRecvRequest, recvRequest, status); 
    272273    MPI_Waitall(nbSendRequest, sendRequest, status); 
    273     MPI_Waitall(nbRecvRequest, recvRequest, status); 
     274     
    274275 
    275276    /* for all indices that have been received from requesting ranks: pack values and gradients, then send */ 
     
    300301                    sendNeighIds[rank][j] = sstree.localElements[recvElement[rank][j]].src_id; 
    301302            } 
    302             MPI_Issend(sendValue[rank],  nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 
     303            MPI_Issend(sendValue[rank], nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 
    303304            nbSendRequest++; 
    304             MPI_Issend(sendArea[rank],  nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 
     305            MPI_Issend(sendArea[rank], nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 
    305306            nbSendRequest++; 
    306307            if (order == 2) 
     
    317318                MPI_Issend(sendNeighIds[rank], 4*nbRecvElement[rank], MPI_INT, rank, 0, communicator, &sendRequest[nbSendRequest]); 
    318319                //ym  --> attention taille GloId 
    319                 nbSendRequest++; 
    320                  
     320                nbSendRequest++;                 
    321321            } 
    322322        } 
     
    345345    } 
    346346     
    347     MPI_Waitall(nbSendRequest, sendRequest, status); 
    348347    MPI_Waitall(nbRecvRequest, recvRequest, status); 
     348    MPI_Waitall(nbSendRequest, sendRequest, status);  
     349     
    349350     
    350351 
     
    407408        } 
    408409    } 
    409  
     410     
    410411    /* free all memory allocated in this function */ 
    411     for (int rank = 0; rank < mpiSize; rank++) 
     412    /*for (int rank = 0; rank < mpiSize; rank++) 
    412413    { 
    413414        if (nbSendElement[rank] > 0) 
     
    446447    delete[] sendNeighIds; 
    447448    delete[] recvNeighIds; 
     449    */ 
    448450    return i; 
    449451} 
     
    546548        } 
    547549    } 
    548  
     550     
     551    MPI_Waitall(nbRecvRequest, recvRequest, status); 
    549552    MPI_Waitall(nbSendRequest, sendRequest, status); 
    550     MPI_Waitall(nbRecvRequest, recvRequest, status); 
    551553 
    552554    for (int rank = 0; rank < mpiSize; rank++) 
     
    619621    } 
    620622 
     623    MPI_Waitall(nbRecvRequest, recvRequest, status); 
    621624    MPI_Waitall(nbSendRequest, sendRequest, status); 
    622     MPI_Waitall(nbRecvRequest, recvRequest, status); 
    623625  
    624626    int nbNeighbourNodes = 0; 
     
    803805    } 
    804806  
     807    MPI_Waitall(nbRecvRequest, recvRequest, status); 
    805808    MPI_Waitall(nbSendRequest, sendRequest, status); 
    806     MPI_Waitall(nbRecvRequest, recvRequest, status); 
     809     
    807810     
    808811    char **sendBuffer2 = new char*[mpiSize]; 
     
    878881        { 
    879882            MPI_Issend(sendBuffer2[rank], sentMessageSize[rank], MPI_CHAR, rank, 0, communicator, &sendRequest[nbSendRequest]); 
    880             printf("proc %d send %d elements to proc %d\n", mpiRank, sentMessageSize[rank], rank); 
    881883            nbSendRequest++; 
    882884        } 
     
    884886        { 
    885887            MPI_Irecv(recvBuffer2[rank], recvMessageSize[rank], MPI_CHAR, rank, 0, communicator, &recvRequest[nbRecvRequest]); 
    886             printf("proc %d recv %d elements from proc %d\n", mpiRank, recvMessageSize[rank], rank); 
    887888            nbRecvRequest++; 
    888889        } 
    889890    } 
    890891     
     892    MPI_Waitall(nbRecvRequest, recvRequest, status); 
    891893    MPI_Waitall(nbSendRequest, sendRequest, status); 
    892     MPI_Waitall(nbRecvRequest, recvRequest, status); 
     894    
    893895    
    894896 
  • XIOS/dev/branch_yushan_merged/extern/src_ep_dev/ep_test.cpp

    r1134 r1149  
    1515namespace ep_lib { 
    1616 
    17         int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) 
    18         { 
    19                 Debug("MPI_Test with EP"); 
     17  int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) 
     18  { 
     19    Debug("MPI_Test with EP"); 
    2020 
    2121    *flag = false; 
     
    5656    if(request->type == 3)  // imrecv 
    5757    { 
    58       ::MPI_Request mpi_request = static_cast< ::MPI_Request >(request->mpi_request); 
     58      ::MPI_Request *mpi_request = static_cast< ::MPI_Request* >(&(request->mpi_request)); 
    5959      ::MPI_Status mpi_status; 
    60       ::MPI_Test(&mpi_request, flag, &mpi_status); 
     60       
     61      ::MPI_Errhandler_set(MPI_COMM_WORLD_STD, MPI_ERRORS_RETURN); 
     62      int error_code = ::MPI_Test(mpi_request, flag, &mpi_status); 
     63      if (error_code != MPI_SUCCESS) { 
     64       
     65         char error_string[BUFSIZ]; 
     66         int length_of_error_string, error_class; 
     67       
     68         ::MPI_Error_class(error_code, &error_class); 
     69         ::MPI_Error_string(error_class, error_string, &length_of_error_string); 
     70         printf("%s\n", error_string); 
     71      } 
     72       
    6173      if(*flag) 
    6274      { 
     
    7991    } 
    8092                 
    81         } 
     93  } 
    8294 
    8395 
    84         int MPI_Testall(int count, MPI_Request *array_of_requests, int *flag, MPI_Status *array_of_statuses) 
    85         { 
    86           Debug("MPI_Testall with EP"); 
     96  int MPI_Testall(int count, MPI_Request *array_of_requests, int *flag, MPI_Status *array_of_statuses) 
     97  { 
     98    Debug("MPI_Testall with EP"); 
    8799    *flag = true; 
    88100    int i=0; 
     
    92104      i++; 
    93105    } 
    94         } 
     106  } 
    95107 
    96108 
  • XIOS/dev/branch_yushan_merged/extern/src_ep_dev/ep_wait.cpp

    r1147 r1149  
    100100          if(array_of_requests[i].type != 2) // isend or imrecv 
    101101          {       
    102             MPI_Wait(&array_of_requests[i], &array_of_statuses[i]); 
     102            //MPI_Wait(&array_of_requests[i], &array_of_statuses[i]); 
     103            int tested=false; 
     104            while(!tested) MPI_Test(&array_of_requests[i], &tested, &array_of_statuses[i]); 
    103105            finished++; 
    104106            finished_index[i] = true; 
Note: See TracChangeset for help on using the changeset viewer.