On Saturday, 22 March 2014 at 14:41:48 UTC, Jay Norwood wrote:
The computation times of different methods can differ a lot.
How do you suggest to measure this effectively without the
overhead of the write and writeln output? Would a count of
100001 and stubs like below be reasonable, or would there be
something else that would prevent the optimizer from getting
too aggressive?
I used this to benchmark H. S. Teoh's calendar formatter:
version(benchmark)
{
int main(string[] args)
{
enum MonthsPerRow = 3;
auto t = benchmark!(function() {
foreach(formattedYear; iota(1800, 2000).map!(year
=> formatYear(year, MonthsPerRow)))
{
foreach(_; formattedYear){};
}
})(30);
writeln(t[0].msecs * 0.001);
return 0;
}
}
While the optimizer could probably remove all of that, it
doesn't. I also tested it against other options like walkLength,
this ended up begin the better choice.
(BTW, using joiner instead of join I was able to more than double
the performance:
https://github.com/luismarques/dcal/tree/benchmark . Once the
pipeline is made lazy end to end that will probably have even
more impact.)