Changeset 1149


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

bug fixed in mpi_comm_split. Key needs to be specifify.

Location:
XIOS/dev/branch_yushan_merged
Files:
8 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; 
  • XIOS/dev/branch_yushan_merged/src/io/netCdfInterface.cpp

    r1146 r1149  
    128128int CNetCdfInterface::close(int ncId) 
    129129{ 
    130   int status = nc_close(ncId); 
     130  int status = NC_NOERR; 
     131  //#pragma omp critical (_netcdf) 
     132  #pragma omp master 
     133  { 
     134  status = nc_close(ncId); 
    131135  if (NC_NOERR != status) 
    132136  { 
     
    139143    throw CNetCdfException(e); 
    140144  } 
    141  
     145  } 
    142146  return status; 
    143147} 
  • XIOS/dev/branch_yushan_merged/src/node/field.cpp

    r1134 r1149  
    2626namespace xios{ 
    2727 
    28    /// ////////////////////// Définitions ////////////////////// /// 
     28   /// ////////////////////// Dfinitions ////////////////////// /// 
    2929 
    3030   CField::CField(void) 
     
    691691     CContext* context = CContext::getCurrent(); 
    692692     solveOnlyReferenceEnabledField(doSending2Server); 
     693     int myRank; 
     694     MPI_Comm_rank(context->client->intraComm, &myRank); 
    693695 
    694696     if (!areAllReferenceSolved) 
     
    711713     if (context->hasClient) 
    712714     { 
     715       MPI_Barrier(context->client->intraComm); 
     716       printf("Proc %d enters function\n", myRank); 
    713717       solveTransformedGrid(); 
     718       MPI_Barrier(context->client->intraComm); 
     719       printf("Proc %d exits function\n", myRank); 
    714720     } 
    715721 
  • XIOS/dev/branch_yushan_merged/src/node/file.cpp

    r1146 r1149  
    634634 
    635635     // Now everything is ok, close it 
    636      close(); 
     636     //close(); 
    637637   } 
    638638 
  • XIOS/dev/branch_yushan_merged/src/transformation/domain_algorithm_interpolate.cpp

    r1134 r1149  
    404404  CContext* context = CContext::getCurrent(); 
    405405  CContextClient* client=context->client; 
     406  int split_key; 
     407  ep_lib::MPI_Comm_rank(client->intraComm, &split_key); 
    406408 
    407409  ep_lib::MPI_Comm poleComme(MPI_COMM_NULL); 
    408   ep_lib::MPI_Comm_split(client->intraComm, interMapValuePole.empty() ? MPI_UNDEFINED : 1, 0, &poleComme); 
     410  ep_lib::MPI_Comm_split(client->intraComm, interMapValuePole.empty() ? 9 : 1, split_key, &poleComme); 
    409411  if (MPI_COMM_NULL != poleComme) 
    410412  { 
     
    421423    std::vector<int> recvCount(nbClientPole,0); 
    422424    std::vector<int> displ(nbClientPole,0); 
    423     MPI_Allgather(&nbWeight,1,MPI_INT,&recvCount[0],1,MPI_INT,poleComme) ; 
     425    ep_lib::MPI_Allgather(&nbWeight,1,MPI_INT,&recvCount[0],1,MPI_INT,poleComme) ; 
    424426 
    425427    displ[0]=0; 
    426428    for(int n=1;n<nbClientPole;++n) displ[n]=displ[n-1]+recvCount[n-1] ; 
    427429    int recvSize=displ[nbClientPole-1]+recvCount[nbClientPole-1] ; 
     430     
    428431 
    429432    std::vector<int> sendSourceIndexBuff(nbWeight); 
     
    444447 
    445448    // Gather all index and weight for pole 
    446     MPI_Allgatherv(&sendSourceIndexBuff[0],nbWeight,MPI_INT,&recvSourceIndexBuff[0],&recvCount[0],&displ[0],MPI_INT,poleComme); 
    447     MPI_Allgatherv(&sendSourceWeightBuff[0],nbWeight,MPI_DOUBLE,&recvSourceWeightBuff[0],&recvCount[0],&displ[0],MPI_DOUBLE,poleComme); 
     449    ep_lib::MPI_Allgatherv(&sendSourceIndexBuff[0],nbWeight,MPI_INT,&recvSourceIndexBuff[0],&recvCount[0],&displ[0],MPI_INT,poleComme); 
     450    ep_lib::MPI_Allgatherv(&sendSourceWeightBuff[0],nbWeight,MPI_DOUBLE,&recvSourceWeightBuff[0],&recvCount[0],&displ[0],MPI_DOUBLE,poleComme); 
    448451 
    449452    std::map<int,double> recvTemp; 
     
    567570 
    568571 
    569   MPI_Allreduce(sendBuff, recvBuff, nbClient, MPI_INT, MPI_SUM, client->intraComm); 
     572  ep_lib::MPI_Allreduce(sendBuff, recvBuff, nbClient, MPI_INT, MPI_SUM, client->intraComm); 
    570573 
    571574  int* sendIndexDestBuff = new int [sendBuffSize]; 
     
    595598 
    596599    sendRequest.push_back(ep_lib::MPI_Request()); 
    597     MPI_Isend(sendIndexDestBuff + sendOffSet, 
     600    ep_lib::MPI_Isend(sendIndexDestBuff + sendOffSet, 
    598601             k, 
    599602             MPI_INT, 
     
    603606             &sendRequest.back()); 
    604607    sendRequest.push_back(ep_lib::MPI_Request()); 
    605     MPI_Isend(sendIndexSrcBuff + sendOffSet, 
     608    ep_lib::MPI_Isend(sendIndexSrcBuff + sendOffSet, 
    606609             k, 
    607610             MPI_INT, 
     
    611614             &sendRequest.back()); 
    612615    sendRequest.push_back(ep_lib::MPI_Request()); 
    613     MPI_Isend(sendWeightBuff + sendOffSet, 
     616    ep_lib::MPI_Isend(sendWeightBuff + sendOffSet, 
    614617             k, 
    615618             MPI_DOUBLE, 
     
    630633  { 
    631634    ep_lib::MPI_Status recvStatus; 
    632     MPI_Recv((recvIndexDestBuff + receivedSize), 
     635    ep_lib::MPI_Recv((recvIndexDestBuff + receivedSize), 
    633636             recvBuffSize, 
    634637             MPI_INT, 
     
    639642 
    640643    int countBuff = 0; 
    641     MPI_Get_count(&recvStatus, MPI_INT, &countBuff); 
     644    ep_lib::MPI_Get_count(&recvStatus, MPI_INT, &countBuff); 
    642645    #ifdef _usingMPI 
    643646    clientSrcRank = recvStatus.MPI_SOURCE; 
     
    645648    clientSrcRank = recvStatus.ep_src; 
    646649    #endif 
    647     MPI_Recv((recvIndexSrcBuff + receivedSize), 
     650    ep_lib::MPI_Recv((recvIndexSrcBuff + receivedSize), 
    648651             recvBuffSize, 
    649652             MPI_INT, 
     
    653656             &recvStatus); 
    654657 
    655     MPI_Recv((recvWeightBuff + receivedSize), 
     658    ep_lib::MPI_Recv((recvWeightBuff + receivedSize), 
    656659             recvBuffSize, 
    657660             MPI_DOUBLE, 
     
    671674  std::vector<ep_lib::MPI_Status> requestStatus(sendRequest.size()); 
    672675  ep_lib::MPI_Status stat_ignore; 
    673   MPI_Waitall(sendRequest.size(), &sendRequest[0], &stat_ignore); 
     676  ep_lib::MPI_Waitall(sendRequest.size(), &sendRequest[0], &stat_ignore); 
    674677 
    675678  delete [] sendIndexDestBuff; 
     
    761764  } 
    762765 
    763   MPI_Allreduce(&localNbWeight, &globalNbWeight, 1, MPI_LONG, MPI_SUM, client->intraComm); 
     766  ep_lib::MPI_Allreduce(&localNbWeight, &globalNbWeight, 1, MPI_LONG, MPI_SUM, client->intraComm); 
    764767  ep_lib::MPI_Scan(&localNbWeight, &startIndex, 1, MPI_LONG, MPI_SUM, client->intraComm); 
    765768   
Note: See TracChangeset for help on using the changeset viewer.