Skip to content

Commit e7f0e71

Browse files
committed
refactor(distance): distance naming convention and cpu namespace
1 parent f11efb1 commit e7f0e71

42 files changed

Lines changed: 347 additions & 319 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cpp/bench/include/benchmark.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace deglib::benchmark {
3232
static uint64_t compute_linear_search_baseline(const deglib::FeatureRepository& base_repository,
3333
const deglib::distances::Metric metric,
3434
const uint32_t sample_size = 100,
35-
const deglib::distances::InstructionSet instruction = deglib::distances::InstructionSet::Auto) {
35+
const deglib::cpu::InstructionSet instruction = deglib::cpu::InstructionSet::Auto) {
3636
const auto dims = base_repository.dims();
3737
const auto base_size = base_repository.size();
3838
const auto feature_space = deglib::distances::FloatSpace(dims, metric, instruction);

cpp/bench/include/build.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ inline deglib::graph::SizeBoundedGraph create_random_graph(const deglib::StaticF
2828
const uint8_t k,
2929
const uint32_t max_size = 0,
3030
const uint32_t scale = 1,
31-
const deglib::distances::InstructionSet instruction = deglib::distances::InstructionSet::Auto) {
31+
const deglib::cpu::InstructionSet instruction = deglib::cpu::InstructionSet::Auto) {
3232
log("Build a random EG{}\n", k);
3333

3434
const auto dims = repository.dims();
@@ -127,7 +127,7 @@ inline void create_graph(const deglib::StaticFeatureRepository& repository,
127127
const bool use_rng = true,
128128
const uint32_t scale = 1,
129129
const bool use_path_verification = false,
130-
const deglib::distances::InstructionSet instruction = deglib::distances::InstructionSet::Auto) {
130+
const deglib::cpu::InstructionSet instruction = deglib::cpu::InstructionSet::Auto) {
131131
auto rnd = std::mt19937(7);
132132
const uint32_t swap_tries = 0;
133133
const uint32_t additional_swap_tries = 0;

cpp/bench/include/dataset.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ struct DatasetInfo {
105105
};
106106

107107
inline DatasetInfo make_dataset_info(const DatasetName& ds) {
108-
DatasetInfo info{ds, {}, deglib::distances::Metric::L2, 0, 0, 0, 1, 2, {}, {}, {}, {}, {}, {}};
108+
DatasetInfo info{ds, {}, deglib::distances::Metric::FP32_L2, 0, 0, 0, 1, 2, {}, {}, {}, {}, {}, {}};
109109

110110
std::string name = ds.name();
111111

cpp/bench/src/bench_dynamic_data.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,16 +95,16 @@ void print_help(const char* program_name) {
9595
log(" Data is loaded from / saved to DATA_PATH defined at build time (e.g. \"{}\")\n", DATA_PATH);
9696
}
9797

98-
static deglib::distances::InstructionSet parse_instruction_set(const std::string& str) {
99-
if (str == "auto" || str == "Auto") return deglib::distances::InstructionSet::Auto;
100-
if (str == "scalar" || str == "Scalar") return deglib::distances::InstructionSet::Scalar;
101-
if (str == "avx2" || str == "AVX2") return deglib::distances::InstructionSet::AVX2;
102-
if (str == "avx512" || str == "AVX512") return deglib::distances::InstructionSet::AVX512;
98+
static deglib::cpu::InstructionSet parse_instruction_set(const std::string& str) {
99+
if (str == "auto" || str == "Auto") return deglib::cpu::InstructionSet::Auto;
100+
if (str == "scalar" || str == "Scalar") return deglib::cpu::InstructionSet::Scalar;
101+
if (str == "avx2" || str == "AVX2") return deglib::cpu::InstructionSet::AVX2;
102+
if (str == "avx512" || str == "AVX512") return deglib::cpu::InstructionSet::AVX512;
103103
log("Unknown instruction set '{}', falling back to Auto\n", str);
104-
return deglib::distances::InstructionSet::Auto;
104+
return deglib::cpu::InstructionSet::Auto;
105105
}
106106

107-
void run_dynamic_benchmark(const DatasetName& ds_name, const std::filesystem::path& data_path, bool force_rebuild, deglib::distances::InstructionSet instruction) {
107+
void run_dynamic_benchmark(const DatasetName& ds_name, const std::filesystem::path& data_path, bool force_rebuild, deglib::cpu::InstructionSet instruction) {
108108
Dataset ds(ds_name, data_path);
109109
auto config = get_dataset_config(ds_name);
110110

@@ -189,7 +189,7 @@ int main(int argc, char* argv[]) {
189189
const auto data_path = std::filesystem::path(DATA_PATH);
190190
DatasetName ds_name = DatasetName::AUDIO;
191191
bool force_rebuild = false;
192-
deglib::distances::InstructionSet instruction = deglib::distances::InstructionSet::AVX2;
192+
deglib::cpu::InstructionSet instruction = deglib::cpu::InstructionSet::AVX2;
193193

194194
for (int i = 1; i < argc; ++i) {
195195
std::string arg = argv[i];

cpp/bench/src/bench_static_data.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,16 @@ void print_help(const char* program_name) {
9494
log(" Data is loaded from / saved to DATA_PATH defined at build time (e.g. \"{}\")\n", DATA_PATH);
9595
}
9696

97-
static deglib::distances::InstructionSet parse_instruction_set(const std::string& str) {
98-
if (str == "auto" || str == "Auto") return deglib::distances::InstructionSet::Auto;
99-
if (str == "scalar" || str == "Scalar") return deglib::distances::InstructionSet::Scalar;
100-
if (str == "avx2" || str == "AVX2") return deglib::distances::InstructionSet::AVX2;
101-
if (str == "avx512" || str == "AVX512") return deglib::distances::InstructionSet::AVX512;
97+
static deglib::cpu::InstructionSet parse_instruction_set(const std::string& str) {
98+
if (str == "auto" || str == "Auto") return deglib::cpu::InstructionSet::Auto;
99+
if (str == "scalar" || str == "Scalar") return deglib::cpu::InstructionSet::Scalar;
100+
if (str == "avx2" || str == "AVX2") return deglib::cpu::InstructionSet::AVX2;
101+
if (str == "avx512" || str == "AVX512") return deglib::cpu::InstructionSet::AVX512;
102102
log("Unknown instruction set '{}', falling back to Auto\n", str);
103-
return deglib::distances::InstructionSet::Auto;
103+
return deglib::cpu::InstructionSet::Auto;
104104
}
105105

106-
void run_static_benchmark(const DatasetName& ds_name, const std::filesystem::path& data_path, bool force_rebuild, deglib::distances::InstructionSet instruction, uint32_t build_threads) {
106+
void run_static_benchmark(const DatasetName& ds_name, const std::filesystem::path& data_path, bool force_rebuild, deglib::cpu::InstructionSet instruction, uint32_t build_threads) {
107107
Dataset ds(ds_name, data_path);
108108
auto config = get_dataset_config(ds_name);
109109
config.build_threads = build_threads;
@@ -198,7 +198,7 @@ int main(int argc, char* argv[]) {
198198
const auto data_path = std::filesystem::path(DATA_PATH);
199199
DatasetName ds_name = DatasetName::DEEP1M;
200200
bool force_rebuild = false;
201-
deglib::distances::InstructionSet instruction = deglib::distances::InstructionSet::AVX2;
201+
deglib::cpu::InstructionSet instruction = deglib::cpu::InstructionSet::AVX2;
202202
uint32_t build_threads = 1;
203203

204204
for (int i = 1; i < argc; ++i) {

cpp/benchmark/src/deglib_build_bench.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ int main() {
682682
// const auto graph_file = (data_path / "deg" / "crEG" / "256D_L2_K20_AddK40Eps0.1_schemeD.deg").string();
683683
// const auto opt_graph_file = (data_path / "deg" / "crEG" / "256D_L2_K20_AddK40Eps0.1_schemeD_OptK30Eps0.001Path5_it200000.deg").string();
684684
// const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::LowLID : deglib::builder::OptimizationTarget::StreamingData;
685-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2;
685+
// const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
686686
//
687687
// if(std::filesystem::exists(graph_file.c_str()) == false) {
688688
// create_graph(repository_file, DataStreamType::AddAll, graph_file, metric, lid, 20, 40, 0.1f, 30, 0.001f, 5, 1); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt, threads
@@ -699,7 +699,7 @@ int main() {
699699
// const auto graph_file = (data_path / "deg" / "crEG" / "420D_L2_K30_AddK30Eps0.1_schemeC.deg").string();
700700
// const auto opt_graph_file = (data_path / "deg" / "crEG" / "420D_L2_K30_AddK30Eps0.1_schemeC_OptK30Eps0.001Path5_it200000.deg").string();
701701
// const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::HighLID : deglib::builder::OptimizationTarget::StreamingData;
702-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2;
702+
// const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
703703
//
704704
// if(std::filesystem::exists(graph_file.c_str()) == false)
705705
// create_graph(repository_file, DataStreamType::AddAll, graph_file, metric, lid, 30, 30, 0.1f, 30, 0.001f, 5, 1); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt, threads
@@ -715,7 +715,7 @@ int main() {
715715
// const auto graph_file = (data_path / "deg" / "192D_L2_K20_AddK40Eps0.1_schemeD.deg").string();
716716
// const auto opt_graph_file = (data_path / "deg" / "192D_L2_K20_AddK40Eps0.1_schemeD_OptK20Eps0.001Path5_it20000.deg").string();
717717
// const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::LowLID : deglib::builder::OptimizationTarget::StreamingData;
718-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2;
718+
// const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
719719

720720
// if(std::filesystem::exists(graph_file.c_str()) == false) {
721721
// create_graph(repository_file, DataStreamType::AddAll, graph_file, metric, lid, 20, 40, 0.1f, 20, 0.001f, 5); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt
@@ -732,7 +732,7 @@ int main() {
732732
// const auto graph_file = (data_path / "deg" / "1369D_L2_K30_AddK60Eps0.1_schemeD.deg").string();
733733
// const auto opt_graph_file = (data_path / "deg" / "1369D_L2_K30_AddK60Eps0.1_schemeD_OptK30Eps0.001Path5_it400000.deg").string();
734734
// const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::LowLID : deglib::builder::OptimizationTarget::StreamingData;
735-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2;
735+
// const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
736736

737737
// if(std::filesystem::exists(graph_file.c_str()) == false) {
738738
// create_graph(repository_file, DataStreamType::AddAll, graph_file, metric, lid, 30, 60, 0.1f, 30, 0.001f, 5); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt
@@ -750,7 +750,7 @@ int main() {
750750
// const auto graph_file = (data_path / "deg" / "crEG" / "scaling" / "96D_L2_K30_AddK60Eps0.1_schemeD_1000k.deg").string();
751751
// const auto opt_graph_file = (data_path / "deg" / "dynamic" / "96D_L2_K30_AddK60Eps0.1_add500k_schemeD_OptAfterwardsWith_SwapK30-0StepEps0.001LowPath5_it100000.deg").string();
752752
// const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::LowLID : deglib::builder::OptimizationTarget::StreamingData;
753-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2;
753+
// const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
754754

755755
// if(std::filesystem::exists(graph_file.c_str()) == false) {
756756
// create_graph(repository_file, data_stream_type, graph_file, metric, lid, 30, 60, 0.1f, 30, 0.001f, 5, 1); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt, threads
@@ -785,7 +785,7 @@ int main() {
785785
// const auto graph_file = (data_path / "deg" / "crEG" / "960D_L2_K30_AddK30Eps0.1_schemeC.deg").string();
786786
// const auto opt_graph_file = (data_path / "deg" / "crEG" / "960D_L2_K30_AddK60Eps0.1_schemeD_OptAfterwardsWith_SwapK30-0StepEps0.001LowPath5_it100000.deg").string();
787787
// const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::HighLID : deglib::builder::OptimizationTarget::StreamingData;
788-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2;
788+
// const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
789789
//
790790
// if(std::filesystem::exists(graph_file.c_str()) == false) {
791791
// create_graph(repository_file, data_stream_type, graph_file, metric, lid, 30, 30, 0.1f, 30, 0.001f, 5, 1); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt, threads
@@ -804,7 +804,7 @@ int main() {
804804
// //const auto graph_file = (data_path / "deg" / "300D_L2_K30_AddK30Eps0.2High.deg").string();
805805
// const auto opt_graph_file = (data_path / "deg" / "crEG" / "300D_L2_K30_AddK60Eps0.1_schemeD_OptAfterwardsWith_SwapK30-0StepEps0.001LowPath5_it100000.deg").string();
806806
// const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::HighLID : deglib::builder::OptimizationTarget::StreamingData;
807-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2;
807+
// const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
808808
//
809809
// if(std::filesystem::exists(graph_file.c_str()) == false) {
810810
// create_graph(repository_file, data_stream_type, graph_file, metric, lid, 30, 60, 0.1f, 30, 0.001f, 5, 1); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt, threads
@@ -823,7 +823,7 @@ int main() {
823823
// const auto reduce_graph_file = (data_path / "deg" / "online" / "128D_L2_K30_AddK60Eps0.2High_SwapK30-0StepEps0.001LowPath5Rnd0+0_improveEvery2ndNonPerfectEdge.deg").string();
824824
// const auto opt_graph_file = (data_path / "deg" / "dynamic" / "128D_L2_K30_AddK60Eps0.1_add500k_schemeD_OptAfterwardsWith_SwapK30-0StepEps0.001LowPath5_it100000.deg").string();
825825
const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::LowLID : deglib::builder::OptimizationTarget::StreamingData;
826-
const deglib::distances::Metric metric = deglib::distances::Metric::L2;
826+
const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
827827

828828
if(std::filesystem::exists(graph_file.c_str()) == false) {
829829
create_random_exploration_graph(repository_file, graph_file, metric, 30, 100000);
@@ -860,7 +860,7 @@ int main() {
860860
// const auto gt_file = (data_path / "SIFT100K" / (data_stream_type == AddAll ? "sift_groundtruth.ivecs" : "sift_groundtruth_base500000.ivecs" )).string();
861861
// const auto graph_file = (data_path / "deg" / "128D_L2_K16_AddK32Eps0.1_schemeLow.deg").string();
862862
// const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::LowLID : deglib::builder::OptimizationTarget::StreamingData;
863-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2;
863+
// const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
864864

865865
// if(std::filesystem::exists(graph_file.c_str()) == false)
866866
// create_graph(repository_file, data_stream_type, graph_file, metric, lid, 16, 32, 0.1f, 0, 0, 0, 1); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt, threads
@@ -878,7 +878,7 @@ int main() {
878878
const auto graph_file = (data_path / "deg" / "384D_uint8_L2_K16_AddK32Eps0.05_LowLID.deg").string();
879879
const auto opt_graph_file = (data_path / "deg" / "384D_uint8_L2_K16_AddK32Eps0.05_LowLID_opt500k.deg").string();
880880
const auto lid = deglib::builder::OptimizationTarget::LowLID;
881-
const deglib::distances::Metric metric = deglib::distances::Metric::L2_Uint8;
881+
const deglib::distances::Metric metric = deglib::distances::Metric::Uint8_L2;
882882
883883
if(std::filesystem::exists(graph_file.c_str()) == false)
884884
create_graph(repository_file, data_stream_type, graph_file, metric, lid, 16, 32, 0.1f, 0, 0, 0, 8); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt, threads
@@ -897,7 +897,7 @@ int main() {
897897
// // const auto graph_file = (data_path / "deg" / "dynamic" / "100D_L2_K30_AddK60Eps0.1_add500k_schemeC.deg").string();
898898
// // const auto opt_graph_file = (data_path / "deg" / "dynamic" / "100D_L2_K30_AddK60Eps0.1_add500k_schemeC_OptAfterwardsWith_SwapK30-0StepEps0.001LowPath5_it1000000.deg").string();
899899
// // const auto lid = (data_stream_type == AddAll || data_stream_type == AddHalf) ? deglib::builder::OptimizationTarget::HighLID : deglib::builder::OptimizationTarget::StreamingData;
900-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2;
900+
// const deglib::distances::Metric metric = deglib::distances::Metric::FP32_L2;
901901

902902
//if(std::filesystem::exists(graph_file.c_str()) == false) {
903903
// create_graph(repository_file, data_stream_type, graph_file, metric, lid, 30, 60, 0.1f, 0, 0, 0, 1); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt, thread_count
@@ -942,7 +942,7 @@ int main() {
942942
// const auto opt_graph_file = (data_path / "deg" / "300k" / "768D_L2_K30_AddK60Eps0.1_schemeD_t1_512byte_200kAll.deg").string();
943943
// const auto mrng_graph_file = (data_path / "deg" / "300k" / "768D_L2_K30_AddK60Eps0.1_schemeD_t12_512byte_removedNonMRNG.deg").string();
944944
// const auto lid = deglib::builder::OptimizationTarget::LowLID; // low=schemeD, high=schemeC
945-
// const deglib::distances::Metric metric = deglib::distances::Metric::L2_Uint8;
945+
// const deglib::distances::Metric metric = deglib::distances::Metric::Uint8_L2;
946946

947947
// if(std::filesystem::exists(graph_file.c_str()) == false)
948948
// create_graph(repository_file, data_stream_type, graph_file, metric, lid, 30, 60, 0.1f, 30, 0.001f, 5, 4); // d, k_ext, eps_ext, k_opt, eps_opt, i_opt, thread_count

cpp/benchmark/src/deglib_groundtruth.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ int main() {
149149
const auto query_repository = deglib::load_static_repository(query_file_uint8.c_str());
150150

151151
const auto start = std::chrono::system_clock::now();
152-
const auto topLists = compute_knn_groundtruth(base_repository, query_repository, deglib::distances::Metric::L2_Uint8, k_target);
152+
const auto topLists = compute_knn_groundtruth(base_repository, query_repository, deglib::distances::Metric::Uint8_L2, k_target);
153153
auto duration = uint32_t(std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now() - start).count());
154154
fmt::print("Computing {:5} top lists of a {:8} base took {:5}s \n", query_repository.size(), base_repository.size(), duration);
155155
topListsUint8 = topLists;
@@ -166,7 +166,7 @@ int main() {
166166
const auto query_repository = deglib::load_static_repository(query_file.c_str());
167167

168168
const auto start = std::chrono::system_clock::now();
169-
const auto topLists = compute_knn_groundtruth(base_repository, query_repository, deglib::distances::Metric::L2, k_target);
169+
const auto topLists = compute_knn_groundtruth(base_repository, query_repository, deglib::distances::Metric::FP32_L2, k_target);
170170
auto duration = uint32_t(std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now() - start).count());
171171
fmt::print("Computing {:5} top lists of a {:8} base took {:5}s \n", query_repository.size(), base_repository.size(), duration);
172172
topListsFloat = topLists;

0 commit comments

Comments
 (0)