X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/89f523f3ff17676a68b12f47b941d7356043c75a..a9c65b08e46ce0c97c9b50ce35a8b35eecddf51e:/src/smpi/smpi_topo.hpp diff --git a/src/smpi/smpi_topo.hpp b/src/smpi/smpi_topo.hpp index 8927ec4a31..9e419cf1dc 100644 --- a/src/smpi/smpi_topo.hpp +++ b/src/smpi/smpi_topo.hpp @@ -1,5 +1,4 @@ -/* Copyright (c) 2010-2015. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2010-2017. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -7,68 +6,75 @@ #ifndef SMPI_TOPO_HPP_INCLUDED #define SMPI_TOPO_HPP_INCLUDED -#include "private.h" +#include "src/smpi/smpi_comm.hpp" +#include "src/smpi/smpi_status.hpp" +typedef enum MPIR_Topo_type { + MPI_GRAPH=1, + MPI_CART=2, + MPI_DIST_GRAPH=3, + MPI_INVALID_TOPO=-1 +} MPIR_Topo_type; + +typedef SMPI_Topology *MPI_Topology; namespace simgrid{ namespace smpi{ class Topo { + public: + virtual ~Topo()=default; protected: - MPI_Comm _comm; + MPI_Comm comm_; }; -class Cart: public Topo { +class Topo_Cart: public Topo { private: - int _nnodes; - int _ndims; - int *_dims; - int *_periodic; - int *_position; + int nnodes_ = 0; + int ndims_; + int *dims_; + int *periodic_; + int *position_; public: - Cart(int ndims); - ~Cart(); - Cart(MPI_Comm comm_old, int ndims, int dims[], int periods[], int reorder, MPI_Comm *comm_cart); - Cart* sub(const int remain_dims[], MPI_Comm *newcomm) ; + Topo_Cart(int ndims); + ~Topo_Cart(); + Topo_Cart(MPI_Comm comm_old, int ndims, int dims[], int periods[], int reorder, MPI_Comm *comm_cart); + Topo_Cart* sub(const int remain_dims[], MPI_Comm *newcomm) ; int coords(int rank, int maxdims, int coords[]) ; int get(int maxdims, int* dims, int* periods, int* coords); int rank(int* coords, int* rank); int shift(int direction, int disp, int *rank_source, int *rank_dest) ; int dim_get(int *ndims); + static int Dims_create(int nnodes, int ndims, int dims[]); }; -class Graph: public Topo { +class Topo_Graph: public Topo { private: - int _nnodes; - int _nedges; - int *_index; - int *_edges; + int nnodes_; + int nedges_; + int *index_; + int *edges_; public: - Graph(); - ~Graph(); + Topo_Graph(); + ~Topo_Graph(); }; -class Dist_Graph: public Topo { +class Topo_Dist_Graph: public Topo { private: - int _indegree; - int *_in; - int *_in_weights; - int _outdegree; - int *_out; - int *_out_weights; - int _is_weighted; + int indegree_; + int *in_; + int *in_weights_; + int outdegree_; + int *out_; + int *out_weights_; + int is_weighted_; public: - Dist_Graph(); - ~Dist_Graph(); + Topo_Dist_Graph(); + ~Topo_Dist_Graph(); }; -/* - * This is a utility function, no need to have anything in the lower layer for this at all - */ -extern int Dims_create(int nnodes, int ndims, int dims[]); - } }