#include #include #include #include #include #include #include #include "queries.h" #define IF_RANK0 if (world.rank()==0) clock_t start_time_; void start_timer(const std::string& message = "") { if (!message.empty()) { printf("%s", message.c_str()); fflush(stdout); } start_time_ = clock(); } double stop_timer() { return double(clock()-start_time_)/CLOCKS_PER_SEC; } float compute_precision(const flann::Matrix& match, const flann::Matrix& indices) { int count = 0; assert(match.rows == indices.rows); size_t nn = std::min(match.cols, indices.cols); for(size_t i=0; i class ClientIndex { public: ClientIndex(const std::string& host, const std::string& service) { tcp::resolver resolver(io_service_); tcp::resolver::query query(tcp::v4(), host, service); iterator_ = resolver.resolve(query); } void knnSearch(const flann::Matrix& queries, flann::Matrix& indices, flann::Matrix& dists, int knn, const SearchParams& params) { tcp::socket sock(io_service_); sock.connect(*iterator_); Request req; req.nn = knn; req.queries = queries; // send request write_object(sock,req); Response resp; // read response read_object(sock, resp); for (size_t i=0;i query; flann::Matrix match; flann::load_from_file(query, "sift100K.h5","query"); flann::load_from_file(match, "sift100K.h5","match"); // flann::load_from_file(gt_dists, "sift100K.h5","dists"); flann::ClientIndex index("localhost","9999"); int nn = 1; flann::Matrix indices(new int[query.rows*nn], query.rows, nn); flann::Matrix dists(new float[query.rows*nn], query.rows, nn); start_timer("Performing search...\n"); index.knnSearch(query, indices, dists, nn, flann::SearchParams(128)); printf("Search done (%g seconds)\n", stop_timer()); printf("Checking results\n"); float precision = compute_precision(match, indices); printf("Precision is: %g\n", precision); } catch (std::exception& e) { std::cerr << "Exception: " << e.what() << "\n"; } return 0; }