Changeset 1602


Ignore:
Timestamp:
11/19/18 16:28:03 (17 months ago)
Author:
yushan
Message:

branch_openmp merged with trunk r1597

Location:
XIOS/dev/dev_trunk_omp/extern/remap/src
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_trunk_omp/extern/remap/src/cputime.cpp

    r694 r1602  
    11#include "mpi.hpp" 
     2using namespace ep_lib; 
    23 
    34namespace sphereRemap { 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/gridRemap.cpp

    r688 r1602  
    1111 
    1212CRemapGrid srcGrid; 
     13#pragma omp threadprivate(srcGrid) 
     14 
    1315CRemapGrid tgtGrid; 
     16#pragma omp threadprivate(tgtGrid) 
    1417 
    1518} 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/gridRemap.hpp

    r688 r1602  
    1414Coord readPole(std::istream&); 
    1515 
    16 extern CRemapGrid srcGrid; 
    17 extern CRemapGrid tgtGrid; 
     16//extern CRemapGrid srcGrid; 
     17//extern CRemapGrid tgtGrid; 
    1818 
    1919} 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/intersect.cpp

    r1158 r1602  
    1414 
    1515namespace sphereRemap { 
     16 
     17extern CRemapGrid srcGrid; 
     18#pragma omp threadprivate(srcGrid) 
     19 
     20extern CRemapGrid tgtGrid; 
     21#pragma omp threadprivate(tgtGrid) 
    1622 
    1723using namespace std; 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/intersection_ym.cpp

    r1588 r1602  
    1919namespace sphereRemap { 
    2020 
     21extern CRemapGrid srcGrid; 
     22#pragma omp threadprivate(srcGrid) 
     23 
     24extern CRemapGrid tgtGrid; 
     25#pragma omp threadprivate(tgtGrid) 
     26 
     27 
    2128using namespace std; 
    2229using namespace ClipperLib ; 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/libmapper.cpp

    r694 r1602  
    1515#include "cputime.hpp" // cputime 
    1616 
     17using namespace ep_lib; 
     18 
    1719using namespace sphereRemap ; 
    1820 
     
    2022   and deallocated during the second step (computing the weights) */ 
    2123Mapper *mapper; 
    22  
     24#pragma omp threadprivate(mapper) 
    2325 
    2426/** xxx_bounds_yyy is of length n_vert_per_cell_xxx*n_cell_xxx 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/mapper.cpp

    r1158 r1602  
    1212 
    1313#include "mapper.hpp" 
     14using namespace ep_lib; 
    1415 
    1516namespace sphereRemap { 
     17 
     18extern CRemapGrid srcGrid; 
     19#pragma omp threadprivate(srcGrid) 
     20 
     21extern CRemapGrid tgtGrid; 
     22#pragma omp threadprivate(tgtGrid) 
     23 
    1624 
    1725/* A subdivition of an array into N sub-arays 
     
    303311                        MPI_Issend(sendValue[rank],  nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 
    304312                        nbSendRequest++; 
    305                         MPI_Issend(sendArea[rank],  nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 
     313                        MPI_Issend(sendArea[rank],  nbRecvElement[rank], MPI_DOUBLE, rank, 1, communicator, &sendRequest[nbSendRequest]); 
    306314                        nbSendRequest++; 
    307315                        if (order == 2) 
    308316                        { 
    309317                                MPI_Issend(sendGrad[rank], 3*nbRecvElement[rank]*(NMAX+1), 
    310                                                                 MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 
     318                                                                MPI_DOUBLE, rank, 2, communicator, &sendRequest[nbSendRequest]); 
    311319                                nbSendRequest++; 
    312                                 MPI_Issend(sendNeighIds[rank], 4*nbRecvElement[rank]*(NMAX+1), MPI_INT, rank, 0, communicator, &sendRequest[nbSendRequest]); 
     320                                MPI_Issend(sendNeighIds[rank], 4*nbRecvElement[rank]*(NMAX+1), MPI_INT, rank, 3, communicator, &sendRequest[nbSendRequest]); 
    313321//ym  --> attention taille GloId 
    314322                                nbSendRequest++; 
     
    316324                        else 
    317325                        { 
    318                                 MPI_Issend(sendNeighIds[rank], 4*nbRecvElement[rank], MPI_INT, rank, 0, communicator, &sendRequest[nbSendRequest]); 
     326                                MPI_Issend(sendNeighIds[rank], 4*nbRecvElement[rank], MPI_INT, rank, 4, communicator, &sendRequest[nbSendRequest]); 
    319327//ym  --> attention taille GloId 
    320328                                nbSendRequest++; 
     
    325333                        MPI_Irecv(recvValue[rank],  nbSendElement[rank], MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 
    326334                        nbRecvRequest++; 
    327                         MPI_Irecv(recvArea[rank],  nbSendElement[rank], MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 
     335                        MPI_Irecv(recvArea[rank],  nbSendElement[rank], MPI_DOUBLE, rank, 1, communicator, &recvRequest[nbRecvRequest]); 
    328336                        nbRecvRequest++; 
    329337                        if (order == 2) 
    330338                        { 
    331339                                MPI_Irecv(recvGrad[rank], 3*nbSendElement[rank]*(NMAX+1), 
    332                                                 MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 
     340                                                MPI_DOUBLE, rank, 2, communicator, &recvRequest[nbRecvRequest]); 
    333341                                nbRecvRequest++; 
    334                                 MPI_Irecv(recvNeighIds[rank], 4*nbSendElement[rank]*(NMAX+1), MPI_INT, rank, 0, communicator, &recvRequest[nbRecvRequest]); 
     342                                MPI_Irecv(recvNeighIds[rank], 4*nbSendElement[rank]*(NMAX+1), MPI_INT, rank, 3, communicator, &recvRequest[nbRecvRequest]); 
    335343//ym  --> attention taille GloId 
    336344                                nbRecvRequest++; 
     
    338346                        else 
    339347                        { 
    340                                 MPI_Irecv(recvNeighIds[rank], 4*nbSendElement[rank], MPI_INT, rank, 0, communicator, &recvRequest[nbRecvRequest]); 
     348                                MPI_Irecv(recvNeighIds[rank], 4*nbSendElement[rank], MPI_INT, rank, 4, communicator, &recvRequest[nbRecvRequest]); 
    341349//ym  --> attention taille GloId 
    342350                                nbRecvRequest++; 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/mapper.hpp

    r1158 r1602  
    1818{ 
    1919public: 
    20        Mapper(MPI_Comm comm=MPI_COMM_WORLD) : communicator(comm), verbose(SILENT), neighbourElements(NULL), sstree(comm) {} 
     20       Mapper(ep_lib::MPI_Comm comm) : communicator(comm), verbose(SILENT), neighbourElements(NULL), sstree(comm) {} 
     21 
    2122       ~Mapper(); 
    2223       void setVerbosity(verbosity v) {verbose=v ;} 
     
    6768 
    6869       CParallelTree sstree; 
    69        MPI_Comm communicator ; 
     70       ep_lib::MPI_Comm communicator ; 
    7071       std::vector<Elt>  sourceElements ; 
    7172       std::vector<Node> sourceMesh ; 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/mpi_cascade.cpp

    r688 r1602  
    11#include "mpi_cascade.hpp" 
    22#include <iostream> 
     3using namespace ep_lib; 
    34 
    45namespace sphereRemap { 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/mpi_cascade.hpp

    r694 r1602  
    1212{ 
    1313public: 
    14         CCascadeLevel(MPI_Comm comm) : comm(comm) 
    15         { 
    16                 MPI_Comm_size(comm, &size); 
    17                 MPI_Comm_rank(comm, &rank); 
    18         } 
    19         int colour() const { return rank % group_size; }; 
    20         int key() const { return p_colour() + rank/(p_grp_size*group_size)*p_grp_size; } 
     14  CCascadeLevel(ep_lib::MPI_Comm comm) : comm(comm) 
     15  { 
     16    ep_lib::MPI_Comm_size(comm, &size); 
     17    ep_lib::MPI_Comm_rank(comm, &rank); 
     18  } 
     19  int colour() const { return rank % group_size; }; 
     20  int key() const { return p_colour() + rank/(p_grp_size*group_size)*p_grp_size; } 
    2121 
    22         // perpendicular group 
    23         int p_colour() const { return (rank%group_size + rank/group_size) % p_grp_size; } 
    24         int p_key() const { return colour() + rank/(p_grp_size*group_size)*group_size; } 
     22  // perpendicular group 
     23  int p_colour() const { return (rank%group_size + rank/group_size) % p_grp_size; } 
     24  int p_key() const { return colour() + rank/(p_grp_size*group_size)*group_size; } 
    2525 
    26         MPI_Comm comm, pg_comm; 
    27         int rank; 
    28         int size; 
    29         int group_size; // group_size and p_grp_size are interchanged?? FIXME 
    30         int p_grp_size; 
     26  ep_lib::MPI_Comm comm, pg_comm; 
     27  int rank; 
     28  int size; 
     29  int group_size; // group_size and p_grp_size are interchanged?? FIXME 
     30  int p_grp_size; 
    3131}; 
    3232 
     
    3434{ 
    3535public: 
    36         //  
    37         CMPICascade(int nodes_per_level, MPI_Comm comm); 
     36  CMPICascade(int nodes_per_level, ep_lib::MPI_Comm comm); 
    3837 
    39         int num_levels; 
    40         std::vector<CCascadeLevel> level; 
     38  int num_levels; 
     39  std::vector<CCascadeLevel> level; 
    4140}; 
    4241 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/mpi_routing.cpp

    r694 r1602  
    55#include "timerRemap.hpp" 
    66#include <iostream> 
     7using namespace ep_lib; 
    78 
    89namespace sphereRemap { 
     
    150151        for (int i = 0; i < nbSource; i++) 
    151152        { 
    152                 MPI_Irecv(&sourceRank[i], 1, MPI_INT, MPI_ANY_SOURCE, 0, communicator, &request[indexRequest]); 
    153                 indexRequest++; 
    154         } 
    155         MPI_Barrier(communicator); 
    156         for (int i = 0; i < nbTarget; i++) 
    157         { 
    158                 MPI_Isend(&mpiRank, 1, MPI_INT, targetRank[i], 0, communicator, &request[indexRequest]); 
    159                 indexRequest++; 
     153                MPI_Irecv(&sourceRank[i], 1, MPI_INT, -2, 0, communicator, &request[indexRequest++]); 
     154        } 
     155        MPI_Barrier(communicator); 
     156        for (int i = 0; i < nbTarget; i++) 
     157        { 
     158                MPI_Isend(&mpiRank, 1, MPI_INT, targetRank[i], 0, communicator, &request[indexRequest++]); 
    160159        } 
    161160        MPI_Waitall(indexRequest, request, status); 
     
    170169        for (int i = 0; i < nbSource; i++) 
    171170        { 
    172                 MPI_Irecv(&sourceRank[i], 1, MPI_INT, MPI_ANY_SOURCE, 0, communicator, &request[indexRequest]); 
     171                MPI_Irecv(&sourceRank[i], 1, MPI_INT, -2, 0, communicator, &request[indexRequest]); 
    173172                indexRequest++; 
    174173        } 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/mpi_routing.hpp

    r694 r1602  
    1111{ 
    1212 
    13         MPI_Comm communicator; 
     13        ep_lib::MPI_Comm communicator; 
    1414        int mpiRank; 
    1515        int mpiSize; 
     
    2929 
    3030public: 
    31         CMPIRouting(MPI_Comm comm); 
     31        CMPIRouting(ep_lib::MPI_Comm comm); 
    3232        ~CMPIRouting(); 
    3333        template<typename T> void init(const std::vector<T>& route, CMPICascade *cascade = NULL); 
     
    4444template <typename T> 
    4545void alltoalls_known(const std::vector<std::vector<T> >& send, std::vector<std::vector<T> >& recv, 
    46                      const std::vector<int>& ranks, MPI_Comm communicator); 
     46                     const std::vector<int>& ranks, ep_lib::MPI_Comm communicator); 
    4747 
    4848template <typename T> 
    4949void alltoalls_unknown(const std::vector<std::vector<T> >& send, std::vector<std::vector<T> >& recv, 
    50                        const std::vector<int>& ranks, MPI_Comm communicator); 
     50                       const std::vector<int>& ranks, ep_lib::MPI_Comm communicator); 
    5151} 
    5252#endif 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/parallel_tree.cpp

    r923 r1602  
    1212 
    1313#include "parallel_tree.hpp" 
     14using namespace ep_lib; 
    1415 
    1516namespace sphereRemap { 
     17 
     18extern CRemapGrid srcGrid; 
     19#pragma omp threadprivate(srcGrid) 
     20 
     21extern CRemapGrid tgtGrid; 
     22#pragma omp threadprivate(tgtGrid) 
    1623 
    1724static const int assignLevel = 2; 
     
    114121} 
    115122 
    116 //CParallelTree::CParallelTree(MPI_Comm comm) : communicator(comm), cascade(MIN_NODE_SZ*MIN_NODE_SZ, comm) 
    117 CParallelTree::CParallelTree(MPI_Comm comm) : communicator(comm), cascade(MAX_NODE_SZ*MAX_NODE_SZ*2, comm) 
    118 { 
    119         treeCascade.reserve(cascade.num_levels); 
    120         for (int lev = 0; lev < cascade.num_levels; lev++) 
    121                 treeCascade.push_back(CSampleTree(cascade.level[lev].group_size, assignLevel)); 
     123CParallelTree::CParallelTree(MPI_Comm comm) : communicator(comm), cascade(MIN_NODE_SZ*MIN_NODE_SZ*2, comm) 
     124{ 
     125  treeCascade.reserve(cascade.num_levels); 
     126  for (int lev = 0; lev < cascade.num_levels; lev++) 
     127    treeCascade.push_back(CSampleTree(cascade.level[lev].group_size, assignLevel)); 
    122128} 
    123129 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/parallel_tree.hpp

    r694 r1602  
    1212{ 
    1313public: 
    14         CParallelTree(MPI_Comm comm); 
    15         ~CParallelTree(); 
     14  CParallelTree(ep_lib::MPI_Comm comm); 
     15  ~CParallelTree(); 
    1616 
    17         void build(vector<Node>& node, vector<Node>& node2); 
     17  void build(vector<Node>& node, vector<Node>& node2); 
    1818 
    19         void routeNodes(vector<int>& route, vector<Node>& nodes, int level = 0); 
    20         void routeIntersections(vector<vector<int> >& route, vector<Node>& nodes, int level = 0); 
     19  void routeNodes(vector<int>& route, vector<Node>& nodes, int level = 0); 
     20  void routeIntersections(vector<vector<int> >& route, vector<Node>& nodes, int level = 0); 
    2121 
    22         int nbLocalElements; 
    23         Elt* localElements; 
     22  int nbLocalElements; 
     23  Elt* localElements; 
    2424 
    25         CTree localTree; 
     25  CTree localTree; 
    2626 
    2727private: 
    28         void updateCirclesForRouting(Coord rootCentre, double rootRadius, int level = 0); 
    29         void buildSampleTreeCascade(vector<Node>& sampleNodes, int level = 0); 
    30         void buildLocalTree(const vector<Node>& node, const vector<int>& route); 
    31         void buildRouteTree(); 
     28  void updateCirclesForRouting(Coord rootCentre, double rootRadius, int level = 0); 
     29  void buildSampleTreeCascade(vector<Node>& sampleNodes, int level = 0); 
     30  void buildLocalTree(const vector<Node>& node, const vector<int>& route); 
     31  void buildRouteTree(); 
    3232 
    33         //CSampleTree sampleTree; 
    34         vector<CSampleTree> treeCascade; // first for sample tree, then for routing tree 
    35         CMPICascade cascade; 
    36   MPI_Comm communicator ; 
     33  //CSampleTree sampleTree; 
     34  vector<CSampleTree> treeCascade; // first for sample tree, then for routing tree 
     35  CMPICascade cascade; 
     36  ep_lib::MPI_Comm communicator ; 
    3737 
    3838}; 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/timerRemap.cpp

    r694 r1602  
    44#include <map> 
    55#include <iostream> 
     6using namespace ep_lib; 
    67 
    78namespace sphereRemap { 
     
    910using namespace std; 
    1011 
    11 map<string,CTimer*> CTimer::allTimer; 
     12//map<string,CTimer*> CTimer::allTimer; 
     13map<string,CTimer*> *CTimer::allTimer_ptr = 0; 
    1214 
    1315CTimer::CTimer(const string& name_) : name(name_) 
     
    5658{ 
    5759        map<string,CTimer*>::iterator it; 
    58         it=allTimer.find(name); 
    59         if (it==allTimer.end()) it=allTimer.insert(pair<string,CTimer*>(name,new CTimer(name))).first; 
     60        if(allTimer_ptr == 0) allTimer_ptr = new map<string,CTimer*>; 
     61        //it=allTimer.find(name); 
     62        it=allTimer_ptr->find(name); 
     63        //if (it==allTimer.end()) it=allTimer.insert(pair<string,CTimer*>(name,new CTimer(name))).first; 
     64        if (it==allTimer_ptr->end()) it=allTimer_ptr->insert(pair<string,CTimer*>(name,new CTimer(name))).first; 
    6065        return *(it->second); 
    6166} 
  • XIOS/dev/dev_trunk_omp/extern/remap/src/timerRemap.hpp

    r694 r1602  
    2626    double getCumulatedTime(void); 
    2727    void print(void); 
    28     static map<string,CTimer*> allTimer; 
     28    //static map<string,CTimer*> allTimer; 
     29    static map<string,CTimer*> *allTimer_ptr; 
     30    #pragma omp threadprivate(allTimer_ptr) 
    2931    static double getTime(void); 
    3032    static CTimer& get(string name); 
Note: See TracChangeset for help on using the changeset viewer.