[PATCH] D147812: [InstrProf] Use BalancedPartitioning to order temporal profiling trace data

Ellis Hoag via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 26 10:21:10 PDT 2023

ellis added inline comments.

Comment at: llvm/include/llvm/Support/BalancedPartitioning.h:26
+// number of greedy iterations per split (IterationsPerSplit). The worst-case
+// time complexity of the implementation is bounded by O(M*log^2 N), where
+// N is the number of FunctionNodes and M is the number of
kyulee wrote:
> Not sure where you got, but it seems slightly different than the one in the linked paper.
Yes, the paper reports a runtime of O(m log n + n log2 n). However O(m log2 n) should be slightly worse and much easier to understand, so I think this is good enough 🙂

Comment at: llvm/include/llvm/Support/BalancedPartitioning.h:35
+//   * Optimizing Function Layout for Mobile Applications,
+//     https://arxiv.org/abs/2211.09285
kyulee wrote:
> Not blocking, but I wonder if you want to add a link to LCTES 2023 when the proceeding is available soon?
Since the paper we submitted to LCTES 2023 is slightly shorter I think it makes sense to keep this arxiv link which contains our whole paper.

Comment at: llvm/lib/Support/BalancedPartitioning.cpp:178
+    for (auto &UN : N.UtilityNodes)
+      UN = UtilityNodeIndex[UN];
kyulee wrote:
> I'm not sure what this code does. I might miss something.
The contents of `BPFunctionNode::UtilityNodes` could originally contain arbitrary values. To make matters worse, each bisect step could shuffle these nodes into different sections.

Here we are computing `UtilityNodeIndex` to be a map from `UtilityNodeT` to an int in range [0,N) where N is the number of unique utility nodes. Then we can update each utility node so they are in range [0,N). Then we can make `SignaturesT` a normal vector indexed by utility nodes for performance.

Comment at: llvm/lib/Support/BalancedPartitioning.cpp:316
+  for (auto &UN : N.UtilityNodes)
+    Gain += (FromLeftToRight ? Signatures[UN].CachedCostLR
+                             : Signatures[UN].CachedCostRL);
kyulee wrote:
> Given `logCost` is a negative value which we want to minimize for an objective, my read on `CachedCostLR` is actually a cost saving (or gain) when `N` is moved from Left to Right. So, wouldn't it make sense naming it `CachedCostSavingLR` or `CachedGainLR` so that accumulating them to `Gain` sounds natural?
I've renamed it to `CachedGainLR` which makes sense because we want to maximize it. Thanks for the suggestion! 

  rG LLVM Github Monorepo



More information about the llvm-commits mailing list