From aab6657f1b5767256e5f59e77969cad4bd0d1a4f Mon Sep 17 00:00:00 2001 From: Milot Mirdita Date: Wed, 28 Jun 2023 16:08:26 +0900 Subject: [PATCH] Copy query table only once and reset after use --- src/sra/comparekmertables.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/sra/comparekmertables.cpp b/src/sra/comparekmertables.cpp index 1f28303..b98a0d7 100644 --- a/src/sra/comparekmertables.cpp +++ b/src/sra/comparekmertables.cpp @@ -366,16 +366,14 @@ int comparekmertables(int argc, const char **argv, const Command &command) { #pragma omp parallel num_threads(localThreads) default(none) shared(par, resultFiles, qTable, targetTables, std::cerr, std::cout, maximumNumOfBlocksPerDB) { + Timer timer; + std::vector localQTable(qTable); //creates a deep copy of the queryTable + Debug(Debug::INFO) << "Deep copy time: " << timer.lap() << "\n"; #pragma omp for schedule(dynamic, 1) for (size_t i = 0; i < targetTables.size(); ++i) { - Timer timer; - std::vector localQTable(qTable); //creates a deep copy of the queryTable - Debug(Debug::INFO) << "Deep copy time: " << timer.lap() << "\n"; QueryTableEntry *startPosQueryTable = localQTable.data(); QueryTableEntry *endQueryPos = startPosQueryTable + localQTable.size(); - const std::string& targetName = targetTables[i]; - timer.reset(); #if !defined(O_DIRECT) const int mode = (O_RDONLY | O_SYNC); @@ -615,6 +613,14 @@ int comparekmertables(int argc, const char **argv, const Command &command) { } writer.close(); Debug(Debug::INFO) << "Result write time: " << timer.lap() << "\n"; + timer.reset(); + + QueryTableEntry *qTableStart = localQTable.data(); + #pragma GCC unroll 8 + for (size_t i = 0; i < localQTable.size(); ++i) { + qTableStart[i].targetSequenceID = UINT_MAX; + } + Debug(Debug::INFO) << "Query table reset: " << timer.lap() << "\n"; delete[] resultTable; resultTable = nullptr;