Let’s assume a single test with 4 paths. We’re going to represent how long it takes to solve a given path with squares: 🟩 is fast, 🟩🟩🟩 is slower, and so on

solver path #1 path #2 path #3 path #4
z3 🟩 🟩🟩 🟩 🟩🟩🟩

How long does this take to complete on a machine with 16 cores?

So the best we can do is 🟩🟩🟩, because that’s how long it takes for z3 to process the hardest path using 1 core at 100%.

Or is it? What if we used other solvers? What if we ran 4 halmos instances, each using a different solver? Let’s say the results look like this:

solver path #1 path #2 path #3 path #4 sequential time parallel time
z3 🟩 🟩🟩 🟩 🟩🟩🟩 🟩🟩🟩🟩🟩🟩🟩 🟩🟩🟩
spiky 🟩🟩🟩🟩 🟩 🟩 🟩 🟩🟩🟩🟩🟩🟩🟩 🟩🟩🟩🟩
even 🟩🟩 🟩🟩 🟩🟩 🟩🟩 🟩🟩🟩🟩🟩🟩🟩🟩 🟩🟩
fasty 🟩🟩 🟩 🟩 🟩 🟩🟩🟩🟩🟩 🟩🟩

Some takeaways:

Running all 4 halmos instances in parallel, our CPU usage over time would look like this:

| CPU usage

100% | πŸŸͺ πŸŸͺ πŸŸͺ πŸŸͺ | | | | | --- | --- | --- | --- | --- | | 75% | 🟦 🟦 🟦 🟦 | | | | | 50% | 🟧 🟧 🟧 🟧 | 🟦 🟦 🟦 🟦 | | | | 25% | 🟩 🟩 🟩 🟩 | πŸŸͺ 🟧 🟩 🟩 |

🟧 🟩 |

🟧 | | | time t = 1 | t = 2 | t = 3 | t = 4 |

legend: