Merge topic 'array_range_compute_use_single_reduce_call'

d5dfb1f6 Restore ArrayRangeCompute to using a single Reduce call.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !719
This commit is contained in:
Robert Maynard 2017-03-07 13:31:37 +00:00 committed by Kitware Robot
commit fa04226b05

@ -20,6 +20,7 @@
#ifndef vtk_m_cont_ArrayRangeCompute_h
#define vtk_m_cont_ArrayRangeCompute_h
#include <vtkm/BinaryOperators.h>
#include <vtkm/Range.h>
#include <vtkm/VecTraits.h>
@ -77,21 +78,18 @@ ArrayRangeCompute(const ArrayHandleType &input, Device)
//not the greatest way of doing this for performance reasons. But
//this implementation should generate the smallest amount of code
ValueType initialMin = input.GetPortalConstControl().Get(0);
ValueType initialMax = initialMin;
vtkm::Vec<ValueType,2> initial(input.GetPortalConstControl().Get(0));
ValueType minResult =
Algorithm::Reduce(input, initialMin, internal::RangeMin());
ValueType maxResult =
Algorithm::Reduce(input, initialMax, internal::RangeMax());
vtkm::Vec<ValueType, 2> result =
Algorithm::Reduce(input, initial, vtkm::MinAndMax<ValueType>());
vtkm::cont::ArrayHandle<vtkm::Range> rangeArray;
rangeArray.Allocate(NumberOfComponents);
for (vtkm::IdComponent i = 0; i < NumberOfComponents; ++i)
{
rangeArray.GetPortalControl().Set(
i, vtkm::Range(VecType::GetComponent(minResult, i),
VecType::GetComponent(maxResult, i)));
i, vtkm::Range(VecType::GetComponent(result[0], i),
VecType::GetComponent(result[1], i)));
}
return rangeArray;