ForwardTransform2D() takes the filters in constructor.

This commit is contained in:
Samuel Li 2016-09-08 17:05:58 -06:00
parent 39267ce4fb
commit b813c4c9c5
2 changed files with 36 additions and 41 deletions

@ -855,17 +855,17 @@ if( print)
ArrayType afterX;
afterX.PrepareForOutput( outDimX * outDimY, DeviceTag() );
vtkm::Float64 elapsedTime = 0.0;
typedef vtkm::worklet::wavelets::ForwardTransform2D ForwardXForm;
{
ForwardXForm worklet( filterLen, L[0], oddLow, sigExtendedDimX, sigExtendedDimY,
outDimX, outDimY );
vtkm::worklet::DispatcherMapField< ForwardXForm, DeviceTag > dispatcher( worklet );
vtkm::cont::Timer<DeviceTag> timer;
dispatcher.Invoke( sigExtended,
WaveletBase::filter.GetLowDecomposeFilter(),
WaveletBase::filter.GetHighDecomposeFilter(),
afterX );
vtkm::Float64 elapsedTime = 0.0;
typedef vtkm::worklet::wavelets::ForwardTransform2D<DeviceTag> ForwardXForm;
{
ForwardXForm worklet( WaveletBase::filter.GetLowDecomposeFilter(),
WaveletBase::filter.GetHighDecomposeFilter(),
filterLen, L[0], sigExtendedDimX, sigExtendedDimY,
outDimX, outDimY, oddLow );
vtkm::worklet::DispatcherMapField< ForwardXForm, DeviceTag > dispatcher( worklet );
timer.Reset();
dispatcher.Invoke( sigExtended, afterX );
elapsedTime += timer.GetElapsedTime();
}
sigExtended.ReleaseResources();
@ -888,14 +888,13 @@ if( print)
ArrayType afterY;
afterY.PrepareForOutput( outDimY * outDimX, DeviceTag() );
{
ForwardXForm worklet2( filterLen, L[1], oddLow, sigExtendedDimX, sigExtendedDimY,
outDimY, outDimX );
ForwardXForm worklet2( WaveletBase::filter.GetLowDecomposeFilter(),
WaveletBase::filter.GetHighDecomposeFilter(),
filterLen, L[1], sigExtendedDimX, sigExtendedDimY,
outDimY, outDimX, oddLow );
vtkm::worklet::DispatcherMapField< ForwardXForm, DeviceTag > dispatcher2( worklet2 );
vtkm::cont::Timer<DeviceTag> timer;
dispatcher2.Invoke( sigExtended,
WaveletBase::filter.GetLowDecomposeFilter(),
WaveletBase::filter.GetHighDecomposeFilter(),
afterY );
timer.Reset();
dispatcher2.Invoke( sigExtended, afterY );
elapsedTime += timer.GetElapsedTime();
}
sigExtended.ReleaseResources();

@ -117,32 +117,30 @@ private:
// Worklet: perform a simple 2D forward transform
template< typename DeviceTag >
class ForwardTransform2D: public vtkm::worklet::WorkletMapField
{
public:
typedef void ControlSignature(WholeArrayIn<ScalarAll>, // sigIn
WholeArrayIn<Scalar>, // lowFilter
WholeArrayIn<Scalar>, // highFilter
WholeArrayOut<ScalarAll>); // cA followed by cD
typedef void ExecutionSignature(_1, _2, _3, _4, WorkIndex);
typedef _4 InputDomain;
typedef void ExecutionSignature(_1, _2, WorkIndex);
typedef _2 InputDomain;
// Constructor
VTKM_EXEC_CONT_EXPORT
ForwardTransform2D( vtkm::Id filter_len, vtkm::Id approx_len, bool odd_low,
ForwardTransform2D( const vtkm::cont::ArrayHandle<vtkm::Float64> &loFilter,
const vtkm::cont::ArrayHandle<vtkm::Float64> &hiFilter,
vtkm::Id filter_len, vtkm::Id approx_len,
vtkm::Id input_dimx, vtkm::Id input_dimy,
vtkm::Id output_dimx, vtkm::Id output_dimy )
{
filterLen = filter_len;
approxLen = approx_len;
oddlow = odd_low;
inputDimX = input_dimx;
inputDimY = input_dimy;
outputDimX = output_dimx;
outputDimY = output_dimy;
this->SetStartPosition();
}
vtkm::Id output_dimx, vtkm::Id output_dimy, bool odd_low) :
lowFilter( loFilter.PrepareForInput( DeviceTag() ) ),
highFilter( hiFilter.PrepareForInput( DeviceTag() ) ),
filterLen( filter_len ), approxLen( approx_len ),
inputDimX( input_dimx ), inputDimY( input_dimy ),
outputDimX( output_dimx), outputDimY( output_dimy),
oddlow( odd_low )
{ this->SetStartPosition(); }
VTKM_EXEC_CONT_EXPORT
void Input1Dto2D( const vtkm::Id &idx, vtkm::Id &x, vtkm::Id &y ) const
@ -171,13 +169,9 @@ public:
#define VAL vtkm::Float64
#define MAKEVAL(a) (static_cast<VAL>(a))
template <typename InputPortalType,
typename FilterPortalType,
typename OutputPortalType>
template <typename InputPortalType, typename OutputPortalType>
VTKM_EXEC_EXPORT
void operator()(const InputPortalType &signalIn,
const FilterPortalType &lowFilter,
const FilterPortalType &highFilter,
OutputPortalType &coeffOut,
const vtkm::Id &workIndex) const
{
@ -222,11 +216,13 @@ public:
#undef VAL
private:
vtkm::Id filterLen, approxLen; // filter and outcome coeff length.
typename vtkm::cont::ArrayHandle<vtkm::Float64>::ExecutionTypes<DeviceTag>::PortalConst
lowFilter, highFilter;
vtkm::Id filterLen, approxLen;
vtkm::Id inputDimX, inputDimY;
vtkm::Id outputDimX, outputDimY;
bool oddlow;
vtkm::Id xlstart, xhstart;
vtkm::Id inputDimX, inputDimY; // extended signal
vtkm::Id outputDimX, outputDimY;
VTKM_EXEC_CONT_EXPORT
void SetStartPosition()