message: Map the reduce output to the same number of tiles as the input tensor.
  Test Plan: Existing tests pass
  Reviewers: georgep, davidn, stephenm
  Maniphest Tasks: T8787
diff: #include <popops/ElementWise.hpp>
  #include <popops/Pad.hpp>
  #include <popops/Reduce.hpp>
  +#include <poputil/TileMapping.hpp>
  using ::absl::StrCat;
  @@ -336,8 +337,23 @@ StatusOr<poplar::program::Program> CreateSimpleReduction(
  reduction_dims.push_back(d);
  }
  - poplar::Tensor out = popops::reduce(graph, to_reduce, reduction_dims, op,
  - seq, GetDebugName(inst));
  + TF_ASSIGN_OR_RETURN(auto type, PoplarDataType(inst->shape()));
  + const auto shape = PoplarShapeFromXlaShape(inst->shape());
  + out = graph.addVariable(type, shape, GetDebugName(inst) + "/out");
  +
  + const auto to_reduce_mapping = graph.getTileMapping(to_reduce);
  + std::vector<unsigned> tiles;
  + for (auto i = 0ul; i < to_reduce_mapping.size(); ++i) {
  + if (!to_reduce_mapping[i].empty()) {
  + tiles.push_back(i);
  + }
  + }
  +
  + // Map the reduce output to the same number of tiles
  + poputil::mapTensorLinearly(
  + graph, out, 0, std::max<unsigned>(1, out.numElements() / tiles.size()));
  + popops::reduceWithOutput(graph, to_reduce, out, reduction_dims, op, seq,
  + GetDebugName(inst));
  // Apply initial value
  Literal identity_literal = GetIdentityConstantLiteral(root, inst);
  