Skip to content
CommunicatorFactory.hpp 711 B
Newer Older
#pragma once

#include <array>
#include <memory>
#include <tuple>

#include "CollectiveCommunicator.hpp"
#include "CommunicationMode.hpp"
#include "Configuration.hpp"
#include "P2PCommunicator.hpp"
#include "Tile.hpp"
#include "Util.hpp"

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