32 #ifndef FLANN_KDTREE_CUDA_3D_INDEX_H_
33 #define FLANN_KDTREE_CUDA_3D_INDEX_H_
56 (*this)[
"algorithm"] = FLANN_INDEX_KDTREE_CUDA;
57 (*this)[
"leaf_max_size"] = leaf_max_size;
69 template <
typename Distance>
96 if (dim_param>0) dim_ = dim_param;
110 delete[] data_.
ptr();
116 throw FLANNException(
"KDTreeCuda3dIndex cloning is not implemented");
126 for (
size_t i = 0; i <
size_; i++) {
136 delete[] data_.
ptr();
149 throw FLANNException(
"removePoint not implemented for this index type!" );
197 return knn*queries.
rows;
209 std::vector< std::vector<int> >& indices,
210 std::vector<std::vector<DistanceType> >& dists,
215 return knn*queries.
rows;
229 std::vector< std::vector<int> >& indices,
230 std::vector<std::vector<DistanceType> >& dists,
237 for(
size_t i = 0; i<queries.
rows; i++ ) {
238 indices[i].resize(knn);
239 dists[i].resize(knn);
240 for(
size_t j=0; j<knn; j++ ) {
241 indices[i][j]=ind[i][j];
242 dists[i][j]=
dist[i][j];
246 delete []
dist.ptr();
247 return knn*queries.
rows;
257 std::vector<std::vector<DistanceType> >& dists,
float radius,
const SearchParams&
params)
const
266 std::vector<std::vector<DistanceType> >& dists,
float radius,
const SearchParams&
params)
const;
289 void uploadTreeToGpu( );
291 void clearGpuBuffers( );
300 GpuHelper* gpu_helper_;
309 int current_node_count_;
315 std::vector<int> vind_;
double Distance(const Point3D< Real > &p1, const Point3D< Real > &p2)
cmdLineReadable * params[]
KDTreeCuda3dIndex(const KDTreeCuda3dIndex &other)
Distance::ElementType ElementType
void removePoint(size_t index)
void knnSearchGpu(const Matrix< ElementType > &queries, Matrix< int > &indices, Matrix< DistanceType > &dists, size_t knn, const SearchParams ¶ms) const
Perform k-nearest neighbor search.
KDTreeCuda3dIndex(const Matrix< ElementType > &inputData, const IndexParams ¶ms=KDTreeCuda3dIndexParams(), Distance d=Distance())
int knnSearch(const Matrix< ElementType > &queries, std::vector< std::vector< int > > &indices, std::vector< std::vector< DistanceType > > &dists, size_t knn, const SearchParams ¶ms) const
Perform k-nearest neighbor search.
void loadIndex(FILE *stream)
ElementType * getPoint(size_t id)
void findNeighbors(ResultSet< DistanceType > &result, const ElementType *vec, const SearchParams &searchParams) const
int radiusSearch(const Matrix< ElementType > &queries, Matrix< int > &indices, Matrix< DistanceType > &dists, float radius, const SearchParams ¶ms) const
Distance::ResultType DistanceType
bool needs_kdtree_distance
NNIndex< Distance > BaseClass
KDTreeCuda3dIndex operator=(KDTreeCuda3dIndex other)
flann_algorithm_t getType() const
int radiusSearchGpu(const Matrix< ElementType > &queries, Matrix< int > &indices, Matrix< DistanceType > &dists, float radius, const SearchParams ¶ms) const
BaseClass * clone() const
int knnSearch(const Matrix< ElementType > &queries, Matrix< int > &indices, Matrix< DistanceType > &dists, size_t knn, const SearchParams ¶ms) const
Perform k-nearest neighbor search.
int radiusSearch(const Matrix< ElementType > &queries, std::vector< std::vector< int > > &indices, std::vector< std::vector< DistanceType > > &dists, float radius, const SearchParams ¶ms) const
int radiusSearchGpu(const Matrix< ElementType > &queries, std::vector< std::vector< int > > &indices, std::vector< std::vector< DistanceType > > &dists, float radius, const SearchParams ¶ms) const
void saveIndex(FILE *stream)
int knnSearchGpu(const Matrix< ElementType > &queries, std::vector< std::vector< int > > &indices, std::vector< std::vector< DistanceType > > &dists, size_t knn, const SearchParams ¶ms) const
@ FLANN_INDEX_KDTREE_SINGLE
static double dist(double x1, double y1, double x2, double y2)
T get_param(const IndexParams ¶ms, std::string name, const T &default_value)
std::map< std::string, any > IndexParams
#define USING_BASECLASS_SYMBOLS
KDTreeCuda3dIndexParams(int leaf_max_size=64)