5 ms·
Nice writeup and interesting results. I hadn't seen the use of perf_event_open(2) before directly in code which looks cool. The baseline is at a huge disadvant
by aconz2 5y ago
Nice writeup and interesting results. I hadn't seen the use of perf_event_open(2) before directly in code which looks cool.
The baseline is at a huge disadvantage here because the call to atan2 in the loop never gets inlined and the loop doesn't seem to get unrolled (which is surprising actually). Manually unrolling by 8 gives me an 8x speedup. Maybe I'm missing something with the `-static` link but unless they're using musl I didn't think -lm could get statically linked.
- xxpor 5y agoCould it be that calls to glibc never get inlined, since inlining is essentially static linking by another name? Or since they're in separate compilation units, without LTO you'd never perform the analysis to figure out if it's worth it. Would LTO inspect across a dynamic loading boundary? Just speculating, I really have no idea. Everything I work with is statically linked, so I've never really had to think about it.
- aconz2 5y agoYou've made a silly mistake and just did 1/8th the work, so of course it was 8x speedup. I am still wondering how the numbers would look if you could inline atan2f from libc. Too bad that isn't easier