From 65404e51bfed1c1a3f7cf27b68153cd0bb33be14 Mon Sep 17 00:00:00 2001 From: Yi Kong Date: Thu, 18 May 2023 16:26:27 -0700 Subject: [PATCH] Revert "Reland "[BOLT] Parallelize legacy profile merging"" This reverts commit 611fb179b19857ffb87df81c926902fc7e3412ab. Broken tests --- bolt/tools/merge-fdata/merge-fdata.cpp | 71 +++++++++++----------------------- 1 file changed, 22 insertions(+), 49 deletions(-) diff --git a/bolt/tools/merge-fdata/merge-fdata.cpp b/bolt/tools/merge-fdata/merge-fdata.cpp index 24345eb..61ca979 100644 --- a/bolt/tools/merge-fdata/merge-fdata.cpp +++ b/bolt/tools/merge-fdata/merge-fdata.cpp @@ -20,8 +20,6 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/Signals.h" -#include "llvm/Support/ThreadPool.h" -#include #include using namespace llvm; @@ -260,40 +258,31 @@ bool isYAML(const StringRef Filename) { void mergeLegacyProfiles(const SmallVectorImpl &Filenames) { errs() << "Using legacy profile format.\n"; std::optional BoltedCollection; - std::mutex BoltedCollectionMutex; - typedef StringMap ProfileTy; - - auto ParseProfile = [&](const std::string &Filename, auto &Profiles) { - const llvm::thread::id tid = llvm::this_thread::get_id(); - + StringMap Entries; + for (const std::string &Filename : Filenames) { if (isYAML(Filename)) report_error(Filename, "cannot mix YAML and legacy formats"); ErrorOr> MB = MemoryBuffer::getFileOrSTDIN(Filename); if (std::error_code EC = MB.getError()) report_error(Filename, EC); + errs() << "Merging data from " << Filename << "...\n"; StringRef Buf = MB.get()->getBuffer(); - std::unique_ptr Profile; - { - std::lock_guard Lock(BoltedCollectionMutex); - // Check if the string "boltedcollection" is in the first line - if (Buf.startswith("boltedcollection\n")) { - if (!BoltedCollection.value_or(true)) - report_error( - Filename, - "cannot mix profile collected in BOLT and non-BOLT deployments"); - BoltedCollection = true; - Buf = Buf.drop_front(17); - } else { - if (BoltedCollection.value_or(false)) - report_error( - Filename, - "cannot mix profile collected in BOLT and non-BOLT deployments"); - BoltedCollection = false; - } - - Profile.reset(&Profiles[tid]); + // Check if the string "boltedcollection" is in the first line + if (Buf.startswith("boltedcollection\n")) { + if (!BoltedCollection.value_or(true)) + report_error( + Filename, + "cannot mix profile collected in BOLT and non-BOLT deployments"); + BoltedCollection = true; + Buf = Buf.drop_front(17); + } else { + if (BoltedCollection.value_or(false)) + report_error( + Filename, + "cannot mix profile collected in BOLT and non-BOLT deployments"); + BoltedCollection = false; } SmallVector Lines; @@ -306,31 +295,15 @@ void mergeLegacyProfiles(const SmallVectorImpl &Filenames) { uint64_t Count; if (Line.substr(Pos + 1, Line.size() - Pos).getAsInteger(10, Count)) report_error(Filename, "Malformed / corrupted profile counter"); - Count += Profile->lookup(Signature); - Profile->insert_or_assign(Signature, Count); - } - }; - - // The final reduction has non-trivial cost, make sure each thread has at - // least 4 tasks. - ThreadPoolStrategy S = optimal_concurrency(Filenames.size() / 4); - ThreadPool Pool(S); - DenseMap ParsedProfiles(Pool.getThreadCount()); - for (const auto &Filename : Filenames) - Pool.async(ParseProfile, std::cref(Filename), std::ref(ParsedProfiles)); - Pool.wait(); - - ProfileTy MergedProfile; - for (const auto &[Thread, Profile] : ParsedProfiles) - for (const auto &[Key, Value] : Profile) { - uint64_t Count = MergedProfile.lookup(Key) + Value; - MergedProfile.insert_or_assign(Key, Count); + Count += Entries.lookup(Signature); + Entries.insert_or_assign(Signature, Count); } + } if (BoltedCollection) output() << "boltedcollection\n"; - for (const auto &[Key, Value] : MergedProfile) - output() << Key << " " << Value << "\n"; + for (const auto &Entry : Entries) + output() << Entry.getKey() << " " << Entry.getValue() << "\n"; errs() << "Profile from " << Filenames.size() << " files merged.\n"; } -- 2.7.4