#include #include #include #include #include #include #include #define IF_RANK0 if (world.rank()==0) timeval start_time_; void start_timer(const std::string& message = "") { if (!message.empty()) { printf("%s", message.c_str()); fflush(stdout); } gettimeofday(&start_time_,NULL); } double stop_timer() { timeval end_time; gettimeofday(&end_time,NULL); return double(end_time.tv_sec-start_time_.tv_sec)+ double(end_time.tv_usec-start_time_.tv_usec)/1000000; } 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 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::mpi::Client 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(64)); 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; }