Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
KnnIndex.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2024 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10#include "open3d/Macro.h"
11#include "open3d/core/Dtype.h"
12#include "open3d/core/Tensor.h"
16
17namespace open3d {
18namespace core {
19namespace nns {
20
21#ifdef BUILD_CUDA_MODULE
22template <class T, class TIndex>
23void KnnSearchCUDA(const Tensor& points,
24 const Tensor& points_row_splits,
25 const Tensor& queries,
26 const Tensor& queries_row_splits,
27 int knn,
28 Tensor& neighbors_index,
29 Tensor& neighbors_row_splits,
30 Tensor& neighbors_distance);
31#endif
32
33#ifdef BUILD_SYCL_MODULE
47template <class T, class TIndex>
48OPEN3D_API void KnnSearchSYCL(const Tensor& points,
49 const Tensor& points_row_splits,
50 const Tensor& queries,
51 const Tensor& queries_row_splits,
52 int knn,
53 Tensor& neighbors_index,
54 Tensor& neighbors_row_splits,
55 Tensor& neighbors_distance,
56 int64_t tile_bytes,
57 int64_t max_tile_queries = 2048,
58 int64_t tile_points_alignment = 128,
59 bool force_addmm_path = false);
60#endif
61
62class KnnIndex : public NNSIndex {
63public:
64 KnnIndex();
65
72 KnnIndex(const Tensor& dataset_points);
73 KnnIndex(const Tensor& dataset_points, const Dtype& index_dtype);
74
83 KnnIndex(const Tensor& dataset_points,
84 const Dtype& index_dtype,
85 int64_t tile_bytes);
86
87 ~KnnIndex();
88 KnnIndex(const KnnIndex&) = delete;
89 KnnIndex& operator=(const KnnIndex&) = delete;
90
91public:
92 bool SetTensorData(const Tensor& dataset_points,
93 const Dtype& index_dtype = core::Int64) override;
94 bool SetTensorData(const Tensor& dataset_points,
95 const Tensor& points_row_splits,
96 const Dtype& index_dtype = core::Int64);
97 bool SetTensorData(const Tensor& dataset_points,
98 double radius,
99 const Dtype& index_dtype = core::Int64) override {
100 utility::LogError(
101 "[KnnIndex::SetTensorData with radius not implemented.");
102 }
103
104 std::pair<Tensor, Tensor> SearchKnn(const Tensor& query_points,
105 int knn) const override;
106
107 std::pair<Tensor, Tensor> SearchKnn(const Tensor& query_points,
108 const Tensor& queries_row_splits,
109 int knn) const;
110
111 std::tuple<Tensor, Tensor, Tensor> SearchRadius(const Tensor& query_points,
112 const Tensor& radii,
113 bool sort) const override {
114 utility::LogError("KnnIndex::SearchRadius not implemented.");
115 }
116
117 std::tuple<Tensor, Tensor, Tensor> SearchRadius(const Tensor& query_points,
118 const double radius,
119 bool sort) const override {
120 utility::LogError("KnnIndex::SearchRadius not implemented.");
121 }
122
123 std::tuple<Tensor, Tensor, Tensor> SearchHybrid(
124 const Tensor& query_points,
125 const double radius,
126 const int max_knn) const override {
127 utility::LogError("KnnIndex::SearchHybrid not implemented.");
128 }
129
130protected:
134};
135
136} // namespace nns
137} // namespace core
138} // namespace open3d
#define OPEN3D_API
Definition Macro.h:34
Definition Dtype.h:20
Definition Tensor.h:32
Definition KnnIndex.h:62
std::pair< Tensor, Tensor > SearchKnn(const Tensor &query_points, int knn) const override
Definition KnnIndex.cpp:97
std::tuple< Tensor, Tensor, Tensor > SearchRadius(const Tensor &query_points, const double radius, bool sort) const override
Definition KnnIndex.h:117
KnnIndex(const KnnIndex &)=delete
KnnIndex()
Definition KnnIndex.cpp:19
std::tuple< Tensor, Tensor, Tensor > SearchHybrid(const Tensor &query_points, const double radius, const int max_knn) const override
Definition KnnIndex.h:123
bool SetTensorData(const Tensor &dataset_points, const Dtype &index_dtype=core::Int64) override
Definition KnnIndex.cpp:38
int64_t tile_bytes_
Distance tile budget for SYCL (bytes). See kSYCLKnnDefaultTileBytes.
Definition KnnIndex.h:133
KnnIndex & operator=(const KnnIndex &)=delete
Tensor points_row_splits_
Definition KnnIndex.h:131
~KnnIndex()
Definition KnnIndex.cpp:36
bool SetTensorData(const Tensor &dataset_points, double radius, const Dtype &index_dtype=core::Int64) override
Definition KnnIndex.h:97
std::tuple< Tensor, Tensor, Tensor > SearchRadius(const Tensor &query_points, const Tensor &radii, bool sort) const override
Definition KnnIndex.h:111
Definition NNSIndex.h:21
Shared types and SYCL nearest-neighbor search tuning defaults.
int points
Definition FilePCD.cpp:55
void KnnSearchSYCL(const Tensor &points, const Tensor &points_row_splits, const Tensor &queries, const Tensor &queries_row_splits, int knn, Tensor &neighbors_index, Tensor &neighbors_row_splits, Tensor &neighbors_distance, int64_t tile_bytes, int64_t max_tile_queries, int64_t tile_points_alignment, bool force_addmm_path)
Definition KnnSearchOpsSYCL.cpp:285
constexpr int64_t kSYCLKnnDefaultTileBytes
SYCL NNS defaults for KnnIndex and FixedRadiusIndex constructors.
Definition NeighborSearchCommon.h:64
const Dtype Int64
Definition Dtype.cpp:47
Definition PinholeCameraIntrinsic.cpp:16