mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-10-05 01:49:02 +00:00
Remove testing headers from benchmarking
The code in `vtkm/cont/Testing.h` now requires a library, which is not built if testing is not built. Thus, the benchmarking code was giving a compile error if benchmarking was on but testing was off. Change the benchmarking to not rely on anything in the Testing framework. This means using classes in `vtkm/source` instead of `MakeTestData`. Also avoid using the `TestValue` defined for the tests. (In one case, we have a simple replacement.) Also had to fix a problem with a header file not defining everything it needed to compile.
This commit is contained in:
parent
65ad7b3721
commit
9d5d9e38a1
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "Benchmarker.h"
|
#include "Benchmarker.h"
|
||||||
|
|
||||||
|
#include <vtkm/cont/Algorithm.h>
|
||||||
#include <vtkm/cont/ArrayHandle.h>
|
#include <vtkm/cont/ArrayHandle.h>
|
||||||
#include <vtkm/cont/AtomicArray.h>
|
#include <vtkm/cont/AtomicArray.h>
|
||||||
#include <vtkm/cont/DeviceAdapterTag.h>
|
#include <vtkm/cont/DeviceAdapterTag.h>
|
||||||
|
@ -17,8 +17,6 @@
|
|||||||
|
|
||||||
#include <vtkm/internal/Configure.h>
|
#include <vtkm/internal/Configure.h>
|
||||||
|
|
||||||
#include <vtkm/testing/Testing.h>
|
|
||||||
|
|
||||||
#include <vtkm/List.h>
|
#include <vtkm/List.h>
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include <vtkm/cont/ArrayHandleIndex.h>
|
#include <vtkm/cont/ArrayHandleIndex.h>
|
||||||
#include <vtkm/cont/BitField.h>
|
#include <vtkm/cont/BitField.h>
|
||||||
#include <vtkm/cont/Initialize.h>
|
#include <vtkm/cont/Initialize.h>
|
||||||
|
#include <vtkm/cont/Invoker.h>
|
||||||
#include <vtkm/cont/Timer.h>
|
#include <vtkm/cont/Timer.h>
|
||||||
|
|
||||||
#include <vtkm/worklet/StableSortIndices.h>
|
#include <vtkm/worklet/StableSortIndices.h>
|
||||||
@ -28,6 +29,8 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
#include <vtkmstd/integer_sequence.h>
|
||||||
|
|
||||||
#include <vtkm/internal/Windows.h>
|
#include <vtkm/internal/Windows.h>
|
||||||
|
|
||||||
#ifdef VTKM_ENABLE_TBB
|
#ifdef VTKM_ENABLE_TBB
|
||||||
@ -128,7 +131,37 @@ template <typename T>
|
|||||||
struct TestValueFunctor
|
struct TestValueFunctor
|
||||||
{
|
{
|
||||||
VTKM_EXEC_CONT
|
VTKM_EXEC_CONT
|
||||||
T operator()(vtkm::Id i) const { return TestValue(i, T{}); }
|
T operator()(vtkm::Id i) const { return static_cast<T>(i + 10); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
VTKM_EXEC_CONT T TestValue(vtkm::Id index)
|
||||||
|
{
|
||||||
|
return TestValueFunctor<T>{}(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, typename U>
|
||||||
|
struct TestValueFunctor<vtkm::Pair<T, U>>
|
||||||
|
{
|
||||||
|
VTKM_EXEC_CONT vtkm::Pair<T, U> operator()(vtkm::Id i) const
|
||||||
|
{
|
||||||
|
return vtkm::make_Pair(TestValue<T>(i), TestValue<U>(i + 1));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, vtkm::IdComponent N>
|
||||||
|
struct TestValueFunctor<vtkm::Vec<T, N>>
|
||||||
|
{
|
||||||
|
template <std::size_t... Ns>
|
||||||
|
VTKM_EXEC_CONT vtkm::Vec<T, N> FillVec(vtkm::Id i, vtkmstd::index_sequence<Ns...>) const
|
||||||
|
{
|
||||||
|
return vtkm::make_Vec(TestValue<T>(i + static_cast<vtkm::Id>(Ns))...);
|
||||||
|
}
|
||||||
|
|
||||||
|
VTKM_EXEC_CONT vtkm::Vec<T, N> operator()(vtkm::Id i) const
|
||||||
|
{
|
||||||
|
return FillVec(i, vtkmstd::make_index_sequence<static_cast<std::size_t>(N)>{});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename ArrayT>
|
template <typename ArrayT>
|
||||||
@ -139,28 +172,12 @@ VTKM_CONT void FillTestValue(ArrayT& array, vtkm::Id numValues)
|
|||||||
vtkm::cont::make_ArrayHandleImplicit(TestValueFunctor<T>{}, numValues), array);
|
vtkm::cont::make_ArrayHandleImplicit(TestValueFunctor<T>{}, numValues), array);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct ScaledTestValueFunctor
|
|
||||||
{
|
|
||||||
vtkm::Id Scale;
|
|
||||||
VTKM_EXEC_CONT
|
|
||||||
T operator()(vtkm::Id i) const { return TestValue(i * this->Scale, T{}); }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename ArrayT>
|
|
||||||
VTKM_CONT void FillScaledTestValue(ArrayT& array, vtkm::Id scale, vtkm::Id numValues)
|
|
||||||
{
|
|
||||||
using T = typename ArrayT::ValueType;
|
|
||||||
vtkm::cont::Algorithm::Copy(
|
|
||||||
vtkm::cont::make_ArrayHandleImplicit(ScaledTestValueFunctor<T>{ scale }, numValues), array);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct ModuloTestValueFunctor
|
struct ModuloTestValueFunctor
|
||||||
{
|
{
|
||||||
vtkm::Id Mod;
|
vtkm::Id Mod;
|
||||||
VTKM_EXEC_CONT
|
VTKM_EXEC_CONT
|
||||||
T operator()(vtkm::Id i) const { return TestValue(i % this->Mod, T{}); }
|
T operator()(vtkm::Id i) const { return TestValue<T>(i % this->Mod); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename ArrayT>
|
template <typename ArrayT>
|
||||||
@ -186,7 +203,7 @@ struct BinaryTestValueFunctor
|
|||||||
T retVal;
|
T retVal;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
retVal = TestValue(i++, T{});
|
retVal = TestValue<T>(i++);
|
||||||
} while (retVal == zero);
|
} while (retVal == zero);
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
@ -213,7 +230,7 @@ VTKM_CONT void FillRandomTestValue(ArrayT& array, vtkm::Id numValues)
|
|||||||
auto portal = array.WritePortal();
|
auto portal = array.WritePortal();
|
||||||
for (vtkm::Id i = 0; i < portal.GetNumberOfValues(); ++i)
|
for (vtkm::Id i = 0; i < portal.GetNumberOfValues(); ++i)
|
||||||
{
|
{
|
||||||
portal.Set(i, TestValue(static_cast<vtkm::Id>(rng()), ValueType{}));
|
portal.Set(i, TestValue<ValueType>(static_cast<vtkm::Id>(rng())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,7 +245,7 @@ VTKM_CONT void FillRandomModTestValue(ArrayT& array, vtkm::Id mod, vtkm::Id numV
|
|||||||
auto portal = array.WritePortal();
|
auto portal = array.WritePortal();
|
||||||
for (vtkm::Id i = 0; i < portal.GetNumberOfValues(); ++i)
|
for (vtkm::Id i = 0; i < portal.GetNumberOfValues(); ++i)
|
||||||
{
|
{
|
||||||
portal.Set(i, TestValue(static_cast<vtkm::Id>(rng()) % mod, ValueType{}));
|
portal.Set(i, TestValue<ValueType>(static_cast<vtkm::Id>(rng()) % mod));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -593,7 +610,7 @@ void BenchFillArrayHandle(benchmark::State& state)
|
|||||||
{
|
{
|
||||||
(void)_;
|
(void)_;
|
||||||
timer.Start();
|
timer.Start();
|
||||||
vtkm::cont::Algorithm::Fill(device, array, TestValue(19, ValueType{}), numValues);
|
vtkm::cont::Algorithm::Fill(device, array, TestValue<ValueType>(19), numValues);
|
||||||
timer.Stop();
|
timer.Stop();
|
||||||
|
|
||||||
state.SetIterationTime(timer.GetElapsedTime());
|
state.SetIterationTime(timer.GetElapsedTime());
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
#include <vtkm/worklet/WorkletMapTopology.h>
|
#include <vtkm/worklet/WorkletMapTopology.h>
|
||||||
|
|
||||||
#include "Benchmarker.h"
|
#include "Benchmarker.h"
|
||||||
#include <vtkm/cont/testing/Testing.h>
|
|
||||||
|
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <random>
|
#include <random>
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
#include <vtkm/cont/Logging.h>
|
#include <vtkm/cont/Logging.h>
|
||||||
#include <vtkm/cont/RuntimeDeviceTracker.h>
|
#include <vtkm/cont/RuntimeDeviceTracker.h>
|
||||||
#include <vtkm/cont/Timer.h>
|
#include <vtkm/cont/Timer.h>
|
||||||
#include <vtkm/cont/testing/MakeTestDataSet.h>
|
|
||||||
|
|
||||||
#include <vtkm/cont/internal/OptionParser.h>
|
#include <vtkm/cont/internal/OptionParser.h>
|
||||||
|
|
||||||
|
@ -16,7 +16,8 @@
|
|||||||
#include <vtkm/cont/DeviceAdapterAlgorithm.h>
|
#include <vtkm/cont/DeviceAdapterAlgorithm.h>
|
||||||
#include <vtkm/cont/Initialize.h>
|
#include <vtkm/cont/Initialize.h>
|
||||||
#include <vtkm/cont/Timer.h>
|
#include <vtkm/cont/Timer.h>
|
||||||
#include <vtkm/cont/testing/MakeTestDataSet.h>
|
|
||||||
|
#include <vtkm/source/Tangle.h>
|
||||||
|
|
||||||
#include <vtkm/rendering/Camera.h>
|
#include <vtkm/rendering/Camera.h>
|
||||||
#include <vtkm/rendering/raytracing/Ray.h>
|
#include <vtkm/rendering/raytracing/Ray.h>
|
||||||
@ -40,9 +41,9 @@ void BenchRayTracing(::benchmark::State& state)
|
|||||||
{
|
{
|
||||||
const vtkm::Id3 dims(128, 128, 128);
|
const vtkm::Id3 dims(128, 128, 128);
|
||||||
|
|
||||||
vtkm::cont::testing::MakeTestDataSet maker;
|
vtkm::source::Tangle maker(dims);
|
||||||
auto dataset = maker.Make3DUniformDataSet3(dims);
|
vtkm::cont::DataSet dataset = maker.Execute();
|
||||||
auto coords = dataset.GetCoordinateSystem();
|
vtkm::cont::CoordinateSystem coords = dataset.GetCoordinateSystem();
|
||||||
|
|
||||||
vtkm::rendering::Camera camera;
|
vtkm::rendering::Camera camera;
|
||||||
vtkm::Bounds bounds = dataset.GetCoordinateSystem().GetBounds();
|
vtkm::Bounds bounds = dataset.GetCoordinateSystem().GetBounds();
|
||||||
@ -68,7 +69,7 @@ void BenchRayTracing(::benchmark::State& state)
|
|||||||
|
|
||||||
rays.Buffers.at(0).InitConst(0.f);
|
rays.Buffers.at(0).InitConst(0.f);
|
||||||
|
|
||||||
vtkm::cont::Field field = dataset.GetField("pointvar");
|
vtkm::cont::Field field = dataset.GetField("nodevar");
|
||||||
vtkm::Range range = field.GetRange().ReadPortal().Get(0);
|
vtkm::Range range = field.GetRange().ReadPortal().Get(0);
|
||||||
|
|
||||||
tracer.SetField(field, range);
|
tracer.SetField(field, range);
|
||||||
|
@ -22,8 +22,6 @@
|
|||||||
#include <vtkm/worklet/WorkletMapField.h>
|
#include <vtkm/worklet/WorkletMapField.h>
|
||||||
#include <vtkm/worklet/WorkletMapTopology.h>
|
#include <vtkm/worklet/WorkletMapTopology.h>
|
||||||
|
|
||||||
#include <vtkm/cont/testing/Testing.h>
|
|
||||||
|
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -11,11 +11,11 @@
|
|||||||
#ifndef vtk_m_benchmarking_Benchmarker_h
|
#ifndef vtk_m_benchmarking_Benchmarker_h
|
||||||
#define vtk_m_benchmarking_Benchmarker_h
|
#define vtk_m_benchmarking_Benchmarker_h
|
||||||
|
|
||||||
|
#include <vtkm/cont/Initialize.h>
|
||||||
|
#include <vtkm/cont/Logging.h>
|
||||||
#include <vtkm/cont/RuntimeDeviceTracker.h>
|
#include <vtkm/cont/RuntimeDeviceTracker.h>
|
||||||
#include <vtkm/cont/Timer.h>
|
#include <vtkm/cont/Timer.h>
|
||||||
|
|
||||||
#include <vtkm/cont/testing/Testing.h>
|
|
||||||
|
|
||||||
#include <vtkm/internal/brigand.hpp>
|
#include <vtkm/internal/brigand.hpp>
|
||||||
|
|
||||||
#include <benchmark/benchmark.h>
|
#include <benchmark/benchmark.h>
|
||||||
@ -308,7 +308,7 @@ private:
|
|||||||
void operator()(brigand::type_<BenchType<P>>) const
|
void operator()(brigand::type_<BenchType<P>>) const
|
||||||
{
|
{
|
||||||
std::ostringstream name;
|
std::ostringstream name;
|
||||||
name << this->BenchName << "<" << vtkm::testing::TypeName<P>::Name() << ">";
|
name << this->BenchName << "<" << vtkm::cont::TypeToString<P>() << ">";
|
||||||
auto bm = ::benchmark::internal::RegisterBenchmarkInternal(
|
auto bm = ::benchmark::internal::RegisterBenchmarkInternal(
|
||||||
new ::benchmark::internal::FunctionBenchmark(name.str().c_str(),
|
new ::benchmark::internal::FunctionBenchmark(name.str().c_str(),
|
||||||
BenchType<P>::GetFunction()));
|
BenchType<P>::GetFunction()));
|
||||||
|
@ -60,5 +60,5 @@ target_compile_definitions(BenchmarkDeviceAdapter PUBLIC VTKm_BENCHS_RANGE_LOWER
|
|||||||
target_compile_definitions(BenchmarkDeviceAdapter PUBLIC VTKm_BENCHS_RANGE_UPPER_BOUNDARY=${VTKm_BENCHS_RANGE_UPPER_BOUNDARY})
|
target_compile_definitions(BenchmarkDeviceAdapter PUBLIC VTKm_BENCHS_RANGE_UPPER_BOUNDARY=${VTKm_BENCHS_RANGE_UPPER_BOUNDARY})
|
||||||
|
|
||||||
if(TARGET vtkm_rendering)
|
if(TARGET vtkm_rendering)
|
||||||
add_benchmark(NAME BenchmarkRayTracing FILE BenchmarkRayTracing.cxx LIBS vtkm_rendering)
|
add_benchmark(NAME BenchmarkRayTracing FILE BenchmarkRayTracing.cxx LIBS vtkm_rendering vtkm_source)
|
||||||
endif()
|
endif()
|
||||||
|
@ -13,7 +13,8 @@
|
|||||||
#include <vtkm/exec/ConnectivityExtrude.h>
|
#include <vtkm/exec/ConnectivityExtrude.h>
|
||||||
#include <vtkm/exec/arg/FetchTagArrayDirectIn.h>
|
#include <vtkm/exec/arg/FetchTagArrayDirectIn.h>
|
||||||
#include <vtkm/exec/arg/FetchTagArrayTopologyMapIn.h>
|
#include <vtkm/exec/arg/FetchTagArrayTopologyMapIn.h>
|
||||||
#include <vtkm/exec/arg/IncidentElementIndices.h>
|
|
||||||
|
#include <vtkm/cont/ArrayHandleXGCCoordinates.h>
|
||||||
|
|
||||||
//optimized fetches for ArrayPortalXGCCoordinates for
|
//optimized fetches for ArrayPortalXGCCoordinates for
|
||||||
// - 3D Scheduling
|
// - 3D Scheduling
|
||||||
@ -25,6 +26,15 @@ namespace exec
|
|||||||
namespace arg
|
namespace arg
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/// \brief Aspect tag to use for getting the visited indices.
|
||||||
|
///
|
||||||
|
/// The \c AspectTagIncidentElementIndices aspect tag causes the \c Fetch class
|
||||||
|
/// to obtain the indices that map to the current topology element.
|
||||||
|
///
|
||||||
|
struct AspectTagIncidentElementIndices
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
//Optimized fetch for point ids when iterating the cells ConnectivityExtrude
|
//Optimized fetch for point ids when iterating the cells ConnectivityExtrude
|
||||||
template <typename FetchType, typename ExecObjectType>
|
template <typename FetchType, typename ExecObjectType>
|
||||||
struct Fetch<FetchType, vtkm::exec::arg::AspectTagIncidentElementIndices, ExecObjectType>
|
struct Fetch<FetchType, vtkm::exec::arg::AspectTagIncidentElementIndices, ExecObjectType>
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include <vtkm/exec/arg/ExecutionSignatureTagBase.h>
|
#include <vtkm/exec/arg/ExecutionSignatureTagBase.h>
|
||||||
#include <vtkm/exec/arg/Fetch.h>
|
#include <vtkm/exec/arg/Fetch.h>
|
||||||
|
#include <vtkm/exec/arg/FetchExtrude.h>
|
||||||
|
|
||||||
namespace vtkm
|
namespace vtkm
|
||||||
{
|
{
|
||||||
@ -20,15 +21,6 @@ namespace exec
|
|||||||
namespace arg
|
namespace arg
|
||||||
{
|
{
|
||||||
|
|
||||||
/// \brief Aspect tag to use for getting the visited indices.
|
|
||||||
///
|
|
||||||
/// The \c AspectTagIncidentElementIndices aspect tag causes the \c Fetch class
|
|
||||||
/// to obtain the indices that map to the current topology element.
|
|
||||||
///
|
|
||||||
struct AspectTagIncidentElementIndices
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
/// \brief The \c ExecutionSignature tag to get the indices of visited elements.
|
/// \brief The \c ExecutionSignature tag to get the indices of visited elements.
|
||||||
///
|
///
|
||||||
/// In a topology map, there are \em visited and \em incident topology elements
|
/// In a topology map, there are \em visited and \em incident topology elements
|
||||||
|
Loading…
Reference in New Issue
Block a user