From 38b8391adaf839a86dc638cc8e175dafc2183285 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Mon, 1 Oct 2018 16:17:24 +0200 Subject: [PATCH] Add broadcast of single integer value --- src/utils/Messenger.cpp | 11 +++++++++-- src/utils/Messenger.hpp | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/utils/Messenger.cpp b/src/utils/Messenger.cpp index d631fcf3c..44d353e2b 100644 --- a/src/utils/Messenger.cpp +++ b/src/utils/Messenger.cpp @@ -51,7 +51,6 @@ Messenger:: #endif // PASTIS_HAS_MPI } - void Messenger::barrier() const { #ifdef PASTIS_HAS_MPI @@ -59,11 +58,19 @@ void Messenger::barrier() const #endif // PASTIS_HAS_MPI } +int Messenger:: +_broadcast(int& data, int root_rank) const +{ + MPI_Bcast(&data, 1, MPI_INT, root_rank, MPI_COMM_WORLD); + return data; +} + + Array<int> Messenger:: _broadcast(Array<int>& array, int root_rank) const { int size = array.size(); - MPI_Bcast(&size, 1, MPI_INT, root_rank, MPI_COMM_WORLD); + _broadcast(size, root_rank); if (commRank() != root_rank) { array = Array<int>(size); } diff --git a/src/utils/Messenger.hpp b/src/utils/Messenger.hpp index a0bd59328..517be0d1c 100644 --- a/src/utils/Messenger.hpp +++ b/src/utils/Messenger.hpp @@ -15,6 +15,7 @@ class Messenger int m_rank{0}; int m_size{1}; + int _broadcast(int& data, int root_rank) const; Array<int> _broadcast(Array<int>& array, int root_rank) const; public: @@ -42,6 +43,18 @@ class Messenger void barrier() const; + template <typename DataType> + PASTIS_INLINE + DataType broadcast(const DataType& data, int root_rank) const + { + if constexpr(std::is_same<DataType, int>()) { + int int_data = data; + return _broadcast(int_data, root_rank); + } else { + static_assert(std::is_same<DataType, int>(), "unexpected type of data"); + } + } + template <typename DataType> PASTIS_INLINE Array<DataType> broadcast(const Array<DataType>& array, int root_rank) const @@ -91,4 +104,11 @@ Array<DataType> broadcast(const Array<DataType>& array, int root_rank) return messenger().broadcast(array, root_rank); } +template <typename DataType> +PASTIS_INLINE +DataType broadcast(const DataType& data, int root_rank) +{ + return messenger().broadcast(data, root_rank); +} + #endif // MESSENGER_HPP -- GitLab