From bfffff9b205ae21f9291f7153b237cf38ba7bdca Mon Sep 17 00:00:00 2001 From: Oliver Ruebel Date: Fri, 17 Sep 2021 14:05:32 -0700 Subject: [PATCH] Fix bug in HierarchicalHyperSweeper call to TransferWeightsUpdateLHEWorklet --- .../HierarchicalHyperSweeper.h | 9 +++++---- .../TransferWeightsUpdateLHEWorklet.h | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/vtkm/worklet/contourtree_distributed/HierarchicalHyperSweeper.h b/vtkm/worklet/contourtree_distributed/HierarchicalHyperSweeper.h index 278c090d6..ce855f41e 100644 --- a/vtkm/worklet/contourtree_distributed/HierarchicalHyperSweeper.h +++ b/vtkm/worklet/contourtree_distributed/HierarchicalHyperSweeper.h @@ -328,7 +328,6 @@ void HierarchicalHyperSweeper::InitializeI template void HierarchicalHyperSweeper::LocalHyperSweep() { // LocalHyperSweep() -// TODO: Implement this function #ifdef DEBUG_PRINT VTKM_LOG_S(vtkm::cont::LogLevel::Info, DebugPrint(std::string("Hypersweep Block ") + std::to_string(BlockId) + @@ -628,6 +627,7 @@ void HierarchicalHyperSweeper::TransferWei valuePrefixSumView, // input view of valuePrefixSum[firstSupernode, lastSupernode) this->DependentValues); } + { VTKM_ASSERT(firstSupernode + 1 + numSupernodesToProcess - 1 <= this->SortedTransferTarget.GetNumberOfValues()); @@ -636,13 +636,14 @@ void HierarchicalHyperSweeper::TransferWei VTKM_ASSERT(firstSupernode + 1 + numSupernodesToProcess - 1 <= this->SortedTransferTarget.GetNumberOfValues()); auto sortedTransferTargetShiftedView = vtkm::cont::make_ArrayHandleView( - this->SortedTransferTarget, firstSupernode + 1, numSupernodesToProcess - 1); + this->SortedTransferTarget, firstSupernode, numSupernodesToProcess - 1); auto valuePrefixSumPreviousValueView = vtkm::cont::make_ArrayHandleView( this->ValuePrefixSum, firstSupernode, numSupernodesToProcess - 1); // 7b. Now find the LHE of each group and subtract out the prior weight - this->Invoke(vtkm::worklet::contourtree_distributed::hierarchical_hyper_sweeper:: - TransferWeightsUpdateLHEWorklet{}, + vtkm::worklet::contourtree_distributed::hierarchical_hyper_sweeper:: + TransferWeightsUpdateLHEWorklet transferWeightsUpdateLHEWorklet; + this->Invoke(transferWeightsUpdateLHEWorklet, sortedTransferTargetView, sortedTransferTargetShiftedView, valuePrefixSumPreviousValueView, diff --git a/vtkm/worklet/contourtree_distributed/hierarchical_hyper_sweeper/TransferWeightsUpdateLHEWorklet.h b/vtkm/worklet/contourtree_distributed/hierarchical_hyper_sweeper/TransferWeightsUpdateLHEWorklet.h index e57f31bcb..35cfcc61d 100644 --- a/vtkm/worklet/contourtree_distributed/hierarchical_hyper_sweeper/TransferWeightsUpdateLHEWorklet.h +++ b/vtkm/worklet/contourtree_distributed/hierarchical_hyper_sweeper/TransferWeightsUpdateLHEWorklet.h @@ -77,21 +77,23 @@ public: template VTKM_EXEC void operator()(const vtkm::Id& sortedTransferTargetValue, - const vtkm::Id& sortedTransferTargetPreviusValue, + const vtkm::Id& sortedTransferTargetPreviousValue, const vtkm::Id& valuePrefixSumPreviousValue, InOutPortalType& dependentValuesPortal) const { // per supernode // ignore any that point at NO_SUCH_ELEMENT - if (!vtkm::worklet::contourtree_augmented::NoSuchElement(sortedTransferTargetValue)) + if (vtkm::worklet::contourtree_augmented::NoSuchElement(sortedTransferTargetValue)) { - if (sortedTransferTargetValue != sortedTransferTargetPreviusValue) - { - auto originalValue = dependentValuesPortal.Get(sortedTransferTargetValue); - dependentValuesPortal.Set(sortedTransferTargetValue, - originalValue - valuePrefixSumPreviousValue); - } + return; } + if (sortedTransferTargetValue != sortedTransferTargetPreviousValue) + { + auto originalValue = dependentValuesPortal.Get(sortedTransferTargetValue); + dependentValuesPortal.Set(sortedTransferTargetValue, + originalValue - valuePrefixSumPreviousValue); + } + // In serial this worklet implements the following operation /*