Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/VecSim/algorithms/brute_force/brute_force.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ class BruteForceIndex : public VecSimIndexAbstract<DistType> {
VecSimQueryParams *queryParams) override;
VecSimQueryResult_List rangeQuery(const void *queryBlob, double radius,
VecSimQueryParams *queryParams) override;
virtual VecSimIndexInfo info() const override;
virtual VecSimInfoIterator *infoIterator() const override;
VecSimIndexDebugInfo debugInfo() const override;
VecSimDebugInfoIterator *debugInfoIterator() const override;
virtual VecSimBatchIterator *newBatchIterator(const void *queryBlob,
VecSimQueryParams *queryParams) const override;
bool preferAdHocSearch(size_t subsetSize, size_t k, bool initial_check) override;
Expand Down Expand Up @@ -329,9 +329,9 @@ BruteForceIndex<DataType, DistType>::rangeQuery(const void *queryBlob, double ra
}

template <typename DataType, typename DistType>
VecSimIndexInfo BruteForceIndex<DataType, DistType>::info() const {
VecSimIndexDebugInfo BruteForceIndex<DataType, DistType>::debugInfo() const {

VecSimIndexInfo info;
VecSimIndexDebugInfo info;
info.algo = VecSimAlgo_BF;
info.bfInfo.dim = this->dim;
info.bfInfo.type = this->vecType;
Expand All @@ -346,11 +346,11 @@ VecSimIndexInfo BruteForceIndex<DataType, DistType>::info() const {
}

template <typename DataType, typename DistType>
VecSimInfoIterator *BruteForceIndex<DataType, DistType>::infoIterator() const {
VecSimIndexInfo info = this->info();
VecSimDebugInfoIterator *BruteForceIndex<DataType, DistType>::debugInfoIterator() const {
VecSimIndexDebugInfo info = this->debugInfo();
// For readability. Update this number when needed.
size_t numberOfInfoFields = 8;
VecSimInfoIterator *infoIterator = new VecSimInfoIterator(numberOfInfoFields);
auto *infoIterator = new VecSimDebugInfoIterator(numberOfInfoFields);

infoIterator->addInfoField(VecSim_InfoField{
.fieldName = VecSimCommonStrings::ALGORITHM_STRING,
Expand Down
14 changes: 7 additions & 7 deletions src/VecSim/algorithms/hnsw/hnsw.h
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,8 @@ class HNSWIndex : public VecSimIndexAbstract<DistType>
inline labelType getEntryPointLabel() const;
inline labelType getExternalLabel(idType internal_id) const;
inline VisitedNodesHandler *getVisitedList() const;
VecSimIndexInfo info() const override;
VecSimInfoIterator *infoIterator() const override;
VecSimIndexDebugInfo debugInfo() const override;
VecSimDebugInfoIterator *debugInfoIterator() const override;
bool preferAdHocSearch(size_t subsetSize, size_t k, bool initial_check) override;
char *getDataByInternalId(idType internal_id) const;
inline linklistsizeint *get_linklist_at_level(idType internal_id, size_t level) const;
Expand Down Expand Up @@ -1539,9 +1539,9 @@ VecSimQueryResult_List HNSWIndex<DataType, DistType>::rangeQuery(const void *que
}

template <typename DataType, typename DistType>
VecSimIndexInfo HNSWIndex<DataType, DistType>::info() const {
VecSimIndexDebugInfo HNSWIndex<DataType, DistType>::debugInfo() const {

VecSimIndexInfo info;
VecSimIndexDebugInfo info;
info.algo = VecSimAlgo_HNSWLIB;
info.hnswInfo.dim = this->dim;
info.hnswInfo.type = this->vecType;
Expand All @@ -1562,11 +1562,11 @@ VecSimIndexInfo HNSWIndex<DataType, DistType>::info() const {
}

template <typename DataType, typename DistType>
VecSimInfoIterator *HNSWIndex<DataType, DistType>::infoIterator() const {
VecSimIndexInfo info = this->info();
VecSimDebugInfoIterator *HNSWIndex<DataType, DistType>::debugInfoIterator() const {
VecSimIndexDebugInfo info = this->debugInfo();
// For readability. Update this number when needed.
size_t numberOfInfoFields = 12;
VecSimInfoIterator *infoIterator = new VecSimInfoIterator(numberOfInfoFields);
auto *infoIterator = new VecSimDebugInfoIterator(numberOfInfoFields);

infoIterator->addInfoField(VecSim_InfoField{
.fieldName = VecSimCommonStrings::ALGORITHM_STRING,
Expand Down
9 changes: 5 additions & 4 deletions src/VecSim/info_iterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,23 @@

#include "info_iterator_struct.h"

extern "C" size_t VecSimInfoIterator_NumberOfFields(VecSimInfoIterator *infoIterator) {
extern "C" size_t VecSimDebugInfoIterator_NumberOfFields(VecSimDebugInfoIterator *infoIterator) {
return infoIterator->numberOfFields();
}

extern "C" bool VecSimInfoIterator_HasNextField(VecSimInfoIterator *infoIterator) {
extern "C" bool VecSimDebugInfoIterator_HasNextField(VecSimDebugInfoIterator *infoIterator) {
return infoIterator->hasNext();
}

extern "C" VecSim_InfoField *VecSimInfoIterator_NextField(VecSimInfoIterator *infoIterator) {
extern "C" VecSim_InfoField *
VecSimDebugInfoIterator_NextField(VecSimDebugInfoIterator *infoIterator) {
if (infoIterator->hasNext()) {
return infoIterator->next();
}
return NULL;
}

extern "C" void VecSimInfoIterator_Free(VecSimInfoIterator *infoIterator) {
extern "C" void VecSimDebugInfoIterator_Free(VecSimDebugInfoIterator *infoIterator) {
if (infoIterator != NULL) {
delete infoIterator;
}
Expand Down
11 changes: 6 additions & 5 deletions src/VecSim/info_iterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#pragma once
#include <stdlib.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
Expand All @@ -15,7 +16,7 @@ extern "C" {
* the type VecSim_InfoFieldType. This struct exposes an iterator-like API to iterate over the
* information fields.
*/
typedef struct VecSimInfoIterator VecSimInfoIterator;
typedef struct VecSimDebugInfoIterator VecSimDebugInfoIterator;

typedef enum {
INFOFIELD_STRING,
Expand Down Expand Up @@ -49,7 +50,7 @@ typedef struct {
* @param infoIterator Given info iterator.
* @return size_t Number of fields.
*/
size_t VecSimInfoIterator_NumberOfFields(VecSimInfoIterator *infoIterator);
size_t VecSimDebugInfoIterator_NumberOfFields(VecSimDebugInfoIterator *infoIterator);

/**
* @brief Returns if the fields iterator is depleted.
Expand All @@ -58,22 +59,22 @@ size_t VecSimInfoIterator_NumberOfFields(VecSimInfoIterator *infoIterator);
* @return true Iterator is not depleted.
* @return false Otherwise.
*/
bool VecSimInfoIterator_HasNextField(VecSimInfoIterator *infoIterator);
bool VecSimDebugInfoIterator_HasNextField(VecSimDebugInfoIterator *infoIterator);

/**
* @brief Returns a pointer to the next info field.
*
* @param infoIterator Given info iterator.
* @return VecSim_InfoField* A pointer to the next info field.
*/
VecSim_InfoField *VecSimInfoIterator_NextField(VecSimInfoIterator *infoIterator);
VecSim_InfoField *VecSimDebugInfoIterator_NextField(VecSimDebugInfoIterator *infoIterator);

/**
* @brief Free an info iterator.
*
* @param infoIterator Given info iterator.
*/
void VecSimInfoIterator_Free(VecSimInfoIterator *infoIterator);
void VecSimDebugInfoIterator_Free(VecSimDebugInfoIterator *infoIterator);

#ifdef __cplusplus
}
Expand Down
7 changes: 4 additions & 3 deletions src/VecSim/info_iterator_struct.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
#include "info_iterator.h"
#include "VecSim/utils/arr_cpp.h"

struct VecSimInfoIterator {
struct VecSimDebugInfoIterator {
private:
VecSim_InfoField *fields;
size_t currentIndex;

public:
VecSimInfoIterator(size_t len) : fields(array_new<VecSim_InfoField>(len)), currentIndex(0) {}
VecSimDebugInfoIterator(size_t len)
: fields(array_new<VecSim_InfoField>(len)), currentIndex(0) {}

inline void addInfoField(VecSim_InfoField infoField) {
this->fields = array_append(this->fields, infoField);
Expand All @@ -27,5 +28,5 @@ struct VecSimInfoIterator {

inline size_t numberOfFields() { return array_len(this->fields); }

virtual ~VecSimInfoIterator() { array_free(this->fields); }
virtual ~VecSimDebugInfoIterator() { array_free(this->fields); }
};
14 changes: 10 additions & 4 deletions src/VecSim/vec_sim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ extern "C" VecSimResolveCode VecSimIndex_ResolveParams(VecSimIndex *index, VecSi
if (!qparams || (!rparams && (paramNum != 0))) {
return VecSimParamResolverErr_NullParam;
}
VecSimAlgo index_type = index->info().algo;
VecSimAlgo index_type = index->debugInfo().algo;
bzero(qparams, sizeof(VecSimQueryParams));
auto res = VecSimParamResolver_OK;
for (int i = 0; i < paramNum; i++) {
Expand Down Expand Up @@ -256,10 +256,16 @@ extern "C" void VecSimIndex_Free(VecSimIndex *index) {
delete index;
}

extern "C" VecSimIndexInfo VecSimIndex_Info(VecSimIndex *index) { return index->info(); }
extern "C" VecSimIndexDebugInfo VecSimIndex_DebugInfo(VecSimIndex *index) {
return index->debugInfo();
}

extern "C" VecSimDebugInfoIterator *VecSimIndex_DebugInfoIterator(VecSimIndex *index) {
return index->debugInfoIterator();
}

extern "C" VecSimInfoIterator *VecSimIndex_InfoIterator(VecSimIndex *index) {
return index->infoIterator();
extern "C" VecSimIndexStatsInfo VecSimIndex_StatsInfo(VecSimIndex *index) {
return index->statisticInfo();
}

extern "C" VecSimBatchIterator *VecSimBatchIterator_New(VecSimIndex *index, const void *queryBlob,
Expand Down
13 changes: 10 additions & 3 deletions src/VecSim/vec_sim.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,15 +146,22 @@ VecSimQueryResult_List VecSimIndex_RangeQuery(VecSimIndex *index, const void *qu
* @param index the index to return its info.
* @return Index general and specific meta-data.
*/
VecSimIndexInfo VecSimIndex_Info(VecSimIndex *index);
VecSimIndexDebugInfo VecSimIndex_DebugInfo(VecSimIndex *index);

/**
* @brief Return statistics information.
* @param index the index to return its info.
* @return Index statistic data.
*/
VecSimIndexStatsInfo VecSimIndex_StatsInfo(VecSimIndex *index);

/**
* @brief Returns an info iterator for generic reply purposes.
*
* @param index this index to return its info.
* @return VecSimInfoIterator* An iterable containing the index general and specific meta-data.
* @return VecSimDebugInfoIterator* An iterable containing the index general and specific meta-data.
*/
VecSimInfoIterator *VecSimIndex_InfoIterator(VecSimIndex *index);
VecSimDebugInfoIterator *VecSimIndex_DebugInfoIterator(VecSimIndex *index);

/**
* @brief Create a new batch iterator for a specific index, for a specific query vector,
Expand Down
12 changes: 10 additions & 2 deletions src/VecSim/vec_sim_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,15 @@ typedef struct {
} VecSimQueryParams;

/**
* @brief Index information. Mainly used for debug/testing.
* Index info for statistics - a thin and efficient (no locks, no calculations) info. Can be used in
* production without worrying about performance
*/
typedef struct {
size_t memory;
} VecSimIndexStatsInfo;

/**
* @brief Index information. Should only be used for debug/testing.
*
*/
typedef struct {
Expand Down Expand Up @@ -175,7 +183,7 @@ typedef struct {
} bfInfo;
};
VecSimAlgo algo; // Algorithm being used.
} VecSimIndexInfo;
} VecSimIndexDebugInfo;

// Memory function declarations.
typedef void *(*allocFn)(size_t n);
Expand Down
5 changes: 5 additions & 0 deletions src/VecSim/vec_sim_index.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,9 @@ struct VecSimIndexAbstract : public VecSimIndexInterface {
inline size_t GetDim() const { return dim; }
inline void setLastSearchMode(VecSearchMode mode) override { this->last_mode = mode; }
inline bool isMultiValue() const { return isMulti; }
virtual inline VecSimIndexStatsInfo statisticInfo() const override {
return VecSimIndexStatsInfo{
.memory = static_cast<size_t>(this->getAllocationSize()),
};
}
};
13 changes: 10 additions & 3 deletions src/VecSim/vec_sim_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,21 @@ struct VecSimIndexInterface : public VecsimBaseObject {
*
* @return Index general and specific meta-data.
*/
virtual VecSimIndexInfo info() const = 0;
virtual VecSimIndexDebugInfo debugInfo() const = 0;

/**
* @brief Return index statistic information.
*
* @return Index general and specific statistic data (for quick and lock-less retrieval)
*/
virtual VecSimIndexStatsInfo statisticInfo() const = 0;

/**
* @brief Returns an index information in an iterable structure.
*
* @return VecSimInfoIterator Index general and specific meta-data.
* @return VecSimDebugInfoIterator Index general and specific meta-data.
*/
virtual VecSimInfoIterator *infoIterator() const = 0;
virtual VecSimDebugInfoIterator *debugInfoIterator() const = 0;

/**
* @brief Create a new batch iterator for a specific index, for a specific query vector,
Expand Down
12 changes: 6 additions & 6 deletions tests/benchmark/bm_batch_iterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ void BM_BatchIterator<index_type_t>::RunBatchedSearch_HNSW(benchmark::State &st,
}
st.PauseTiming();
// Update the memory delta as a result of using the batch iterator.
size_t curr_memory = VecSimIndex_Info(INDICES.at(VecSimAlgo_HNSWLIB)).hnswInfo.memory;
size_t curr_memory = VecSimIndex_StatsInfo(INDICES.at(VecSimAlgo_HNSWLIB)).memory;
memory_delta += (double)(curr_memory - index_memory);
VecSimBatchIterator_Free(batchIterator);

Expand All @@ -76,7 +76,7 @@ void BM_BatchIterator<index_type_t>::BF_FixedBatchSize(benchmark::State &st) {
size_t batch_size = st.range(0);
size_t num_batches = st.range(1);
size_t iter = 0;
size_t index_memory = VecSimIndex_Info(INDICES[VecSimAlgo_BF]).bfInfo.memory;
size_t index_memory = VecSimIndex_StatsInfo(INDICES[VecSimAlgo_BF]).memory;
double memory_delta = 0.0;

for (auto _ : st) {
Expand All @@ -91,7 +91,7 @@ void BM_BatchIterator<index_type_t>::BF_FixedBatchSize(benchmark::State &st) {
break;
}
}
size_t curr_memory = VecSimIndex_Info(INDICES[VecSimAlgo_BF]).bfInfo.memory;
size_t curr_memory = VecSimIndex_StatsInfo(INDICES[VecSimAlgo_BF]).memory;
memory_delta += (double)(curr_memory - index_memory);
VecSimBatchIterator_Free(batchIterator);
iter++;
Expand Down Expand Up @@ -159,7 +159,7 @@ void BM_BatchIterator<index_type_t>::HNSW_FixedBatchSize(benchmark::State &st) {
size_t total_res_num = num_batches * batch_size;
size_t iter = 0;
size_t correct = 0;
size_t index_memory = VecSimIndex_Info(INDICES[VecSimAlgo_HNSWLIB]).hnswInfo.memory;
size_t index_memory = VecSimIndex_StatsInfo(INDICES[VecSimAlgo_HNSWLIB]).memory;
double memory_delta = 0.0;

for (auto _ : st) {
Expand All @@ -178,7 +178,7 @@ void BM_BatchIterator<index_type_t>::HNSW_VariableBatchSize(benchmark::State &st
size_t total_res_num;
size_t iter = 0;
size_t correct = 0;
size_t index_memory = VecSimIndex_Info(INDICES[VecSimAlgo_HNSWLIB]).hnswInfo.memory;
size_t index_memory = VecSimIndex_StatsInfo(INDICES[VecSimAlgo_HNSWLIB]).memory;
double memory_delta = 0.0;

for (auto _ : st) {
Expand All @@ -197,7 +197,7 @@ void BM_BatchIterator<index_type_t>::HNSW_BatchesToAdhocBF(benchmark::State &st)
size_t total_res_num;
size_t iter = 0;
size_t correct = 0;
size_t index_memory = VecSimIndex_Info(INDICES[VecSimAlgo_HNSWLIB]).hnswInfo.memory;
size_t index_memory = VecSimIndex_StatsInfo(INDICES[VecSimAlgo_HNSWLIB]).memory;
double memory_delta = 0.0;

for (auto _ : st) {
Expand Down
4 changes: 2 additions & 2 deletions tests/benchmark/bm_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ void BM_VecSimCommon<index_type_t>::Memory_FLAT(benchmark::State &st, unsigned s
// Do nothing...
}
st.counters["memory"] =
(double)VecSimIndex_Info(INDICES[VecSimAlgo_BF + index_offset]).bfInfo.memory;
(double)VecSimIndex_StatsInfo(INDICES[VecSimAlgo_BF + index_offset]).memory;
}
template <typename index_type_t>
void BM_VecSimCommon<index_type_t>::Memory_HNSW(benchmark::State &st, unsigned short index_offset) {
Expand All @@ -64,7 +64,7 @@ void BM_VecSimCommon<index_type_t>::Memory_HNSW(benchmark::State &st, unsigned s
// Do nothing...
}
st.counters["memory"] =
(double)VecSimIndex_Info(INDICES[VecSimAlgo_HNSWLIB + index_offset]).hnswInfo.memory;
(double)VecSimIndex_StatsInfo(INDICES[VecSimAlgo_HNSWLIB + index_offset]).memory;
}

// TopK search BM
Expand Down
Loading
Loading