-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Accurate performance baseline #45
Conversation
I guess the question is whether there are cases you care about where Qi's performance is relevant to programs that use it. If yes, then micro-benchmarks like these that point out the specific overheads should be helpful as a starting point in thinking about compiler optimizations. If not... maybe there isn't actually a good reason to make Qi faster? |
All the performance!!! 😝 Yeah I’d definitely like Qi to be a viable alternative to Racket in all cases where possible. If these benchmarks are legitimate (and sounds like they are from what you’re saying - “microbenchmarks” eh, good to know the term), then I’m definitely interested in improving performance here 😼
…Sent from my iPhone
On Jul 1, 2022, at 4:34 PM, Michael Ballantyne ***@***.***> wrote:
Although, I'm not really sure what these benchmarks are telling us. These differences only become apparent at all on scales much finer than practical workloads would seem to involve... so I find myself wondering whether these benchmarks are actually useful in representing Qi vs Racket performance, and if not, what would be more useful / representative?
I guess the question is whether there are cases you care about where Qi's performance is relevant to programs that use it. If yes, then micro-benchmarks like these that point out the specific overheads should be helpful as a starting point in thinking about compiler optimizations. If not... maybe there isn't actually a good reason to make Qi faster?
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.
|
Discussed with @michaelballantyne and he said that these are in the right ballpark now, so, merging. To summarize his suggestions: Qi could only exceed Racket performance if there are cases where it could have a stronger theory of optimization, where there are more "language equivalences" than Racket can employ in these cases. This could happen if either:
In cases where Qi is slow in the local / general case, some options include:
|
Summary of Changes
I've addressed your comments on #20 , @michaelballantyne , and avoided constructing lists in the benchmarks. This results in a seemingly murderous advantage for Racket over Qi, as you predicted. Although, I'm not really sure what these benchmarks are telling us. These differences only become apparent at all on scales much finer than practical workloads would seem to involve (and e.g. benchmarks in libraries using Qi are unaffected when using Qi vs Racket). So it might be like using bricks vs atoms to build a skyscraper, maybe - in practice it may not matter to the result, although using atoms might look nicer under a microscope. So I find myself wondering whether these benchmarks are actually useful in representing Qi vs Racket performance, and if not, what would be more useful / representative?
I'm also wondering what kinds of benchmarks would be useful as we undertake performance improvements once the compiler work is underway. Probably the forms benchmarks in
profile/forms
would be useful here, but those don't reflect non-local interactions.At this point we probably just want to have some minimally accurate baseline against which future improvements / regressions could be seen with some confidence.
Would love to hear any thoughts you may have on this.
Public Domain Dedication