#pragma once #include #include #include #include "CollectiveCommunicator.hpp" #include "CommunicationMode.hpp" #include "Configuration.hpp" #include "P2PCommunicator.hpp" #include "Tile.hpp" #include "Util.hpp" struct CommunicatorFactory { static std::unique_ptr Create(Configuration cfg, const Tile& tile, const MpiEnvironment& env) { switch (cfg.CommMode) { case CommunicationMode::Collective: return std::make_unique(env, cfg.Procs, tile.tileSize()); case CommunicationMode::P2P: return std::make_unique(env, cfg.Procs, tile.tileSize()); default: MpiReportErrorAbort("Unknown CommunicationMode"); } } };