diff --git a/fairmq/CMakeLists.txt b/fairmq/CMakeLists.txt index d9ffd331..9e7854dc 100644 --- a/fairmq/CMakeLists.txt +++ b/fairmq/CMakeLists.txt @@ -83,6 +83,7 @@ set(FAIRMQ_HEADER_FILES devices/FairMQProxy.h devices/FairMQSink.h devices/FairMQSplitter.h + ofi/TransportFactory.h options/FairMQParser.h options/FairMQProgOptions.h options/FairMQSuboptParser.h @@ -146,6 +147,7 @@ set(FAIRMQ_SOURCE_FILES devices/FairMQProxy.cxx # devices/FairMQSink.cxx devices/FairMQSplitter.cxx + ofi/TransportFactory.cxx options/FairMQParser.cxx options/FairMQProgOptions.cxx options/FairMQSuboptParser.cxx @@ -232,8 +234,9 @@ target_link_libraries(FairMQ PRIVATE # only libFairMQ links against private dependencies ZeroMQ + OFI::libfabric + Msgpack $<$:nanomsg> - $<$,$>:Msgpack> ) diff --git a/fairmq/FairMQMessage.h b/fairmq/FairMQMessage.h index a559720b..70887740 100644 --- a/fairmq/FairMQMessage.h +++ b/fairmq/FairMQMessage.h @@ -44,4 +44,14 @@ class FairMQMessage using FairMQMessagePtr = std::unique_ptr; +namespace fair +{ +namespace mq +{ + +using MessagePtr = std::unique_ptr; + +} /* namespace mq */ +} /* namespace fair */ + #endif /* FAIRMQMESSAGE_H_ */ diff --git a/fairmq/FairMQPoller.h b/fairmq/FairMQPoller.h index a2bdb27f..436d5be5 100644 --- a/fairmq/FairMQPoller.h +++ b/fairmq/FairMQPoller.h @@ -32,4 +32,14 @@ class FairMQPoller using FairMQPollerPtr = std::unique_ptr; +namespace fair +{ +namespace mq +{ + +using PollerPtr = std::unique_ptr; + +} /* namespace mq */ +} /* namespace fair */ + #endif /* FAIRMQPOLLER_H_ */ diff --git a/fairmq/FairMQSocket.h b/fairmq/FairMQSocket.h index a6d734e1..87ed5731 100644 --- a/fairmq/FairMQSocket.h +++ b/fairmq/FairMQSocket.h @@ -71,4 +71,14 @@ class FairMQSocket using FairMQSocketPtr = std::unique_ptr; +namespace fair +{ +namespace mq +{ + +using SocketPtr = std::unique_ptr; + +} /* namespace mq */ +} /* namespace fair */ + #endif /* FAIRMQSOCKET_H_ */ diff --git a/fairmq/FairMQTransports.h b/fairmq/FairMQTransports.h index 49fcafe7..c664a7f7 100644 --- a/fairmq/FairMQTransports.h +++ b/fairmq/FairMQTransports.h @@ -1,17 +1,19 @@ /******************************************************************************** - * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * * * * This software is distributed under the terms of the * * GNU Lesser General Public Licence (LGPL) version 3, * * copied verbatim in the file "LICENSE" * ********************************************************************************/ -#ifndef FAIRMQTRANSPORTS_H_ -#define FAIRMQTRANSPORTS_H_ + +#ifndef FAIR_MQ_TRANSPORTS_H +#define FAIR_MQ_TRANSPORTS_H #include #include #include +/// TODO deprecate this namespace namespace FairMQ { @@ -20,7 +22,8 @@ enum class Transport DEFAULT, ZMQ, NN, - SHM + SHM, + OFI }; @@ -28,11 +31,23 @@ static std::unordered_map TransportTypes { { "default", Transport::DEFAULT }, { "zeromq", Transport::ZMQ }, { "nanomsg", Transport::NN }, - { "shmem", Transport::SHM } + { "shmem", Transport::SHM }, + { "ofi", Transport::OFI } }; } +namespace fair +{ +namespace mq +{ + +using Transport = ::FairMQ::Transport; +using ::FairMQ::TransportTypes; + +} /* namespace mq */ +} /* namespace fair */ + namespace std { @@ -41,4 +56,4 @@ struct hash : fair::mq::tools::HashEnum {} } /* namespace std */ -#endif /* FAIRMQTRANSPORTS_H_ */ +#endif /* FAIR_MQ_TRANSPORTS_H */ diff --git a/fairmq/FairMQUnmanagedRegion.h b/fairmq/FairMQUnmanagedRegion.h index 744a9c6b..c02caaf3 100644 --- a/fairmq/FairMQUnmanagedRegion.h +++ b/fairmq/FairMQUnmanagedRegion.h @@ -26,4 +26,14 @@ class FairMQUnmanagedRegion using FairMQUnmanagedRegionPtr = std::unique_ptr; +namespace fair +{ +namespace mq +{ + +using UnmanagedRegionPtr = std::unique_ptr; + +} /* namespace mq */ +} /* namespace fair */ + #endif /* FAIRMQUNMANAGEDREGION_H_ */ diff --git a/fairmq/ofi/TransportFactory.cxx b/fairmq/ofi/TransportFactory.cxx new file mode 100644 index 00000000..ce34700a --- /dev/null +++ b/fairmq/ofi/TransportFactory.cxx @@ -0,0 +1,87 @@ +/******************************************************************************** + * Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ + +#include +#include + +namespace fair +{ +namespace mq +{ +namespace ofi +{ + +using namespace std; + +TransportFactory::TransportFactory(const string& id, const FairMQProgOptions* config) +: FairMQTransportFactory{id} +{ +} + +auto TransportFactory::CreateMessage() const -> MessagePtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::CreateMessage(const size_t size) const -> MessagePtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::CreateMessage(void* data, const size_t size, fairmq_free_fn* ffn, void* hint) const -> MessagePtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::CreateMessage(UnmanagedRegionPtr& region, void* data, const size_t size, void* hint) const -> MessagePtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::CreateSocket(const string& type, const string& name) const -> SocketPtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::CreatePoller(const vector& channels) const -> PollerPtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::CreatePoller(const vector& channels) const -> PollerPtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::CreatePoller(const unordered_map>& channelsMap, const vector& channelList) const -> PollerPtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::CreatePoller(const FairMQSocket& cmdSocket, const FairMQSocket& dataSocket) const -> PollerPtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::CreateUnmanagedRegion(const size_t size, FairMQRegionCallback callback) const -> UnmanagedRegionPtr +{ + throw runtime_error{"Not yet implemented."}; +} + +auto TransportFactory::GetType() const -> Transport +{ + return Transport::OFI; +} + +TransportFactory::~TransportFactory() +{ +} + +} /* namespace ofi */ +} /* namespace mq */ +} /* namespace fair */ diff --git a/fairmq/ofi/TransportFactory.h b/fairmq/ofi/TransportFactory.h new file mode 100644 index 00000000..cf82cf87 --- /dev/null +++ b/fairmq/ofi/TransportFactory.h @@ -0,0 +1,58 @@ +/******************************************************************************** + * Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ + +#ifndef FAIR_MQ_OFI_TRANSPORTFACTORY_H +#define FAIR_MQ_OFI_TRANSPORTFACTORY_H + +#include +#include + +namespace fair +{ +namespace mq +{ +namespace ofi +{ + +/** + * @class TransportFactory TransportFactory.h + * @brief FairMQ transport factory for the ofi transport (implemented with ZeroMQ + libfabric) + * + * @todo TODO insert long description + */ +class TransportFactory : public FairMQTransportFactory +{ + public: + TransportFactory(const std::string& id = "", const FairMQProgOptions* config = nullptr); + TransportFactory(const TransportFactory&) = delete; + TransportFactory operator=(const TransportFactory&) = delete; + + auto CreateMessage() const -> MessagePtr override; + auto CreateMessage(const std::size_t size) const -> MessagePtr override; + auto CreateMessage(void* data, const std::size_t size, fairmq_free_fn* ffn, void* hint = nullptr) const -> MessagePtr override; + auto CreateMessage(UnmanagedRegionPtr& region, void* data, const std::size_t size, void* hint = nullptr) const -> MessagePtr override; + + auto CreateSocket(const std::string& type, const std::string& name) const -> SocketPtr override; + + auto CreatePoller(const std::vector& channels) const -> PollerPtr override; + auto CreatePoller(const std::vector& channels) const -> PollerPtr override; + auto CreatePoller(const std::unordered_map>& channelsMap, const std::vector& channelList) const -> PollerPtr override; + auto CreatePoller(const FairMQSocket& cmdSocket, const FairMQSocket& dataSocket) const -> PollerPtr override; + + auto CreateUnmanagedRegion(const size_t size, FairMQRegionCallback callback = nullptr) const -> UnmanagedRegionPtr override; + + auto GetType() const -> Transport override; + + ~TransportFactory() override; +}; /* class TransportFactory */ + +} /* namespace ofi */ +} /* namespace mq */ +} /* namespace fair */ + +#endif /* FAIR_MQ_OFI_TRANSPORTFACTORY_H */