diff --git a/libkineto/src/CuptiActivityProfiler.cpp b/libkineto/src/CuptiActivityProfiler.cpp index fb2c65ef..6a5e156f 100644 --- a/libkineto/src/CuptiActivityProfiler.cpp +++ b/libkineto/src/CuptiActivityProfiler.cpp @@ -1249,9 +1249,12 @@ const time_point CuptiActivityProfiler::performRunLoopStep( // currentIter > 0 means this is an iteration-based collection, triggered by pytorch main thread, // it should be executed in another thread in case pytorch main thread is blocked - if (currentIter > 0 && !collectTraceThread) { - std::lock_guard guard(mutex_); - collectTraceThread = std::make_unique(&CuptiActivityProfiler::collectTrace, this, collection_done, now); + if (currentIter > 0) { + // if collectTraceThread is already running, there's no need to execute collectTrace twice. + if(!collectTraceThread){ + std::lock_guard guard(mutex_); + collectTraceThread = std::make_unique(&CuptiActivityProfiler::collectTrace, this, collection_done, now); + } break; } collectTrace(collection_done, now);