1 #ifndef IVF_HNSW_LIB_UTILS_H
2 #define IVF_HNSW_LIB_UTILS_H
12 #include <faiss/utils.h>
18 #define __builtin_popcount(t) __popcnt(t)
20 #include <x86intrin.h>
25 #define PORTABLE_ALIGN32 __attribute__((aligned(32)))
27 #define PORTABLE_ALIGN32 __declspec(align(32))
35 std::chrono::steady_clock::time_point time_begin;
38 time_begin = std::chrono::steady_clock::now();
41 float getElapsedTimeMicro() {
42 std::chrono::steady_clock::time_point time_end = std::chrono::steady_clock::now();
43 return (std::chrono::duration_cast<std::chrono::microseconds>(time_end - time_begin).count());
47 time_begin = std::chrono::steady_clock::now();
53 void read_variable(std::istream &in, T &podRef) {
54 in.read((
char *) &podRef,
sizeof(T));
59 void read_vector(std::istream &in, std::vector<T> &vec)
62 in.read((
char *) &size,
sizeof(uint32_t));
64 in.read((
char *) vec.data(), size *
sizeof(T));
69 void write_variable(std::ostream &out,
const T &val) {
70 out.write((
char *) &val,
sizeof(T));
75 void write_vector(std::ostream &out, std::vector<T> &vec)
77 uint32_t size = vec.size();
78 out.write((
char *) &size,
sizeof(uint32_t));
79 out.write((
char *) vec.data(), size *
sizeof(T));
85 void readXvec(std::ifstream &in, T *data,
const size_t d,
const size_t n = 1)
88 for (
size_t i = 0; i < n; i++) {
89 in.read((
char *) &dim,
sizeof(uint32_t));
91 std::cout <<
"file error\n";
94 in.read((
char *) (data + i * dim), dim *
sizeof(T));
100 void writeXvec(std::ofstream &out, T *data,
const size_t d,
const size_t n = 1)
103 for (
size_t i = 0; i < n; i++) {
104 out.write((
char *) &dim,
sizeof(uint32_t));
105 out.write((
char *) (data + i * dim), dim *
sizeof(T));
111 void readXvecFvec(std::ifstream &in,
float *data,
const size_t d,
const size_t n = 1)
116 for (
size_t i = 0; i < n; i++) {
117 in.read((
char *) &dim,
sizeof(uint32_t));
119 std::cout <<
"file error\n";
122 in.read((
char *) mass, dim *
sizeof(T));
123 for (
size_t j = 0; j < d; j++)
124 data[i * dim + j] = (1.0) * mass[j];
129 inline bool exists(
const char *path) {
130 std::ifstream f(path);
135 void random_subset(
const float *x,
float *x_out,
size_t d,
size_t nx,
size_t sub_nx);
138 float fvec_L2sqr(
const float *x,
const float *y,
size_t d);
140 #endif //IVF_HNSW_LIB_UTILS_H
Clock class.
Definition: utils.h:34