10#ifndef TPETRA_DETAILS_ALLREDUCEVIEW_HPP
11#define TPETRA_DETAILS_ALLREDUCEVIEW_HPP
15#include "Kokkos_Core.hpp"
16#include "Teuchos_CommHelpers.hpp"
17#include "Tpetra_Details_temporaryViewUtils.hpp"
27template<
typename InputViewType,
typename OutputViewType>
29allReduceRawContiguous (
const OutputViewType& output,
30 const InputViewType& input,
31 const Teuchos::Comm<int>& comm)
33 using Teuchos::outArg;
34 using Teuchos::REDUCE_SUM;
35 using Teuchos::reduceAll;
36 using ValueType =
typename InputViewType::non_const_value_type;
37 size_t count = input.span();
38 TEUCHOS_ASSERT( count <=
size_t (INT_MAX) );
39 if(
isInterComm(comm) && input.data() == output.data())
43 typename InputViewType::array_layout layout(input.extent(0), input.extent(1), input.extent(2), input.extent(3), input.extent(4), input.extent(5), input.extent(6), input.extent(7));
44 Kokkos::View<typename InputViewType::non_const_data_type, typename InputViewType::array_layout, typename InputViewType::device_type>
45 tempInput(Kokkos::ViewAllocateWithoutInitializing(
"tempInput"), layout);
48 Kokkos::deep_copy(tempInput, input);
49 reduceAll<int, ValueType> (comm, REDUCE_SUM,
static_cast<int> (count),
50 tempInput.data(), output.data());
53 reduceAll<int, ValueType> (comm, REDUCE_SUM,
static_cast<int> (count),
54 input.data(), output.data());
60template<
class InputViewType,
class OutputViewType>
64 const Teuchos::Comm<int>& comm)
69 if (comm.getSize () == 1) {
82 using Layout =
typename TempView::UnifiedContiguousLayout<InputViewType, OutputViewType>::type;
Declaration of Tpetra::Details::Behavior, a class that describes Tpetra's behavior.
Declaration of Tpetra::Details::isInterComm.
Struct that holds views of the contents of a CrsMatrix.
static bool assumeMpiIsGPUAware()
Whether to assume that MPI is CUDA aware.
Implementation details of Tpetra.
static void allReduceView(const OutputViewType &output, const InputViewType &input, const Teuchos::Comm< int > &comm)
All-reduce from input Kokkos::View to output Kokkos::View.
bool isInterComm(const Teuchos::Comm< int > &)
Return true if and only if the input communicator wraps an MPI intercommunicator.
Namespace Tpetra contains the class and methods constituting the Tpetra library.