On Sun, Jul 11, 2010 at 10:35 PM, Max S. Kaznady
I wrote some benchmarks for Boost and GSL where I initialize a vector of random numbers and then raise it to some random exponent, and I redo the operations a certain number of times and report the average time.
std::transform and std::for_each take the same time, GSL's filling in manually and Boosts's filling in manually also take the same time BUT, manual fil is a bit faster than using std::transform and std::for_each. Any ideas why?
Runtimes: Boost vector initialization: 0.000000000000000 GSL vector initialization: 0.000000000000000 Boost transform avg time: 0.002141000000000 Boost for_each avg time: 0.002094000000000 Boost manual fill avg time: 0.001811000000000 GSL avg time: 0.001820000000000
Hi Max First thing I should say is that I am NOT in any sense an expert on the finer aspects of performance, so you may want to take anything I say with a large dose of salt! Second, I am reminded of the much quoted rules of optimization * Don't * Don't yet (for experts) * If you must, profile first Obviously you are profiling, but is it conclusive? What is the statistical uncertainty in your results, especially compared to the observed differences? All that said, I am unsurprised that hand rolled loops are a little faster. Using algorithms also uses a Boost.Bind invocation on each iteration, with all the overhead and lack of localisation that implies. You might want to try custom functors (inlined), to see how the performance numbers compare. However, stepping back, does your application really require the last word in performance? In most of your code, would clarity and expressiveness be more valuable that a small performance boost? Would your numbers be repeated in a more realistic application, and would these performance differences be significant against a broader background? Regards - Rob.