Summary
This paper attempts to create a benchmark for performance evaluation of generated programs by utilizing existing sets of programs and seeing how well the model performs with respect to these. Overall, I definitely liked the paper and think that it could potentially be a good contribution to the conference.
Reasons to accept
The paper is tackling a problem that has not gotten enough attention in the literature.
The "Synthesizing a Synthesizer" framework is clever, I like it!
Overall, the methodology and evaluation both are pretty solid. This was definitely the most well-done paper in my batch of reviews at COLM in this regard.
Reasons to reject
I still like this paper and think it should be accepted, but I did have a few concerns.
--- Major comments
One major concern that I had with the methodology, however, is that it seems that performance is only measured on programs where the answer is correct? If tht is the case, doesn't that introduce a major confounding factor that weaker models may generate answers to only the simpler programming problems, which are also easy to generate efficient solutions for? It seems that in order to rigorously compare two models with respect to their performance, the models would have to be compared across the same set of programs (so probably take the intersection of the sets of correct programs generated by the two models). I wonder if the authors
Another concern is that I found the methodology complex and pretty difficult to follow -- I hope that the clarity of the paper could be improved before it is finally published. Specifically, I found sections 2.4 and 2.5 pretty hard to follow due to their completxity and brief description. I was able to mostly understand them after a careful reading, but I would definitely encourage the authors to re-read these sections and try to make them clearer. Specific comments:
- Adding an illustrative example (e.g. to Figure 3) of the time1d, rdiff, and splitters values would be helpful to better understand.
- "mean execution time" is referenced in 2.4 before it is explained in 2.5, which made it confusing.
- Is "base" a typo for "bias"?
- Unless I missed it, it seems "cumulative ratio" is not defined anywhere? This is an important concept, and it was a bit hard for me to understand the methodology without knowing what this means.
--- Minor comments
But one possible issue with it is that it tries to generate inputs that would test the efficiency of the ground-truth solution (since the ground-truth solution is provided in the prompt). Programs other than the ground truth solution may be slow in different ways, and it is not guaranteed that this method would find inputs that exercise these other programs. Did you consider also generating programs that exercise the LLM-generated solutions instead?
One limitation of this work is that it only uses HumanEval and MBPP as inputs, which use the Python standard library only. It is not clear if this framework would scale up to testing more complex programs that rely on external libraries (like numpy or or PyTorch). It'd be good to at least mention this fact in the paper.
Questions to authors
--- Small typo fix suggestions
which is pervasively available on most platforms
-> which is available on most platforms
the new solution (in the green box) matchs
-> the new solution (in the green box) matches
improving the the worst case scenario
-> improving the worst case scenario
There is a place that says "Compared to software profilers such as architecture simulators, hardware counters provides low overhead (Wikipedia, 2024)", but I would suggest a reference other than Wikipedia, as Wikipedia is generally a secondary source rather than a primary authoritative source.
There is a place where you say "It is worth noting that our scoring mechanism is agnostic to different efficiency measurements." in section 5. It is not clear what this means -- don't the results of your method vary depending on the architecture used for measurment (in section 4.2)? Maybe instead of "agnostic", "robust" would be a more appropriate word?