Resolve code review issues, 1. cudaDeviceSetLimit issue, 2. Namespace issue

This commit is contained in:
caseywang777 2017-07-10 10:52:47 -06:00
parent bf11195da8
commit 37ded1cf69
6 changed files with 97 additions and 24 deletions

@ -36,6 +36,7 @@ set(headers
FieldHistogram.h
FieldStatistics.h
Gradient.h
KdTree3D.h
KernelSplatter.h
Keys.h
Magnitude.h

69
vtkm/worklet/KdTree3D.h Normal file

@ -0,0 +1,69 @@
//============================================================================
// Copyright (c) Kitware, Inc.
// All rights reserved.
// See LICENSE.txt for details.
// This software is distributed WITHOUT ANY WARRANTY; without even
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the above copyright notice for more information.
//
// Copyright 2014 Sandia Corporation.
// Copyright 2014 UT-Battelle, LLC.
// Copyright 2014 Los Alamos National Security.
//
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
// the U.S. Government retains certain rights in this software.
//
// Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National
// Laboratory (LANL), the U.S. Government retains certain rights in
// this software.
//============================================================================
#ifndef vtkm_m_worklet_KdTree3D_h
#define vtkm_m_worklet_KdTree3D_h
#include <vtkm/worklet/spatialstructure/KdTree3DConstruction.h>
#include <vtkm/worklet/spatialstructure/KdTree3DNNSearch.h>
namespace vtkm
{
namespace worklet
{
class KdTree3D
{
public:
KdTree3D() {}
// Execute the 3d kd tree construction given x y z coordinate vectors
// Returns:
// Leaf Node vector and internal node (split) vectpr
template <typename CoordiType, typename TreeIdType, typename DeviceAdapter>
void Run(vtkm::cont::ArrayHandle<vtkm::Vec<CoordiType, 3>>& coordi_Handle,
vtkm::cont::ArrayHandle<TreeIdType>& pointId_Handle,
vtkm::cont::ArrayHandle<TreeIdType>& splitId_Handle,
DeviceAdapter device)
{
vtkm::worklet::spatialstructure::KdTree3DConstruction kdtree3DConstruction;
kdtree3DConstruction.Run(coordi_Handle, pointId_Handle, splitId_Handle, device);
}
// Execute the Neaseat Neighbor Search given kdtree and search points
// Returns:
// Vectors of NN point index and NNpoint distance
template <typename CoordiType, typename TreeIdType, typename DeviceAdapter>
void Run(vtkm::cont::ArrayHandle<vtkm::Vec<CoordiType, 3>>& coordi_Handle,
vtkm::cont::ArrayHandle<TreeIdType>& pointId_Handle,
vtkm::cont::ArrayHandle<TreeIdType>& splitId_Handle,
vtkm::cont::ArrayHandle<vtkm::Vec<CoordiType, 3>>& qc_Handle,
vtkm::cont::ArrayHandle<TreeIdType>& nnId_Handle,
vtkm::cont::ArrayHandle<CoordiType>& nnDis_Handle,
DeviceAdapter device)
{
vtkm::worklet::spatialstructure::KdTree3DNNSearch kdtree3DNNS;
kdtree3DNNS.Run(
coordi_Handle, pointId_Handle, splitId_Handle, qc_Handle, nnId_Handle, nnDis_Handle, device);
}
};
}
} // namespace vtkm::worklet
#endif // vtkm_m_worklet_Kdtree3D_h

@ -19,7 +19,7 @@
##============================================================================
set(headers
KdTree3D.h
KdTree3DConstruction.h
KdTree3DNNSearch.h
)

@ -18,8 +18,8 @@
// this software.
//============================================================================
#ifndef vtk_m_worklet_KdTree3D_h
#define vtk_m_worklet_KdTree3D_h
#ifndef vtk_m_worklet_KdTree3DConstruction_h
#define vtk_m_worklet_KdTree3DConstruction_h
#include <vtkm/Math.h>
#include <vtkm/cont/ArrayHandle.h>
@ -42,7 +42,7 @@ namespace worklet
namespace spatialstructure
{
class KdTree3D
class KdTree3DConstruction
{
public:
////////// General WORKLET for Kd-tree //////
@ -236,7 +236,7 @@ public:
vtkm::cont::ArrayHandle<T> ReverseScanInclusiveByKey(vtkm::cont::ArrayHandle<T>& keyHandle,
vtkm::cont::ArrayHandle<T>& dataHandle,
BinaryFunctor binary_functor,
DeviceAdapter device)
DeviceAdapter vtkmNotUsed(device))
{
typedef typename vtkm::cont::DeviceAdapterAlgorithm<DeviceAdapter> Algorithm;
@ -254,7 +254,7 @@ public:
template <typename T, typename DeviceAdapter>
vtkm::cont::ArrayHandle<T> Inverse01ArrayWrapper(vtkm::cont::ArrayHandle<T>& inputHandle,
DeviceAdapter device)
DeviceAdapter vtkmNotUsed(device))
{
vtkm::cont::ArrayHandle<T> InverseHandle;
InverseArray invWorklet;
@ -267,7 +267,7 @@ public:
template <typename T, typename DeviceAdapter>
vtkm::cont::ArrayHandle<T> ScatterArrayWrapper(vtkm::cont::ArrayHandle<T>& inputHandle,
vtkm::cont::ArrayHandle<T>& indexHandle,
DeviceAdapter device)
DeviceAdapter vtkmNotUsed(device))
{
vtkm::cont::ArrayHandle<T> outputHandle;
outputHandle.Allocate(inputHandle.GetNumberOfValues());
@ -281,7 +281,7 @@ public:
template <typename T, typename DeviceAdapter>
vtkm::cont::ArrayHandle<T> NewKeyWrapper(vtkm::cont::ArrayHandle<T>& oldSegIdHandle,
vtkm::cont::ArrayHandle<T>& flagHandle,
DeviceAdapter device)
DeviceAdapter vtkmNotUsed(device))
{
vtkm::cont::ArrayHandle<T> newSegIdHandle;
NewSegmentId newsegidWorklet;
@ -320,7 +320,7 @@ public:
template <typename T, typename DeviceAdapter>
vtkm::cont::ArrayHandle<T> ArrayAddWrapper(vtkm::cont::ArrayHandle<T>& array0Handle,
vtkm::cont::ArrayHandle<T>& array1Handle,
DeviceAdapter device)
DeviceAdapter vtkmNotUsed(device))
{
vtkm::cont::ArrayHandle<T> resultHandle;
ArrayAdd arrayAddWorklet;
@ -609,4 +609,4 @@ public:
}
} // namespace vtkm::worklet
#endif // vtk_m_worklet_KdTree3D_h
#endif // vtk_m_worklet_KdTree3DConstruction_h

@ -199,11 +199,13 @@ public:
vtkm::cont::ArrayHandle<vtkm::Vec<CoordiType, 3>>& qc_Handle,
vtkm::cont::ArrayHandle<TreeIdType>& nnId_Handle,
vtkm::cont::ArrayHandle<CoordiType>& nnDis_Handle,
DeviceAdapter device)
DeviceAdapter vtkmNotUsed(device))
{
#if VTKM_DEVICE_ADAPTER == VTKM_DEVICE_ADAPTER_CUDA
//set up stack size for cuda envinroment
cudaThreadSetLimit(cudaLimitStackSize, 1024 * 16);
size_t stackSizeBackup;
cudaDeviceGetLimit(&stackSizeBackup, cudaLimitStackSize);
cudaDeviceSetLimit(cudaLimitStackSize, 1024 * 16);
#endif
NearestNeighborSearch3DWorklet nns3dWorklet;
@ -211,6 +213,9 @@ public:
nns3DDispatcher(nns3dWorklet);
nns3DDispatcher.Invoke(
qc_Handle, pointId_Handle, splitId_Handle, coordi_Handle, nnId_Handle, nnDis_Handle);
#if VTKM_DEVICE_ADAPTER == VTKM_DEVICE_ADAPTER_CUDA
cudaDeviceSetLimit(cudaLimitStackSize, stackSizeBackup);
#endif
}
};
}

@ -19,8 +19,7 @@
//============================================================================
#include <random>
#include <vtkm/worklet/spatialstructure/KdTree3D.h>
#include <vtkm/worklet/spatialstructure/KdTree3DNNSearch.h>
#include <vtkm/worklet/KdTree3D.h>
namespace
{
@ -109,9 +108,9 @@ void TestKdTreeBuildNNS()
vtkm::cont::ArrayHandle<vtkm::Id> pointId_Handle;
vtkm::cont::ArrayHandle<vtkm::Id> splitId_Handle;
vtkm::worklet::spatialstructure::KdTree3D kdtree3D;
// Run data
kdtree3D.Run(coordi_Handle, pointId_Handle, splitId_Handle, VTKM_DEFAULT_DEVICE_ADAPTER_TAG());
vtkm::worklet::KdTree3D kdtree3d;
kdtree3d.Run(coordi_Handle, pointId_Handle, splitId_Handle, VTKM_DEFAULT_DEVICE_ADAPTER_TAG());
//Nearest Neighbor worklet Testing
/// randomly generate testing points /////
@ -132,14 +131,13 @@ void TestKdTreeBuildNNS()
vtkm::cont::ArrayHandle<vtkm::Id> nnId_Handle;
vtkm::cont::ArrayHandle<vtkm::Float32> nnDis_Handle;
vtkm::worklet::spatialstructure::KdTree3DNNSearch kdtree3DNNS;
kdtree3DNNS.Run(coordi_Handle,
pointId_Handle,
splitId_Handle,
qc_Handle,
nnId_Handle,
nnDis_Handle,
VTKM_DEFAULT_DEVICE_ADAPTER_TAG());
kdtree3d.Run(coordi_Handle,
pointId_Handle,
splitId_Handle,
qc_Handle,
nnId_Handle,
nnDis_Handle,
VTKM_DEFAULT_DEVICE_ADAPTER_TAG());
vtkm::cont::ArrayHandle<vtkm::Id> bfnnId_Handle;
vtkm::cont::ArrayHandle<vtkm::Float32> bfnnDis_Handle;