[llvm] [InstrProf] Adding utility weights to BalancedPartitioning (PR #72717)
Ellis Hoag via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 18 10:14:55 PST 2024
================
@@ -166,34 +171,41 @@ void BalancedPartitioning::runIterations(const FunctionNodeRange Nodes,
unsigned RecDepth, unsigned LeftBucket,
unsigned RightBucket,
std::mt19937 &RNG) const {
- unsigned NumNodes = std::distance(Nodes.begin(), Nodes.end());
- DenseMap<BPFunctionNode::UtilityNodeT, unsigned> UtilityNodeIndex;
+ // Count the degree of each utility node.
+ DenseMap<uint32_t, unsigned> UtilityNodeIndex;
for (auto &N : Nodes)
for (auto &UN : N.UtilityNodes)
- ++UtilityNodeIndex[UN];
+ ++UtilityNodeIndex[UN.Id];
// Remove utility nodes if they have just one edge or are connected to all
- // functions
+ // functions.
+ unsigned NumNodes = std::distance(Nodes.begin(), Nodes.end());
for (auto &N : Nodes)
llvm::erase_if(N.UtilityNodes, [&](auto &UN) {
- return UtilityNodeIndex[UN] == 1 || UtilityNodeIndex[UN] == NumNodes;
+ return UtilityNodeIndex[UN.Id] == 1 ||
+ UtilityNodeIndex[UN.Id] == NumNodes;
});
- // Renumber utility nodes so they can be used to index into Signatures
+ // Renumber utility nodes so they can be used to index into Signatures.
UtilityNodeIndex.clear();
for (auto &N : Nodes)
for (auto &UN : N.UtilityNodes)
- UN = UtilityNodeIndex.insert({UN, UtilityNodeIndex.size()}).first->second;
+ UN.Id = UtilityNodeIndex.insert({UN.Id, UtilityNodeIndex.size()})
+ .first->second;
- // Initialize signatures
+ // Initialize signatures.
SignaturesT Signatures(/*Size=*/UtilityNodeIndex.size());
for (auto &N : Nodes) {
for (auto &UN : N.UtilityNodes) {
- assert(UN < Signatures.size());
- if (N.Bucket == LeftBucket) {
- Signatures[UN].LeftCount++;
- } else {
- Signatures[UN].RightCount++;
- }
+ assert(UN.Id < Signatures.size());
+ if (N.Bucket == LeftBucket)
+ Signatures[UN.Id].LeftCount++;
+ else
+ Signatures[UN.Id].RightCount++;
+ // Identical utility nodes (having the same UN.Id) have the same weight
+ // (unless there are hash collisions mapping utilities to the same Id);
+ // thus, we can get a new weight only when the signature is uninitialized.
+ if (Signatures[UN.Id].Weight != UN.Weight)
+ Signatures[UN.Id].Weight = UN.Weight;
----------------
ellishg wrote:
Can we simply remove the if statement and always assign the weight?
https://github.com/llvm/llvm-project/pull/72717
More information about the llvm-commits
mailing list