Optimisation of classic FizzBuzz test.
The least efficient implementation, with 3 ifs and two printfs per number. It is so inefficient that I don't even use it for comparison.
A little bit optimised version, with 2 ifs (not counting the loop condition) and 1 printf per number.
Single loop iteration for 15 numbers, it means for 15 numbers just one branch (vs 45 branches for naive) and 1 printf (vs 15 printfs for naive).
Generic printf replaced with custom print routine, tailored for this particular task.
Reuse buffer from previous iteration, update only the changed characters. Use x86_64 vector instructions for comparing buffers.
Use worker threads to process the sets of numbers in parallel.
All tests are performed on Dell Latitude 7480 with Core i7-7600U (2 cores with hyperthreading) and 16 Gb RAM, OpenSUSE Leap 15.1, kernel 4.12.14. Output redirected to /dev/null. Multithreaded implementation uses 4 worker threads, with load of 3M number per thread.
|Implementation||Time (min:sec.millisec)||Relative to naive||Relative to previous|