Merge topic 'fix-whitespace-issues'
cbd918b4 worklet/wavelet: fix whitespace issues Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Robert Maynard <robert.maynard@kitware.com> Merge-request: !773
This commit is contained in:
commit
b69bb4f890
@ -31,7 +31,7 @@ class WaveletCompressor : public vtkm::worklet::wavelets::WaveletDWT
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
WaveletCompressor( wavelets::WaveletName name ) : WaveletDWT( name ) {}
|
||||
WaveletCompressor( wavelets::WaveletName name ) : WaveletDWT( name ) {}
|
||||
|
||||
|
||||
// Multi-level 1D wavelet decomposition
|
||||
@ -58,7 +58,7 @@ public:
|
||||
vtkm::Id CLength = this->ComputeCoeffLength( L, nLevels );
|
||||
VTKM_ASSERT( CLength == sigInLen );
|
||||
|
||||
vtkm::Id sigInPtr = 0; // pseudo pointer for the beginning of input array
|
||||
vtkm::Id sigInPtr = 0; // pseudo pointer for the beginning of input array
|
||||
vtkm::Id len = sigInLen;
|
||||
vtkm::Id cALen = WaveletBase::GetApproxLength( len );
|
||||
vtkm::Id cptr; // pseudo pointer for the beginning of output array
|
||||
@ -71,7 +71,7 @@ public:
|
||||
|
||||
// Define a few more types
|
||||
typedef vtkm::cont::ArrayHandleCounting< vtkm::Id > IdArrayType;
|
||||
typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, CoeffArrayType >
|
||||
typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, CoeffArrayType >
|
||||
PermutArrayType;
|
||||
|
||||
vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( sigIn, coeffOut );
|
||||
@ -80,11 +80,11 @@ public:
|
||||
{
|
||||
tlen += L[ size_t(i) ];
|
||||
cptr = 0 + CLength - tlen - cALen;
|
||||
|
||||
|
||||
// make input array (permutation array)
|
||||
IdArrayType inputIndices( sigInPtr, 1, len );
|
||||
PermutArrayType input( inputIndices, coeffOut );
|
||||
// make output array
|
||||
PermutArrayType input( inputIndices, coeffOut );
|
||||
// make output array
|
||||
InterArrayType output;
|
||||
|
||||
WaveletDWT::DWT1D( input, output, L1d, DeviceTag() );
|
||||
@ -123,7 +123,7 @@ public:
|
||||
typedef typename SignalArrayType::ValueType OutValueType;
|
||||
typedef vtkm::cont::ArrayHandle< OutValueType > OutArrayBasic;
|
||||
typedef vtkm::cont::ArrayHandleCounting< vtkm::Id > IdArrayType;
|
||||
typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, SignalArrayType >
|
||||
typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, SignalArrayType >
|
||||
PermutArrayType;
|
||||
|
||||
vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( coeffIn, sigOut );
|
||||
@ -134,11 +134,11 @@ public:
|
||||
|
||||
// Make an input array
|
||||
IdArrayType inputIndices( 0, 1, L1d[2] );
|
||||
PermutArrayType input( inputIndices, sigOut );
|
||||
|
||||
PermutArrayType input( inputIndices, sigOut );
|
||||
|
||||
// Make an output array
|
||||
OutArrayBasic output;
|
||||
|
||||
|
||||
WaveletDWT::IDWT1D( input, L1d, output, DeviceTag() );
|
||||
VTKM_ASSERT( output.GetNumberOfValues() == L1d[2] );
|
||||
|
||||
@ -159,17 +159,17 @@ public:
|
||||
VTKM_CONT
|
||||
vtkm::Float64 WaveDecompose3D( InArrayType &sigIn, // Input
|
||||
vtkm::Id nLevels, // n levels of DWT
|
||||
vtkm::Id inX,
|
||||
vtkm::Id inY,
|
||||
vtkm::Id inX,
|
||||
vtkm::Id inY,
|
||||
vtkm::Id inZ,
|
||||
OutArrayType &coeffOut,
|
||||
bool discardSigIn, // can we discard sigIn on devices?
|
||||
bool discardSigIn, // can we discard sigIn on devices?
|
||||
DeviceTag )
|
||||
{
|
||||
vtkm::Id sigInLen = sigIn.GetNumberOfValues();
|
||||
VTKM_ASSERT( inX * inY * inZ == sigInLen );
|
||||
if( nLevels < 0 || nLevels > WaveletBase::GetWaveletMaxLevel( inX ) ||
|
||||
nLevels > WaveletBase::GetWaveletMaxLevel( inY ) ||
|
||||
nLevels > WaveletBase::GetWaveletMaxLevel( inY ) ||
|
||||
nLevels > WaveletBase::GetWaveletMaxLevel( inZ ) )
|
||||
{
|
||||
throw vtkm::cont::ErrorBadValue("Number of levels of transform is not supported! ");
|
||||
@ -189,13 +189,13 @@ public:
|
||||
typedef vtkm::cont::ArrayHandle<OutValueType> OutBasicArray;
|
||||
|
||||
// First level transform writes to the output array
|
||||
vtkm::Float64 computationTime = WaveletDWT::DWT3D(
|
||||
sigIn,
|
||||
vtkm::Float64 computationTime = WaveletDWT::DWT3D(
|
||||
sigIn,
|
||||
inX, inY, inZ,
|
||||
0, 0, 0,
|
||||
currentLenX, currentLenY, currentLenZ,
|
||||
coeffOut,
|
||||
discardSigIn,
|
||||
coeffOut,
|
||||
discardSigIn,
|
||||
DeviceTag() );
|
||||
|
||||
// Successor transforms writes to a temporary array
|
||||
@ -207,19 +207,19 @@ public:
|
||||
|
||||
OutBasicArray tempOutput;
|
||||
|
||||
computationTime += WaveletDWT::DWT3D(
|
||||
coeffOut,
|
||||
computationTime += WaveletDWT::DWT3D(
|
||||
coeffOut,
|
||||
inX, inY, inZ,
|
||||
0, 0, 0,
|
||||
currentLenX, currentLenY, currentLenZ,
|
||||
tempOutput,
|
||||
false,
|
||||
tempOutput,
|
||||
false,
|
||||
DeviceTag() );
|
||||
|
||||
// copy results to coeffOut
|
||||
WaveletBase::DeviceCubeCopyTo( tempOutput,
|
||||
WaveletBase::DeviceCubeCopyTo( tempOutput,
|
||||
currentLenX, currentLenY, currentLenZ,
|
||||
coeffOut,
|
||||
coeffOut,
|
||||
inX, inY, inZ,
|
||||
0, 0, 0,
|
||||
DeviceTag() );
|
||||
@ -233,7 +233,7 @@ public:
|
||||
// Multi-level 3D wavelet reconstruction
|
||||
template< typename InArrayType, typename OutArrayType, typename DeviceTag>
|
||||
VTKM_CONT
|
||||
vtkm::Float64 WaveReconstruct3D(
|
||||
vtkm::Float64 WaveReconstruct3D(
|
||||
InArrayType &arrIn, // Input
|
||||
vtkm::Id nLevels, // n levels of DWT
|
||||
vtkm::Id inX, vtkm::Id inY, vtkm::Id inZ,
|
||||
@ -252,18 +252,18 @@ public:
|
||||
typedef typename OutArrayType::ValueType OutValueType;
|
||||
typedef vtkm::cont::ArrayHandle<OutValueType> OutBasicArray;
|
||||
vtkm::Float64 computationTime = 0.0;
|
||||
|
||||
|
||||
OutBasicArray outBuffer;
|
||||
if( nLevels == 0 ) // 0 levels means no transform
|
||||
{
|
||||
{
|
||||
vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( arrIn, arrOut );
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
else if ( discardArrIn )
|
||||
{
|
||||
outBuffer = arrIn;
|
||||
outBuffer = arrIn;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( arrIn, outBuffer );
|
||||
}
|
||||
@ -271,7 +271,7 @@ public:
|
||||
std::vector<vtkm::Id> L;
|
||||
this->ComputeL3( inX, inY, inZ, nLevels, L );
|
||||
std::vector<vtkm::Id> L3d(27, 0);
|
||||
|
||||
|
||||
// All transforms but the last level operate on temporary arrays
|
||||
for( size_t i = 0; i < 24; i++ )
|
||||
{
|
||||
@ -286,22 +286,22 @@ public:
|
||||
OutBasicArray tempOutput;
|
||||
|
||||
// IDWT
|
||||
computationTime += WaveletDWT::IDWT3D( outBuffer,
|
||||
computationTime += WaveletDWT::IDWT3D( outBuffer,
|
||||
inX, inY, inZ,
|
||||
0, 0, 0,
|
||||
L3d,
|
||||
tempOutput,
|
||||
false,
|
||||
L3d,
|
||||
tempOutput,
|
||||
false,
|
||||
DeviceTag() );
|
||||
|
||||
// copy back reconstructed block
|
||||
WaveletBase::DeviceCubeCopyTo( tempOutput,
|
||||
WaveletBase::DeviceCubeCopyTo( tempOutput,
|
||||
L3d[24], L3d[25], L3d[26],
|
||||
outBuffer,
|
||||
outBuffer,
|
||||
inX, inY, inZ,
|
||||
0, 0, 0,
|
||||
DeviceTag() );
|
||||
|
||||
|
||||
// update L3d array
|
||||
L3d[0] = L3d[24];
|
||||
L3d[1] = L3d[25];
|
||||
@ -315,15 +315,15 @@ public:
|
||||
// The last transform outputs to the final output
|
||||
L3d[24] = L3d[0] + L3d[12];
|
||||
L3d[25] = L3d[1] + L3d[7];
|
||||
L3d[26] = L3d[2] + L3d[5];
|
||||
computationTime += WaveletDWT::IDWT3D( outBuffer,
|
||||
L3d[26] = L3d[2] + L3d[5];
|
||||
computationTime += WaveletDWT::IDWT3D( outBuffer,
|
||||
inX, inY, inZ,
|
||||
0, 0, 0,
|
||||
L3d,
|
||||
arrOut,
|
||||
true,
|
||||
L3d,
|
||||
arrOut,
|
||||
true,
|
||||
DeviceTag() );
|
||||
|
||||
|
||||
return computationTime;
|
||||
}
|
||||
|
||||
@ -366,10 +366,10 @@ public:
|
||||
typedef vtkm::cont::ArrayHandle<OutValueType> OutBasicArray;
|
||||
|
||||
// First level transform operates writes to the output array
|
||||
computationTime += WaveletDWT::DWT2D ( sigIn,
|
||||
currentLenX, currentLenY,
|
||||
computationTime += WaveletDWT::DWT2D ( sigIn,
|
||||
currentLenX, currentLenY,
|
||||
0, 0,
|
||||
currentLenX, currentLenY,
|
||||
currentLenX, currentLenY,
|
||||
coeffOut, L2d, DeviceTag() );
|
||||
VTKM_ASSERT( coeffOut.GetNumberOfValues() == currentLenX * currentLenY );
|
||||
currentLenX = WaveletBase::GetApproxLength( currentLenX );
|
||||
@ -381,10 +381,10 @@ public:
|
||||
OutBasicArray tempOutput;
|
||||
|
||||
computationTime +=
|
||||
WaveletDWT::DWT2D ( coeffOut,
|
||||
inX, inY,
|
||||
WaveletDWT::DWT2D ( coeffOut,
|
||||
inX, inY,
|
||||
0, 0,
|
||||
currentLenX, currentLenY,
|
||||
currentLenX, currentLenY,
|
||||
tempOutput, L2d, DeviceTag() );
|
||||
|
||||
// copy results to coeffOut
|
||||
@ -422,30 +422,30 @@ public:
|
||||
typedef typename OutArrayType::ValueType OutValueType;
|
||||
typedef vtkm::cont::ArrayHandle<OutValueType> OutBasicArray;
|
||||
vtkm::Float64 computationTime = 0.0;
|
||||
|
||||
|
||||
OutBasicArray outBuffer;
|
||||
if( nLevels == 0 ) // 0 levels means no transform
|
||||
{
|
||||
{
|
||||
vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( arrIn, arrOut );
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( arrIn, outBuffer );
|
||||
}
|
||||
|
||||
|
||||
VTKM_ASSERT( vtkm::Id(L.size()) == 6 * nLevels + 4 );
|
||||
|
||||
std::vector<vtkm::Id> L2d(10, 0);
|
||||
L2d[0] = L[0];
|
||||
L2d[1] = L[1];
|
||||
L2d[2] = L[2];
|
||||
L2d[3] = L[3];
|
||||
L2d[4] = L[4];
|
||||
L2d[5] = L[5];
|
||||
L2d[6] = L[6];
|
||||
L2d[7] = L[7];
|
||||
|
||||
L2d[0] = L[0];
|
||||
L2d[1] = L[1];
|
||||
L2d[2] = L[2];
|
||||
L2d[3] = L[3];
|
||||
L2d[4] = L[4];
|
||||
L2d[5] = L[5];
|
||||
L2d[6] = L[6];
|
||||
L2d[7] = L[7];
|
||||
|
||||
// All transforms but the last operate on temporary arrays
|
||||
for( size_t i = 1; i < static_cast<size_t>(nLevels); i++ )
|
||||
{
|
||||
@ -461,7 +461,7 @@ public:
|
||||
// copy back reconstructed block
|
||||
WaveletBase::DeviceRectangleCopyTo( tempOutput, L2d[8], L2d[9],
|
||||
outBuffer, inX, inY, 0, 0, DeviceTag() );
|
||||
|
||||
|
||||
// update L2d array
|
||||
L2d[0] = L2d[8];
|
||||
L2d[1] = L2d[9];
|
||||
@ -477,10 +477,10 @@ public:
|
||||
// The last transform outputs to the final output
|
||||
L2d[8] = L2d[0] + L2d[4];
|
||||
L2d[9] = L2d[1] + L2d[3];
|
||||
computationTime +=
|
||||
computationTime +=
|
||||
WaveletDWT::IDWT2D ( outBuffer, inX, inY, 0, 0, L2d, arrOut, DeviceTag() );
|
||||
|
||||
return computationTime;
|
||||
return computationTime;
|
||||
}
|
||||
|
||||
|
||||
@ -501,7 +501,7 @@ public:
|
||||
|
||||
WaveletBase::DeviceSort( sortedArray, DeviceTag() );
|
||||
|
||||
vtkm::Id n = coeffLen -
|
||||
vtkm::Id n = coeffLen -
|
||||
static_cast<vtkm::Id>( static_cast<vtkm::Float64>(coeffLen)/ratio );
|
||||
vtkm::Float64 nthVal = static_cast<vtkm::Float64>
|
||||
(sortedArray.GetPortalConstControl().Get(n));
|
||||
@ -513,7 +513,7 @@ public:
|
||||
ThresholdType thresholdWorklet( nthVal );
|
||||
vtkm::worklet::DispatcherMapField< ThresholdType, DeviceTag > dispatcher( thresholdWorklet );
|
||||
dispatcher.Invoke( coeffIn );
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -569,9 +569,9 @@ public:
|
||||
std::cout << "Data range = " << range << std::endl;
|
||||
std::cout << "SNR = " << snr << std::endl;
|
||||
std::cout << "SNR in decibels = " << decibels << std::endl;
|
||||
std::cout << "L-infy norm = " << errorMax
|
||||
std::cout << "L-infy norm = " << errorMax
|
||||
<< ", after normalization = " << errorMax / range << std::endl;
|
||||
std::cout << "RMSE = " << rmse
|
||||
std::cout << "RMSE = " << rmse
|
||||
<< ", after normalization = " << rmse / range << std::endl;
|
||||
#undef MAKEVAL
|
||||
#undef VAL
|
||||
@ -580,10 +580,10 @@ public:
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Compute the book keeping array L for 1D DWT
|
||||
void ComputeL( vtkm::Id sigInLen,
|
||||
vtkm::Id nLev,
|
||||
void ComputeL( vtkm::Id sigInLen,
|
||||
vtkm::Id nLev,
|
||||
std::vector<vtkm::Id> &L )
|
||||
{
|
||||
size_t nLevels = static_cast<size_t>( nLev ); // cast once
|
||||
@ -602,10 +602,10 @@ public:
|
||||
// Compute the book keeping array L for 2D DWT
|
||||
void ComputeL2( vtkm::Id inX,
|
||||
vtkm::Id inY,
|
||||
vtkm::Id nLev,
|
||||
vtkm::Id nLev,
|
||||
std::vector<vtkm::Id> &L )
|
||||
{
|
||||
size_t nLevels = static_cast<size_t>( nLev );
|
||||
size_t nLevels = static_cast<size_t>( nLev );
|
||||
L.resize( nLevels*6 + 4 );
|
||||
L[ nLevels*6 ] = inX;
|
||||
L[ nLevels*6 + 1 ] = inY;
|
||||
@ -661,17 +661,17 @@ public:
|
||||
L[ i * 21 - 18 ] = L[ i * 21 - 21 ];
|
||||
L[ i * 21 - 17 ] = L[ i * 21 - 20 ];
|
||||
L[ i * 21 - 16 ] = WaveletBase::GetDetailLength( L[ i * 21 + 2 ] );
|
||||
|
||||
|
||||
// cLHL
|
||||
L[ i * 21 - 15 ] = L[ i * 21 - 21 ];
|
||||
L[ i * 21 - 14 ] = WaveletBase::GetDetailLength( L[ i * 21 + 1 ] );
|
||||
L[ i * 21 - 13 ] = L[ i * 21 - 19 ];
|
||||
|
||||
|
||||
// cLHH
|
||||
L[ i * 21 - 12 ] = L[ i * 21 - 21 ];
|
||||
L[ i * 21 - 11 ] = L[ i * 21 - 14 ];
|
||||
L[ i * 21 - 10 ] = L[ i * 21 - 16 ];
|
||||
|
||||
|
||||
// cHLL
|
||||
L[ i * 21 - 9 ] = WaveletBase::GetDetailLength( L[ i * 21 + 0 ] );
|
||||
L[ i * 21 - 8 ] = L[ i * 21 - 20 ];
|
||||
@ -729,7 +729,7 @@ public:
|
||||
for( vtkm::Id i = 0; i < levN; i++ )
|
||||
{
|
||||
cALen = WaveletBase::GetApproxLength( cALen );
|
||||
if( cALen == 0 )
|
||||
if( cALen == 0 )
|
||||
{
|
||||
return cALen;
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ public:
|
||||
vtkm::Float64 sx, vtkm::Float64 xy )
|
||||
: dimX( dx ), dimY( dy ), amp (a),
|
||||
x0( x ), y0( y ),
|
||||
sigmaX( sx ), sigmaY( xy )
|
||||
sigmaX( sx ), sigmaY( xy )
|
||||
{
|
||||
sigmaX2 = 2 * sigmaX * sigmaX;
|
||||
sigmaY2 = 2 * sigmaY * sigmaY;
|
||||
@ -58,7 +58,7 @@ public:
|
||||
x = idx % dimX;
|
||||
y = idx / dimX;
|
||||
}
|
||||
|
||||
|
||||
VTKM_EXEC
|
||||
vtkm::Float64 GetGaussian( vtkm::Float64 x, vtkm::Float64 y ) const
|
||||
{
|
||||
@ -68,7 +68,7 @@ public:
|
||||
|
||||
template<typename T>
|
||||
VTKM_EXEC
|
||||
void operator()(T& val, const vtkm::Id& workIdx) const
|
||||
void operator()(T& val, const vtkm::Id& workIdx) const
|
||||
{
|
||||
vtkm::Id x, y;
|
||||
Sig1Dto2D( workIdx, x, y );
|
||||
@ -93,7 +93,7 @@ public:
|
||||
VTKM_EXEC
|
||||
GaussianWorklet3D( vtkm::Id dx, vtkm::Id dy, vtkm::Id dz )
|
||||
: dimX( dx ), dimY( dy ), dimZ( dz )
|
||||
{
|
||||
{
|
||||
amp = (T)20.0;
|
||||
sigmaX = (T)dimX / (T)4.0; sigmaX2 = sigmaX * sigmaX * (T)2.0;
|
||||
sigmaY = (T)dimY / (T)4.0; sigmaY2 = sigmaY * sigmaY * (T)2.0;
|
||||
@ -107,7 +107,7 @@ public:
|
||||
y = (idx - z * dimX * dimY) / dimX;
|
||||
x = idx % dimX;
|
||||
}
|
||||
|
||||
|
||||
VTKM_EXEC
|
||||
T GetGaussian( T x, T y, T z ) const
|
||||
{
|
||||
@ -120,7 +120,7 @@ public:
|
||||
}
|
||||
|
||||
VTKM_EXEC
|
||||
void operator()(T& val, const vtkm::Id& workIdx) const
|
||||
void operator()(T& val, const vtkm::Id& workIdx) const
|
||||
{
|
||||
vtkm::Id x, y, z;
|
||||
Sig1Dto3D( workIdx, x, y, z );
|
||||
@ -142,7 +142,7 @@ template< typename ArrayType >
|
||||
void FillArray2D( ArrayType& array, vtkm::Id dimX, vtkm::Id dimY )
|
||||
{
|
||||
typedef vtkm::worklet::wavelets::GaussianWorklet2D WorkletType;
|
||||
WorkletType worklet( dimX, dimY, 100.0,
|
||||
WorkletType worklet( dimX, dimY, 100.0,
|
||||
static_cast<vtkm::Float64>(dimX)/2.0, // center
|
||||
static_cast<vtkm::Float64>(dimY)/2.0, // center
|
||||
static_cast<vtkm::Float64>(dimX)/4.0, // spread
|
||||
@ -177,14 +177,14 @@ void TestDecomposeReconstruct3D( vtkm::Float64 cratio )
|
||||
|
||||
// Use a WaveletCompressor
|
||||
vtkm::worklet::wavelets::WaveletName wname = vtkm::worklet::wavelets::BIOR4_4;
|
||||
if( wname == vtkm::worklet::wavelets::BIOR1_1 )
|
||||
std::cout << "Using wavelet kernel = Bior1.1 (HAAR)" << std::endl;
|
||||
else if( wname == vtkm::worklet::wavelets::BIOR2_2 )
|
||||
std::cout << "Using wavelet kernel = Bior2.2 (CDF 5/3)" << std::endl;
|
||||
else if( wname == vtkm::worklet::wavelets::BIOR3_3 )
|
||||
std::cout << "Using wavelet kernel = Bior3.3 (CDF 8/4)" << std::endl;
|
||||
else if( wname == vtkm::worklet::wavelets::BIOR4_4 )
|
||||
std::cout << "Using wavelet kernel = Bior4.4 (CDF 9/7)" << std::endl;
|
||||
if( wname == vtkm::worklet::wavelets::BIOR1_1 )
|
||||
std::cout << "Using wavelet kernel = Bior1.1 (HAAR)" << std::endl;
|
||||
else if( wname == vtkm::worklet::wavelets::BIOR2_2 )
|
||||
std::cout << "Using wavelet kernel = Bior2.2 (CDF 5/3)" << std::endl;
|
||||
else if( wname == vtkm::worklet::wavelets::BIOR3_3 )
|
||||
std::cout << "Using wavelet kernel = Bior3.3 (CDF 8/4)" << std::endl;
|
||||
else if( wname == vtkm::worklet::wavelets::BIOR4_4 )
|
||||
std::cout << "Using wavelet kernel = Bior4.4 (CDF 9/7)" << std::endl;
|
||||
vtkm::worklet::WaveletCompressor compressor( wname );
|
||||
|
||||
vtkm::Id XMaxLevel = compressor.GetWaveletMaxLevel( sigX );
|
||||
@ -197,31 +197,31 @@ void TestDecomposeReconstruct3D( vtkm::Float64 cratio )
|
||||
|
||||
// Decompose
|
||||
vtkm::cont::Timer<> timer;
|
||||
computationTime =
|
||||
computationTime =
|
||||
compressor.WaveDecompose3D( inputArray, nLevels, sigX, sigY, sigZ, outputArray,
|
||||
false, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
elapsedTime1 = timer.GetElapsedTime();
|
||||
elapsedTime1 = timer.GetElapsedTime();
|
||||
std::cout << "Decompose time = " << elapsedTime1 << std::endl;
|
||||
std::cout << " ->computation time = " << computationTime << std::endl;
|
||||
|
||||
// Squash small coefficients
|
||||
timer.Reset();
|
||||
compressor.SquashCoefficients( outputArray, cratio, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
elapsedTime2 = timer.GetElapsedTime();
|
||||
elapsedTime2 = timer.GetElapsedTime();
|
||||
std::cout << "Squash time = " << elapsedTime2 << std::endl;
|
||||
|
||||
// Reconstruct
|
||||
vtkm::cont::ArrayHandle<vtkm::Float32> reconstructArray;
|
||||
timer.Reset();
|
||||
computationTime =
|
||||
computationTime =
|
||||
compressor.WaveReconstruct3D( outputArray, nLevels, sigX, sigY, sigZ, reconstructArray,
|
||||
false, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
elapsedTime3 = timer.GetElapsedTime();
|
||||
elapsedTime3 = timer.GetElapsedTime();
|
||||
std::cout << "Reconstruction time = " << elapsedTime3 << std::endl;
|
||||
std::cout << " ->computation time = " << computationTime << std::endl;
|
||||
std::cout << "Total time = "
|
||||
std::cout << "Total time = "
|
||||
<< (elapsedTime1 + elapsedTime2 + elapsedTime3) << std::endl;
|
||||
|
||||
|
||||
outputArray.ReleaseResources();
|
||||
|
||||
compressor.EvaluateReconstruction( inputArray, reconstructArray, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
@ -233,7 +233,7 @@ void TestDecomposeReconstruct3D( vtkm::Float64 cratio )
|
||||
inputArray.GetPortalConstControl().Get(i) ),
|
||||
"WaveletCompressor 3D failed..." );
|
||||
}
|
||||
elapsedTime1 = timer.GetElapsedTime();
|
||||
elapsedTime1 = timer.GetElapsedTime();
|
||||
std::cout << "Verification time = " << elapsedTime1 << std::endl;
|
||||
}
|
||||
|
||||
@ -268,31 +268,31 @@ void TestDecomposeReconstruct2D( vtkm::Float64 cratio )
|
||||
|
||||
// Decompose
|
||||
vtkm::cont::Timer<> timer;
|
||||
computationTime =
|
||||
compressor.WaveDecompose2D( inputArray, nLevels, sigX, sigY, outputArray, L,
|
||||
computationTime =
|
||||
compressor.WaveDecompose2D( inputArray, nLevels, sigX, sigY, outputArray, L,
|
||||
VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
elapsedTime1 = timer.GetElapsedTime();
|
||||
elapsedTime1 = timer.GetElapsedTime();
|
||||
std::cout << "Decompose time = " << elapsedTime1 << std::endl;
|
||||
std::cout << " ->computation time = " << computationTime << std::endl;
|
||||
|
||||
// Squash small coefficients
|
||||
timer.Reset();
|
||||
compressor.SquashCoefficients( outputArray, cratio, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
elapsedTime2 = timer.GetElapsedTime();
|
||||
elapsedTime2 = timer.GetElapsedTime();
|
||||
std::cout << "Squash time = " << elapsedTime2 << std::endl;
|
||||
|
||||
// Reconstruct
|
||||
vtkm::cont::ArrayHandle<vtkm::Float64> reconstructArray;
|
||||
timer.Reset();
|
||||
computationTime =
|
||||
computationTime =
|
||||
compressor.WaveReconstruct2D( outputArray, nLevels, sigX, sigY, reconstructArray, L,
|
||||
VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
elapsedTime3 = timer.GetElapsedTime();
|
||||
elapsedTime3 = timer.GetElapsedTime();
|
||||
std::cout << "Reconstruction time = " << elapsedTime3 << std::endl;
|
||||
std::cout << " ->computation time = " << computationTime << std::endl;
|
||||
std::cout << "Total time = "
|
||||
std::cout << "Total time = "
|
||||
<< (elapsedTime1 + elapsedTime2 + elapsedTime3) << std::endl;
|
||||
|
||||
|
||||
outputArray.ReleaseResources();
|
||||
|
||||
compressor.EvaluateReconstruction( inputArray, reconstructArray, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
@ -304,7 +304,7 @@ void TestDecomposeReconstruct2D( vtkm::Float64 cratio )
|
||||
inputArray.GetPortalConstControl().Get(i) ),
|
||||
"WaveletCompressor 2D failed..." );
|
||||
}
|
||||
elapsedTime1 = timer.GetElapsedTime();
|
||||
elapsedTime1 = timer.GetElapsedTime();
|
||||
std::cout << "Verification time = " << elapsedTime1 << std::endl;
|
||||
}
|
||||
|
||||
@ -320,7 +320,7 @@ void TestDecomposeReconstruct1D( vtkm::Float64 cratio )
|
||||
{
|
||||
tmpVector.push_back( 100.0 * vtkm::Sin(static_cast<vtkm::Float64>(i)/100.0 ));
|
||||
}
|
||||
vtkm::cont::ArrayHandle<vtkm::Float64> inputArray =
|
||||
vtkm::cont::ArrayHandle<vtkm::Float64> inputArray =
|
||||
vtkm::cont::make_ArrayHandle(tmpVector);
|
||||
|
||||
vtkm::cont::ArrayHandle<vtkm::Float64> outputArray;
|
||||
@ -341,20 +341,20 @@ void TestDecomposeReconstruct1D( vtkm::Float64 cratio )
|
||||
vtkm::cont::Timer<> timer;
|
||||
compressor.WaveDecompose( inputArray, nLevels, outputArray, L, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
|
||||
vtkm::Float64 elapsedTime = timer.GetElapsedTime();
|
||||
vtkm::Float64 elapsedTime = timer.GetElapsedTime();
|
||||
std::cout << "Decompose time = " << elapsedTime << std::endl;
|
||||
|
||||
// Squash small coefficients
|
||||
timer.Reset();
|
||||
compressor.SquashCoefficients( outputArray, cratio, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
elapsedTime = timer.GetElapsedTime();
|
||||
elapsedTime = timer.GetElapsedTime();
|
||||
std::cout << "Squash time = " << elapsedTime << std::endl;
|
||||
|
||||
|
||||
// Reconstruct
|
||||
vtkm::cont::ArrayHandle<vtkm::Float64> reconstructArray;
|
||||
timer.Reset();
|
||||
compressor.WaveReconstruct( outputArray, nLevels, L, reconstructArray, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
elapsedTime = timer.GetElapsedTime();
|
||||
elapsedTime = timer.GetElapsedTime();
|
||||
std::cout << "Reconstruction time = " << elapsedTime << std::endl;
|
||||
|
||||
compressor.EvaluateReconstruction( inputArray, reconstructArray, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() );
|
||||
@ -362,19 +362,19 @@ void TestDecomposeReconstruct1D( vtkm::Float64 cratio )
|
||||
timer.Reset();
|
||||
for( vtkm::Id i = 0; i < reconstructArray.GetNumberOfValues(); i++ )
|
||||
{
|
||||
VTKM_TEST_ASSERT( test_equal( reconstructArray.GetPortalConstControl().Get(i),
|
||||
VTKM_TEST_ASSERT( test_equal( reconstructArray.GetPortalConstControl().Get(i),
|
||||
inputArray.GetPortalConstControl().Get(i)),
|
||||
"WaveletCompressor 1D failed..." );
|
||||
}
|
||||
elapsedTime = timer.GetElapsedTime();
|
||||
elapsedTime = timer.GetElapsedTime();
|
||||
std::cout << "Verification time = " << elapsedTime << std::endl;
|
||||
}
|
||||
|
||||
void TestWaveletCompressor()
|
||||
{
|
||||
vtkm::Float64 cratio = 2.0; // X:1 compression, where X >= 1
|
||||
std::cout << "Compression ratio = " << cratio << ":1 ";
|
||||
std::cout << "(Reconstruction using higher compression ratios may result in failure in verification)" << std::endl;
|
||||
std::cout << "Compression ratio = " << cratio << ":1 ";
|
||||
std::cout << "(Reconstruction using higher compression ratios may result in failure in verification)" << std::endl;
|
||||
|
||||
TestDecomposeReconstruct1D( cratio );
|
||||
std::cout << std::endl;
|
||||
|
@ -43,7 +43,7 @@ public:
|
||||
WaveletBase( WaveletName name ) : wname ( name ),
|
||||
filter( name )
|
||||
{
|
||||
if( wname == CDF9_7 || wname == BIOR4_4 ||
|
||||
if( wname == CDF9_7 || wname == BIOR4_4 ||
|
||||
wname == CDF5_3 || wname == BIOR2_2 )
|
||||
{
|
||||
this->wmode = SYMW; // Default extension mode, see MatWaveBase.cpp
|
||||
@ -63,7 +63,7 @@ public:
|
||||
{
|
||||
return((sigInLen+1) / 2);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
return((sigInLen) / 2);
|
||||
}
|
||||
@ -77,7 +77,7 @@ public:
|
||||
{
|
||||
return((sigInLen-1) / 2);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
return((sigInLen) / 2);
|
||||
}
|
||||
@ -103,7 +103,7 @@ public:
|
||||
// Returns maximum wavelet decompostion level
|
||||
vtkm::Id GetWaveletMaxLevel( vtkm::Id sigInLen )
|
||||
{
|
||||
vtkm::Id filterLen = this->filter.GetFilterLength();
|
||||
vtkm::Id filterLen = this->filter.GetFilterLength();
|
||||
vtkm::Id level;
|
||||
this->WaveLengthValidate( sigInLen, filterLen, level );
|
||||
return level;
|
||||
@ -113,7 +113,7 @@ public:
|
||||
|
||||
// perform a device copy. The whole 1st array to a certain start location of the 2nd array
|
||||
template< typename ArrayType1, typename ArrayType2, typename DeviceTag >
|
||||
void DeviceCopyStartX( const ArrayType1 &srcArray,
|
||||
void DeviceCopyStartX( const ArrayType1 &srcArray,
|
||||
ArrayType2 &dstArray,
|
||||
vtkm::Id startIdx,
|
||||
DeviceTag )
|
||||
@ -141,7 +141,7 @@ public:
|
||||
// Assign zeros to a certain row to a matrix
|
||||
template< typename ArrayType, typename DeviceTag >
|
||||
void DeviceAssignZero2DRow( ArrayType &array, vtkm::Id dimX, vtkm::Id dimY, // input
|
||||
vtkm::Id rowIdx, DeviceTag )
|
||||
vtkm::Id rowIdx, DeviceTag )
|
||||
{
|
||||
typedef vtkm::worklet::wavelets::AssignZero2DWorklet AssignZero2DType;
|
||||
AssignZero2DType zeroWorklet( dimX, dimY, -1, rowIdx );
|
||||
@ -155,7 +155,7 @@ public:
|
||||
// Assign zeros to a certain column to a matrix
|
||||
template< typename ArrayType, typename DeviceTag >
|
||||
void DeviceAssignZero2DColumn( ArrayType &array, vtkm::Id dimX, vtkm::Id dimY, // input
|
||||
vtkm::Id colIdx, DeviceTag )
|
||||
vtkm::Id colIdx, DeviceTag )
|
||||
{
|
||||
typedef vtkm::worklet::wavelets::AssignZero2DWorklet AssignZero2DType;
|
||||
AssignZero2DType zeroWorklet( dimX, dimY, colIdx, -1 );
|
||||
@ -213,14 +213,14 @@ public:
|
||||
|
||||
// Sort by the absolute value on device
|
||||
struct SortLessAbsFunctor
|
||||
{
|
||||
{
|
||||
template< typename T >
|
||||
VTKM_EXEC
|
||||
bool operator()(const T& x, const T& y) const
|
||||
{
|
||||
return vtkm::Abs(x) < vtkm::Abs(y);
|
||||
}
|
||||
};
|
||||
bool operator()(const T& x, const T& y) const
|
||||
{
|
||||
return vtkm::Abs(x) < vtkm::Abs(y);
|
||||
}
|
||||
};
|
||||
template< typename ArrayType, typename DeviceTag >
|
||||
void DeviceSort( ArrayType &array, DeviceTag )
|
||||
{
|
||||
@ -229,7 +229,7 @@ public:
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Reduce to the sum of all values on device
|
||||
template< typename ArrayType, typename DeviceTag >
|
||||
typename ArrayType::ValueType DeviceSum( const ArrayType &array, DeviceTag )
|
||||
@ -257,7 +257,7 @@ public:
|
||||
return vtkm::Max(x, y);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
// Device Min and Max functions
|
||||
@ -301,18 +301,18 @@ public:
|
||||
template< typename ArrayType, typename DeviceTag >
|
||||
vtkm::Float64 DeviceCalculateVariance( ArrayType &array, DeviceTag )
|
||||
{
|
||||
vtkm::Float64 mean = static_cast<vtkm::Float64>(this->DeviceSum( array, DeviceTag() )) /
|
||||
vtkm::Float64 mean = static_cast<vtkm::Float64>(this->DeviceSum( array, DeviceTag() )) /
|
||||
static_cast<vtkm::Float64>(array.GetNumberOfValues());
|
||||
|
||||
|
||||
vtkm::cont::ArrayHandle< vtkm::Float64 > squaredDeviation;
|
||||
|
||||
|
||||
// Use a worklet
|
||||
typedef vtkm::worklet::wavelets::SquaredDeviation SDWorklet;
|
||||
SDWorklet sdw( mean );
|
||||
vtkm::worklet::DispatcherMapField< SDWorklet, DeviceTag > dispatcher( sdw );
|
||||
dispatcher.Invoke( array, squaredDeviation );
|
||||
|
||||
vtkm::Float64 sdMean = this->DeviceSum( squaredDeviation, DeviceTag() ) /
|
||||
vtkm::Float64 sdMean = this->DeviceSum( squaredDeviation, DeviceTag() ) /
|
||||
static_cast<vtkm::Float64>( squaredDeviation.GetNumberOfValues() );
|
||||
|
||||
return sdMean;
|
||||
@ -387,8 +387,8 @@ protected:
|
||||
}
|
||||
else
|
||||
{
|
||||
level = static_cast<vtkm::Id>( vtkm::Floor( 1.0 +
|
||||
vtkm::Log2( static_cast<vtkm::Float64>(sigInLen) /
|
||||
level = static_cast<vtkm::Id>( vtkm::Floor( 1.0 +
|
||||
vtkm::Log2( static_cast<vtkm::Float64>(sigInLen) /
|
||||
static_cast<vtkm::Float64>(filterLength) ) ) );
|
||||
}
|
||||
}
|
||||
@ -401,4 +401,4 @@ protected:
|
||||
} // namespace worklet
|
||||
} // namespace vtkm
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -106,14 +106,14 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
vtkm::Id GetFilterLength()
|
||||
{
|
||||
return this->FilterLength;
|
||||
vtkm::Id GetFilterLength()
|
||||
{
|
||||
return this->FilterLength;
|
||||
}
|
||||
|
||||
bool isSymmetric()
|
||||
{
|
||||
return this->Symmetricity;
|
||||
bool isSymmetric()
|
||||
{
|
||||
return this->Symmetricity;
|
||||
}
|
||||
|
||||
typedef vtkm::cont::ArrayHandle<vtkm::Float64> FilterType;
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user