#ifndef EP_COMM_HPP_INCLUDED #define EP_COMM_HPP_INCLUDED #include "ep_message.hpp" #include "ep_intercomm.hpp" #include "ep_barrier.hpp" #include "ep_buffer.hpp" typedef std::pair< int, int > SIZE_RANK_INFO; // < rank, size> typedef std::vector< std::pair > RANK_MAP; // at(ep_rank) = typedef std::map > EP_RANK_MAP; // key(ep_rank) = //typedef std::vector, std::pair > > INTERCOMM_RANK_MAP; typedef std::list Message_list; namespace ep_lib { class ep_comm; class ep_communicator { public: SIZE_RANK_INFO size_rank_info[3]; // 0: ep_rank, ep_size // 1: ep_rank_loc, num_ep // 2: mpi_rank, mpi_size // for intercomm : = size_rank_info of local_comm ep_comm **comm_list; Message_list *message_queue; int comm_label; ep_intercomm *intercomm; }; class ep_comm { public: bool is_ep; bool is_intercomm; BUFFER *my_buffer; ep_barrier *ep_barrier; EP_RANK_MAP *ep_rank_map; // for intercomm : = ep_rank_map of newcomm void* mpi_comm; ep_communicator *ep_comm_ptr; ep_comm **mem_bridge; void* mpi_bridge; ep_comm(){}; ep_comm(void* comm); }; typedef ep_comm* MPI_Comm; } #endif // EP_COMM_HPP_INCLUDED