mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-07-30 10:44:02 +00:00
Make ExecutionWholeArray objects not depend on device type
With recent changes to `Arrayhandle`, the type for the associated array portal is now the same across all devices. This means that almost all exec objects no longer need to be specialized on the device types. Thus, clean up the whole array exec objects to no longer need to be templated on device.
This commit is contained in:
parent
0bee744384
commit
0797359c57
@ -226,20 +226,20 @@ public:
|
||||
using ExecutionSignature = void(_1, _2, _3, _4);
|
||||
using InputDomain = _1;
|
||||
|
||||
template <typename WeightType, typename T, typename S, typename D>
|
||||
template <typename WeightType, typename T, typename S>
|
||||
VTKM_EXEC void operator()(const vtkm::Id2& low_high,
|
||||
const WeightType& weight,
|
||||
const vtkm::exec::ExecutionWholeArrayConst<T, S, D>& inPortal,
|
||||
const vtkm::exec::ExecutionWholeArrayConst<T, S>& inPortal,
|
||||
T& result) const
|
||||
{
|
||||
//fetch the low / high values from inPortal
|
||||
result = vtkm::Lerp(inPortal.Get(low_high[0]), inPortal.Get(low_high[1]), weight);
|
||||
}
|
||||
|
||||
template <typename WeightType, typename T, typename S, typename D, typename U>
|
||||
template <typename WeightType, typename T, typename S, typename U>
|
||||
VTKM_EXEC void operator()(const vtkm::Id2&,
|
||||
const WeightType&,
|
||||
const vtkm::exec::ExecutionWholeArrayConst<T, S, D>&,
|
||||
const vtkm::exec::ExecutionWholeArrayConst<T, S>&,
|
||||
U&) const
|
||||
{
|
||||
//the inPortal and result need to be the same type so this version only
|
||||
|
@ -56,7 +56,7 @@ struct Transport<vtkm::cont::arg::TransportTagWholeArrayIn, ContObjectType, Devi
|
||||
using ValueType = typename ContObjectType::ValueType;
|
||||
using StorageTag = typename ContObjectType::StorageTag;
|
||||
|
||||
using ExecObjectType = vtkm::exec::ExecutionWholeArrayConst<ValueType, StorageTag, Device>;
|
||||
using ExecObjectType = vtkm::exec::ExecutionWholeArrayConst<ValueType, StorageTag>;
|
||||
|
||||
template <typename InputDomainType>
|
||||
VTKM_CONT ExecObjectType operator()(ContObjectType& array,
|
||||
@ -69,7 +69,7 @@ struct Transport<vtkm::cont::arg::TransportTagWholeArrayIn, ContObjectType, Devi
|
||||
// array might not have the same size depending on how the user is using
|
||||
// the array.
|
||||
|
||||
return ExecObjectType(array, token);
|
||||
return ExecObjectType(array, Device{}, token);
|
||||
}
|
||||
|
||||
#ifdef VTKM_MSVC
|
||||
|
@ -58,7 +58,7 @@ struct Transport<vtkm::cont::arg::TransportTagWholeArrayInOut, ContObjectType, D
|
||||
using ValueType = typename ContObjectType::ValueType;
|
||||
using StorageTag = typename ContObjectType::StorageTag;
|
||||
|
||||
using ExecObjectType = vtkm::exec::ExecutionWholeArray<ValueType, StorageTag, Device>;
|
||||
using ExecObjectType = vtkm::exec::ExecutionWholeArray<ValueType, StorageTag>;
|
||||
|
||||
template <typename InputDomainType>
|
||||
VTKM_CONT ExecObjectType operator()(ContObjectType& array,
|
||||
@ -71,7 +71,7 @@ struct Transport<vtkm::cont::arg::TransportTagWholeArrayInOut, ContObjectType, D
|
||||
// array might not have the same size depending on how the user is using
|
||||
// the array.
|
||||
|
||||
return ExecObjectType(array, token);
|
||||
return ExecObjectType(array, Device{}, token);
|
||||
}
|
||||
|
||||
#ifdef VTKM_MSVC
|
||||
|
@ -58,7 +58,7 @@ struct Transport<vtkm::cont::arg::TransportTagWholeArrayOut, ContObjectType, Dev
|
||||
using ValueType = typename ContObjectType::ValueType;
|
||||
using StorageTag = typename ContObjectType::StorageTag;
|
||||
|
||||
using ExecObjectType = vtkm::exec::ExecutionWholeArray<ValueType, StorageTag, Device>;
|
||||
using ExecObjectType = vtkm::exec::ExecutionWholeArray<ValueType, StorageTag>;
|
||||
|
||||
template <typename InputDomainType>
|
||||
VTKM_CONT ExecObjectType operator()(ContObjectType& array,
|
||||
@ -71,7 +71,7 @@ struct Transport<vtkm::cont::arg::TransportTagWholeArrayOut, ContObjectType, Dev
|
||||
// array might not have the same size depending on how the user is using
|
||||
// the array.
|
||||
|
||||
return ExecObjectType(array, array.GetNumberOfValues(), token);
|
||||
return ExecObjectType(array, array.GetNumberOfValues(), Device{}, token);
|
||||
}
|
||||
|
||||
#ifdef VTKM_MSVC
|
||||
|
@ -13,12 +13,14 @@
|
||||
#include <vtkm/cont/ArrayHandle.h>
|
||||
#include <vtkm/cont/DeviceAdapter.h>
|
||||
|
||||
#include <vtkm/Deprecated.h>
|
||||
|
||||
namespace vtkm
|
||||
{
|
||||
namespace exec
|
||||
{
|
||||
|
||||
/// The following classes have been deprecated and are meant to be used
|
||||
/// The following classes have been sort of deprecated and are meant to be used
|
||||
/// internally only. Please use the \c WholeArrayIn, \c WholeArrayOut, and
|
||||
/// \c WholeArrayInOut \c ControlSignature tags instead.
|
||||
|
||||
@ -27,8 +29,11 @@ namespace exec
|
||||
/// function. This can be used to allow worklets to have a shared search
|
||||
/// structure.
|
||||
///
|
||||
template <typename T, typename StorageTag, typename DeviceAdapterTag>
|
||||
class ExecutionWholeArray
|
||||
template <typename T, typename StorageTag, typename... MaybeDevice>
|
||||
class ExecutionWholeArray;
|
||||
|
||||
template <typename T, typename StorageTag>
|
||||
class ExecutionWholeArray<T, StorageTag>
|
||||
{
|
||||
public:
|
||||
using ValueType = T;
|
||||
@ -41,29 +46,20 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
// This constructor is deprecated in VTK-m 1.6
|
||||
VTKM_CONT
|
||||
ExecutionWholeArray(HandleType& handle)
|
||||
: Portal(handle.PrepareForInPlace(DeviceAdapterTag()))
|
||||
{
|
||||
}
|
||||
|
||||
// This constructor is deprecated in VTK-m 1.6
|
||||
VTKM_CONT
|
||||
ExecutionWholeArray(HandleType& handle, vtkm::Id length)
|
||||
: Portal(handle.PrepareForOutput(length, DeviceAdapterTag()))
|
||||
ExecutionWholeArray(HandleType& handle,
|
||||
vtkm::cont::DeviceAdapterId device,
|
||||
vtkm::cont::Token& token)
|
||||
: Portal(handle.PrepareForInPlace(device, token))
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ExecutionWholeArray(HandleType& handle, vtkm::cont::Token& token)
|
||||
: Portal(handle.PrepareForInPlace(DeviceAdapterTag(), token))
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ExecutionWholeArray(HandleType& handle, vtkm::Id length, vtkm::cont::Token& token)
|
||||
: Portal(handle.PrepareForOutput(length, DeviceAdapterTag(), token))
|
||||
ExecutionWholeArray(HandleType& handle,
|
||||
vtkm::Id length,
|
||||
vtkm::cont::DeviceAdapterId device,
|
||||
vtkm::cont::Token& token)
|
||||
: Portal(handle.PrepareForOutput(length, device, token))
|
||||
{
|
||||
}
|
||||
|
||||
@ -86,13 +82,50 @@ private:
|
||||
PortalType Portal;
|
||||
};
|
||||
|
||||
template <typename T, typename StorageTag, typename Device>
|
||||
class VTKM_DEPRECATED(1.6, "ExecutionWholeArray no longer uses Device template parameter.")
|
||||
ExecutionWholeArray<T, StorageTag, Device> : public ExecutionWholeArray<T, StorageTag>
|
||||
{
|
||||
using Superclass = ExecutionWholeArray<T, StorageTag>;
|
||||
using HandleType = typename Superclass::HandleType;
|
||||
|
||||
public:
|
||||
using Superclass::Superclass;
|
||||
|
||||
VTKM_CONT ExecutionWholeArray(HandleType& handle)
|
||||
: Superclass(handle, Device{}, vtkm::cont::Token{})
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ExecutionWholeArray(HandleType& handle, vtkm::Id length)
|
||||
: Superclass(handle, length, Device{}, vtkm::cont::Token{})
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ExecutionWholeArray(HandleType& handle, vtkm::cont::Token& token)
|
||||
: Superclass(handle, Device{}, token)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ExecutionWholeArray(HandleType& handle, vtkm::Id length, vtkm::cont::Token& token)
|
||||
: Superclass(handle, length, Device{}, token)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
/// \c ExecutionWholeArrayConst is an execution object that allows an array handle
|
||||
/// content to be a parameter in an execution environment
|
||||
/// function. This can be used to allow worklets to have a shared search
|
||||
/// structure
|
||||
///
|
||||
template <typename T, typename StorageTag, typename DeviceAdapterTag>
|
||||
class ExecutionWholeArrayConst
|
||||
template <typename T, typename StorageTag, typename... MaybeDevice>
|
||||
class ExecutionWholeArrayConst;
|
||||
|
||||
template <typename T, typename StorageTag>
|
||||
class ExecutionWholeArrayConst<T, StorageTag>
|
||||
{
|
||||
public:
|
||||
using ValueType = T;
|
||||
@ -105,16 +138,11 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
// This constructor is deprecated in VTK-m 1.6
|
||||
VTKM_CONT
|
||||
ExecutionWholeArrayConst(const HandleType& handle)
|
||||
: Portal(handle.PrepareForInput(DeviceAdapterTag()))
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ExecutionWholeArrayConst(const HandleType& handle, vtkm::cont::Token& token)
|
||||
: Portal(handle.PrepareForInput(DeviceAdapterTag(), token))
|
||||
ExecutionWholeArrayConst(const HandleType& handle,
|
||||
vtkm::cont::DeviceAdapterId device,
|
||||
vtkm::cont::Token& token)
|
||||
: Portal(handle.PrepareForInput(device, token))
|
||||
{
|
||||
}
|
||||
|
||||
@ -133,6 +161,30 @@ public:
|
||||
private:
|
||||
PortalType Portal;
|
||||
};
|
||||
|
||||
template <typename T, typename StorageTag, typename Device>
|
||||
class VTKM_DEPRECATED(1.6, "ExecutionWholeArray no longer uses Device template parameter.")
|
||||
ExecutionWholeArrayConst<T, StorageTag, Device> : public ExecutionWholeArrayConst<T, StorageTag>
|
||||
{
|
||||
using Superclass = ExecutionWholeArrayConst<T, StorageTag>;
|
||||
using HandleType = typename Superclass::HandleType;
|
||||
|
||||
public:
|
||||
using Superclass::Superclass;
|
||||
|
||||
VTKM_CONT ExecutionWholeArrayConst(HandleType& handle)
|
||||
: Superclass(handle, Device{}, vtkm::cont::Token{})
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ExecutionWholeArrayConst(HandleType& handle, vtkm::cont::Token& token)
|
||||
: Superclass(handle, Device{}, token)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
} // namespace vtkm::exec
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user