From 1225e56598794dcf67de925a1852dfc3d1949068 Mon Sep 17 00:00:00 2001 From: Simon Heybrock <simon.heybrock@esss.se> Date: Thu, 19 Oct 2017 15:48:59 +0200 Subject: [PATCH] Re #20887. Use communicator from workspace in parallel loader. Do not default to WORLD anymore. This is needed for unit testing on the algorithm level. --- Framework/DataHandling/src/ParallelEventLoader.cpp | 3 ++- Framework/Indexing/inc/MantidIndexing/IndexInfo.h | 2 +- Framework/Indexing/src/IndexInfo.cpp | 2 +- Framework/Parallel/inc/MantidParallel/IO/EventLoader.h | 5 +++-- .../Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h | 4 ++-- Framework/Parallel/src/IO/EventLoader.cpp | 7 ++++--- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Framework/DataHandling/src/ParallelEventLoader.cpp b/Framework/DataHandling/src/ParallelEventLoader.cpp index 36b47f5bc66..a595ed44753 100644 --- a/Framework/DataHandling/src/ParallelEventLoader.cpp +++ b/Framework/DataHandling/src/ParallelEventLoader.cpp @@ -1,6 +1,7 @@ #include "MantidDataHandling/ParallelEventLoader.h" #include "MantidDataObjects/EventWorkspace.h" #include "MantidGeometry/Instrument/DetectorInfo.h" +#include "MantidIndexing/IndexInfo.h" #include "MantidParallel/IO/EventLoader.h" #include "MantidTypes/SpectrumDefinition.h" #include "MantidTypes/Event/TofEvent.h" @@ -54,7 +55,7 @@ void ParallelEventLoader::load(DataObjects::EventWorkspace &ws, DataObjects::getEventsFrom(ws.getSpectrum(i), eventLists[i]); Parallel::IO::EventLoader::load( - filename, groupName, bankNames, + ws.indexInfo().communicator(), filename, groupName, bankNames, bankOffsets(ws, filename, groupName, bankNames), std::move(eventLists)); } diff --git a/Framework/Indexing/inc/MantidIndexing/IndexInfo.h b/Framework/Indexing/inc/MantidIndexing/IndexInfo.h index a9e3267c6cf..771ee432983 100644 --- a/Framework/Indexing/inc/MantidIndexing/IndexInfo.h +++ b/Framework/Indexing/inc/MantidIndexing/IndexInfo.h @@ -117,7 +117,7 @@ public: bool isOnThisPartition(GlobalSpectrumIndex globalIndex) const; Parallel::StorageMode storageMode() const; - Parallel::Communicator communicator() const; + const Parallel::Communicator &communicator() const; private: void makeSpectrumNumberTranslator( diff --git a/Framework/Indexing/src/IndexInfo.cpp b/Framework/Indexing/src/IndexInfo.cpp index ed94a21c0f3..65a0d614fb5 100644 --- a/Framework/Indexing/src/IndexInfo.cpp +++ b/Framework/Indexing/src/IndexInfo.cpp @@ -205,7 +205,7 @@ bool IndexInfo::isOnThisPartition(GlobalSpectrumIndex globalIndex) const { Parallel::StorageMode IndexInfo::storageMode() const { return m_storageMode; } /// Returns the communicator used in MPI runs. -Parallel::Communicator IndexInfo::communicator() const { +const Parallel::Communicator &IndexInfo::communicator() const { return *m_communicator; } diff --git a/Framework/Parallel/inc/MantidParallel/IO/EventLoader.h b/Framework/Parallel/inc/MantidParallel/IO/EventLoader.h index aea1261e500..caa8437fe15 100644 --- a/Framework/Parallel/inc/MantidParallel/IO/EventLoader.h +++ b/Framework/Parallel/inc/MantidParallel/IO/EventLoader.h @@ -16,6 +16,7 @@ class TofEvent; } } namespace Parallel { +class Communicator; namespace IO { /** Loader for event data from Nexus files with parallelism based on multiple @@ -50,8 +51,8 @@ MANTID_PARALLEL_DLL std::vector<boost::optional<int32_t>> anyEventIdFromBanks(const std::string &filename, const std::string &groupName, const std::vector<std::string> &bankNames); MANTID_PARALLEL_DLL void -load(const std::string &filename, const std::string &groupName, - const std::vector<std::string> &bankNames, +load(const Communicator &communicator, const std::string &filename, + const std::string &groupName, const std::vector<std::string> &bankNames, const std::vector<int32_t> &bankOffsets, std::vector<std::vector<Types::Event::TofEvent> *> eventLists); } diff --git a/Framework/Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h b/Framework/Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h index f5046221ce5..972ab0881cd 100644 --- a/Framework/Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h +++ b/Framework/Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h @@ -91,13 +91,13 @@ void load(const Chunker &chunker, NXEventDataSource<TimeOffsetType> &dataSource, } template <class TimeOffsetType> -void load(const H5::Group &group, const std::vector<std::string> &bankNames, +void load(const Communicator &comm, const H5::Group &group, + const std::vector<std::string> &bankNames, const std::vector<int32_t> &bankOffsets, std::vector<std::vector<Types::Event::TofEvent> *> eventLists) { // TODO automatically(?) determine good chunk size // TODO automatically(?) determine good number of ranks to use for load const size_t chunkSize = 1024 * 1024; - Communicator comm; const Chunker chunker(comm.size(), comm.rank(), readBankSizes(group, bankNames), chunkSize); NXEventDataLoader<TimeOffsetType> loader(comm.size(), group, bankNames); diff --git a/Framework/Parallel/src/IO/EventLoader.cpp b/Framework/Parallel/src/IO/EventLoader.cpp index a19b3b64a0f..cf6f709ea3e 100644 --- a/Framework/Parallel/src/IO/EventLoader.cpp +++ b/Framework/Parallel/src/IO/EventLoader.cpp @@ -29,14 +29,15 @@ anyEventIdFromBanks(const std::string &filename, const std::string &groupName, } /// Load events from given banks into event lists. -void load(const std::string &filename, const std::string &groupName, +void load(const Communicator &comm, const std::string &filename, + const std::string &groupName, const std::vector<std::string> &bankNames, const std::vector<int32_t> &bankOffsets, std::vector<std::vector<Types::Event::TofEvent> *> eventLists) { H5::H5File file(filename, H5F_ACC_RDONLY); H5::Group group = file.openGroup(groupName); - load(readDataType(group, bankNames, "event_time_offset"), group, bankNames, - bankOffsets, std::move(eventLists)); + load(readDataType(group, bankNames, "event_time_offset"), comm, group, + bankNames, bankOffsets, std::move(eventLists)); } } -- GitLab