Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
35e3196d52f64c998b77f42845141366e1bd8000
[simgrid.git] / src / smpi / include / smpi_topo.hpp
1 /* Copyright (c) 2010-2019. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #ifndef SMPI_TOPO_HPP_INCLUDED
7 #define SMPI_TOPO_HPP_INCLUDED
8
9 #include "smpi_comm.hpp"
10 #include "smpi_status.hpp"
11
12 typedef SMPI_Topology *MPI_Topology;
13
14 namespace simgrid{
15 namespace smpi{
16
17 class Topo {
18   public:
19     virtual ~Topo()=default;
20     MPI_Comm getComm() const { return comm_; }
21     void setComm(MPI_Comm comm) { comm_ = comm; }
22   private:
23     MPI_Comm comm_;
24 };
25
26
27 class Topo_Cart: public Topo {
28   private:
29     int nnodes_ = 0;
30     int ndims_;
31     int *dims_;
32     int *periodic_;
33     int *position_;
34   public:
35     explicit Topo_Cart(int ndims);
36     Topo_Cart(const Topo_Cart&) = delete;
37     Topo_Cart& operator=(const Topo_Cart&) = delete;
38     ~Topo_Cart();
39     Topo_Cart(MPI_Comm comm_old, int ndims, int dims[], int periods[], int reorder, MPI_Comm *comm_cart);
40     Topo_Cart* sub(const int remain_dims[], MPI_Comm *newcomm) ;
41     int coords(int rank, int maxdims, int coords[]) ;
42     int get(int maxdims, int* dims, int* periods, int* coords);
43     int rank(int* coords, int* rank);
44     int shift(int direction, int disp, int *rank_source, int *rank_dest) ;
45     int dim_get(int *ndims);
46     static int Dims_create(int nnodes, int ndims, int dims[]);
47 };
48
49
50 class Topo_Graph: public Topo {
51   private:
52     int nnodes_;
53     int *index_;
54     int *edges_;
55   public:
56     Topo_Graph();
57     Topo_Graph(const Topo_Graph&) = delete;
58     Topo_Graph& operator=(const Topo_Graph&) = delete;
59     ~Topo_Graph();
60 };
61
62 class Topo_Dist_Graph: public Topo {
63   private:
64     int *in_;
65     int *in_weights_;
66     int *out_;
67     int *out_weights_;
68   public:
69     Topo_Dist_Graph();
70     Topo_Dist_Graph(const Topo_Dist_Graph&) = delete;
71     Topo_Dist_Graph& operator=(const Topo_Dist_Graph&) = delete;
72     ~Topo_Dist_Graph();
73 };
74
75 }
76 }
77
78
79 #endif