MCPcopy Create free account
hub / github.com/NGT-labs/NGT / parallelSearchInOneStep

Method parallelSearchInOneStep

python/src/ngtpy.cpp:919–961  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

917 }
918
919 void parallelSearchInOneStep(
920 py::array_t<float> queries,
921 BatchResults &results,
922 size_t size
923 ) {
924 const py::buffer_info &qinfo = queries.request();
925 const std::vector<long int> &qshape = qinfo.shape;
926 auto nOfQueries = qshape[0];
927 size_t dimension = qshape[1];
928 size_t pseudoDimension = QBG::Index::getQuantizer().globalCodebookIndex.getObjectSpace().getPaddedDimension();
929 auto *queryPtr = static_cast<float*>(qinfo.ptr);
930
931 size = size > 0 ? size : defaultNumOfSearchObjects;
932
933 results.results.clear();
934 results.resultList.clear();
935 results.results.resize(nOfQueries);
936
937 size_t exactResultSize = 0;
938 if (defaultResultExpansion >= 1.0) {
939 size = static_cast<float>(size) * defaultResultExpansion;
940 exactResultSize = size;
941 }
942#pragma omp parallel for schedule(dynamic)
943 for (int idx = 0; idx < nOfQueries; idx++) {
944 float *qptr = queryPtr + idx * dimension;
945 vector<float> query(pseudoDimension, 0);
946 memcpy(query.data(), qptr, dimension * sizeof(float));
947 QBG::SearchContainer sc;
948 sc.setObjectVector(query);
949 sc.setSize(size);
950 sc.setExactResultSize(exactResultSize);
951 sc.setEpsilon(defaultEpsilon);
952 sc.setBlobEpsilon(defaultBlobEpsilon);
953 sc.setEdgeSize(defaultEdgeSize);
954 sc.setGraphExplorationSize(defaultExplorationSize);
955 QBG::Index::search(sc);
956 results.results[idx] = std::move(sc.getWorkingResult());
957 //QBG::Index::getQuantizer().globalCodebookIndex.deleteObject(queryObject);
958 }
959 results.size = results.results.size();
960 return;
961 }
962
963 void batchSearch(
964 py::array_t<float> queries,

Callers

nothing calls this directly

Calls 13

getPaddedDimensionMethod · 0.80
dataMethod · 0.80
setObjectVectorMethod · 0.80
setSizeMethod · 0.80
setExactResultSizeMethod · 0.80
setEpsilonMethod · 0.80
setBlobEpsilonMethod · 0.80
setEdgeSizeMethod · 0.80
searchFunction · 0.50
clearMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected