@@ -64,6 +64,7 @@ static ExplorationTimings run_exploration(const deglib::search::SearchGraph& gra
6464 const std::vector<std::vector<int32_t >>& gt_data,
6565 const std::string& output_path,
6666 double build_time_s) {
67+
6768 size_t count = graph.size ();
6869 deglib::FloatSpace fp16_rerank_space (static_cast <uint32_t >(dims), deglib::Metric::FP16InnerProduct);
6970 std::vector<std::vector<uint32_t >> results (count);
@@ -193,6 +194,17 @@ static int run(const std::filesystem::path& data_path,
193194 std::vector<std::vector<std::byte>> train_vectors = hdf5_reader::read_matrix_bytes (h5path, train_info);
194195 size_t dims = static_cast <size_t >(train_info.num_cols );
195196 size_t count = static_cast <size_t >(train_info.num_rows );
197+ if (train_info.element_size == 4 ) {
198+ for (auto & vec : train_vectors) {
199+ std::vector<std::byte> fp16_vec (dims * 2 );
200+ deglib::distances::floats_to_fp16 (
201+ reinterpret_cast <const float *>(vec.data ()),
202+ reinterpret_cast <uint16_t *>(fp16_vec.data ()),
203+ dims
204+ );
205+ vec = std::move (fp16_vec);
206+ }
207+ }
196208
197209 std::vector<std::vector<int32_t >> gt_data;
198210 if (compute_recall) {
@@ -245,7 +257,7 @@ static int run(const std::filesystem::path& data_path,
245257
246258 // Quantize all upfront once (highly optimized, parallel, zero raw copy)
247259 double t1 = sisap_common::now_ms ();
248- auto quantized = deglib::quantization::quantize_batch (train_vectors, static_cast <uint32_t >(dims), non_zeros, threads);
260+ auto quantized = deglib::quantization::quantize_batch_fp16 (train_vectors, static_cast <uint32_t >(dims), non_zeros, threads);
249261 quantize_ms = sisap_common::now_ms () - t1;
250262
251263 graph_ptr = std::make_unique<deglib::graph::SizeBoundedGraph>(static_cast <uint32_t >(count), k_graph, feature_space);
0 commit comments