v1 version and measurements
This commit is contained in:
+41
-21
@@ -65,9 +65,15 @@ bool get_options(int argc, char* argv[]){
|
||||
else if (arg == "-k") {
|
||||
session.k = (i+1 < argc) ? std::atoi(argv[++i]) : session.k;
|
||||
}
|
||||
else if (arg == "-n" || arg == "--max_trheads") {
|
||||
else if (arg == "-n" || arg == "--max_threads") {
|
||||
session.max_threads = (i+1 < argc) ? std::atoi(argv[++i]) : session.max_threads;
|
||||
}
|
||||
else if (arg == "-s" || arg == "--slices") {
|
||||
session.slices = (i+1 < argc) ? std::atoi(argv[++i]) : session.slices;
|
||||
}
|
||||
else if (arg == "-a" || arg == "--accuracy") {
|
||||
session.accuracy = (i+1 < argc) ? std::atoi(argv[++i]) : session.accuracy;
|
||||
}
|
||||
else if (arg == "-t" || arg == "--timing")
|
||||
session.timing = true;
|
||||
else if (arg == "-v" || arg == "--verbose")
|
||||
@@ -87,7 +93,12 @@ bool get_options(int argc, char* argv[]){
|
||||
std::cout << " -k <number>\n";
|
||||
std::cout << " Set the number of closest neighbors to find. \n\n";
|
||||
std::cout << " -n | --max_trheads <threads>\n";
|
||||
std::cout << " Reduce the thread number for the execution to <threads>. <threads> must be less or equal to available CPUs.\n\n";
|
||||
std::cout << " Reduce the thread number for the execution to <threads>. <threads> should be less or equal to available CPUs.\n\n";
|
||||
std::cout << " -s | --slices <slices/threads>\n";
|
||||
std::cout << " The number of slices to the Corpus matrix. In the parallel version this setting affects the number of threads\n";
|
||||
std::cout << " <threads> should be less or equal to available CPUs\n\n";
|
||||
std::cout << " -a | --accuracy <accuracy>\n";
|
||||
std::cout << " Reduce the accuracy of neighbor finding. The accuracy should be between 1-100 \n\n";
|
||||
std::cout << " -t | --timing\n";
|
||||
std::cout << " Request timing measurements output to stdout.\n\n";
|
||||
std::cout << " -v | --verbose\n";
|
||||
@@ -109,6 +120,27 @@ bool get_options(int argc, char* argv[]){
|
||||
return status;
|
||||
}
|
||||
|
||||
void loadMtx(MatrixDst& Corpus, MatrixDst& Query) {
|
||||
if (access(session.outMtxFile.c_str(), F_OK) == 0)
|
||||
std::remove(session.outMtxFile.c_str());
|
||||
|
||||
// timer.start();
|
||||
Mtx::load<MatrixDst, DstHDF5Type>(session.corpusMtxFile, session.corpusDataSet, Corpus);
|
||||
if (session.queryMtx)
|
||||
Mtx::load<MatrixDst, DstHDF5Type>(session.corpusMtxFile, session.corpusDataSet, Query);
|
||||
// timer.stop();
|
||||
// timer.print_dt("Load hdf5 files");
|
||||
}
|
||||
|
||||
void storeMtx(MatrixIdx& Idx, MatrixDst& Dst) {
|
||||
// timer.start();
|
||||
Mtx::store<MatrixIdx, IdxHDF5Type>(session.outMtxFile, session.outMtxIdxDataSet, Idx);
|
||||
Mtx::store<MatrixDst, DstHDF5Type>(session.outMtxFile, session.outMtxDstDataSet, Dst);
|
||||
// timer.stop();
|
||||
// timer.print_dt("Store hdf5 files");
|
||||
}
|
||||
|
||||
|
||||
#ifndef TESTING
|
||||
int main(int argc, char* argv[]) try {
|
||||
// Instantiate matrixes
|
||||
@@ -127,38 +159,26 @@ int main(int argc, char* argv[]) try {
|
||||
if (!get_options(argc, argv))
|
||||
exit(1);
|
||||
|
||||
if (access(session.outMtxFile.c_str(), F_OK) == 0)
|
||||
std::remove(session.outMtxFile.c_str());
|
||||
init_workers();
|
||||
|
||||
// Load data
|
||||
timer.start();
|
||||
Mtx::load<MatrixDst, DstHDF5Type>(session.corpusMtxFile, session.corpusDataSet, Corpus);
|
||||
if (session.queryMtx)
|
||||
Mtx::load<MatrixDst, DstHDF5Type>(session.corpusMtxFile, session.corpusDataSet, Query);
|
||||
timer.stop();
|
||||
timer.print_dt("Load hdf5 files");
|
||||
loadMtx(Corpus, Query);
|
||||
|
||||
// Prepare output memory
|
||||
Idx.resize(Query.rows(), session.k);
|
||||
Dst.resize(Query.rows(), session.k);
|
||||
Idx.resize((session.queryMtx) ? Query.rows() : Corpus.rows(), session.k);
|
||||
Dst.resize((session.queryMtx) ? Query.rows() : Corpus.rows(), session.k);
|
||||
|
||||
// Do the search
|
||||
logger << "Start knnsearch ...";
|
||||
timer.start();
|
||||
if (session.queryMtx)
|
||||
knnsearch(Corpus, Query, 0, session.k, session.k, Idx, Dst);
|
||||
else
|
||||
knnsearch(Corpus, Corpus, 0, session.k, session.k, Idx, Dst);
|
||||
size_t selected_neighbors = (size_t)(session.k*(session.accuracy/100.0));
|
||||
knnsearch(Corpus, (session.queryMtx) ? Query : Corpus, session.slices, session.k, selected_neighbors, Idx, Dst);
|
||||
timer.stop();
|
||||
logger << " Done" << logger.endl;
|
||||
timer.print_dt("knnsearch");
|
||||
|
||||
// Store data
|
||||
timer.start();
|
||||
Mtx::store<MatrixIdx, IdxHDF5Type>(session.outMtxFile, session.outMtxIdxDataSet, Idx);
|
||||
Mtx::store<MatrixDst, DstHDF5Type>(session.outMtxFile, session.outMtxDstDataSet, Dst);
|
||||
timer.stop();
|
||||
timer.print_dt("Store hdf5 files");
|
||||
storeMtx(Idx, Dst);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user