fannkuch-redux benchmark N=10

Each chart bar shows how many times slower, one ↓ fannkuch-redux program was, compared to the fastest program.

These are not the only programs that could be written. These are not the only compilers and interpreters. These are not the only programming languages.

Column × shows how many times more each program used compared to the benchmark program that used least.

    sort sortsort
  ×   Program Source Code CPU secs Elapsed secs Memory KB Code B ≈ CPU Load
1.0PyPy 2 4.171.19255,3201009  87% 86% 93% 88%
1.0PyPy 3 4.141.20201,9841271  88% 98% 92% 88%
1.0PyPy 2 4.181.20256,8241009  88% 88% 93% 87%
1.0PyPy 3 #2 4.071.20198,5561008  87% 89% 86% 92%
1.0PyPy 3 4.151.21202,3601271  88% 88% 86% 93%
1.0PyPy 3 4.151.21201,9761271  93% 87% 89% 87%
1.1PyPy 3 #2 4.041.30196,0841008  88% 91% 89% 85%
1.2PyPy 3 #6 1.391.4036,620552  3% 100% 1% 1%
1.2PyPy 3 #6 1.391.4036,616552  5% 97% 0% 3%
1.2PyPy 2 4.201.4172,5081009  81% 79% 79% 84%
1.2PyPy 3 #6 1.431.4436,600552  6% 7% 100% 1%
1.3PyPy 3 #2 4.021.50196,7201008  87% 89% 93% 95%
1.7PyPy 3 #3 7.062.00205,284894  85% 93% 87% 95%
1.8PyPy 3 #3 6.952.10205,432894  89% 89% 81% 91%
1.8PyPy 3 #3 7.192.10205,864894  86% 90% 86% 96%
1.8PyPy 3 #4 7.272.10208,0841069  92% 92% 94% 96%
1.8PyPy 3 #4 7.172.21207,3241069  100% 92% 89% 89%
1.9PyPy 3 #4 7.212.31207,0161069  89% 90% 86% 93%
3.4Nuitka #3 15.724.0861,732894  98% 96% 98% 98%
3.4Nuitka #3 15.694.0960,500894  98% 98% 95% 99%
3.5Nuitka #4 15.884.1860,6601069  97% 100% 98% 96%
3.5Nuitka #4 15.844.1860,7081069  98% 95% 96% 93%
3.5Nuitka #4 15.834.1960,5241069  93% 99% 96% 96%
3.5Pyston 15.764.20161,4001009  95% 95% 97% 95%
3.5Pyston 15.784.20160,6921009  94% 98% 93% 93%
3.6Nuitka #3 15.714.2960,588894  97% 94% 94% 91%
3.8Pyston 16.284.5046,9001009  92% 94% 93% 95%
4.4Python 3 #3 20.155.2856,100894  96% 96% 98% 96%
4.5Python 3 #3 20.255.3755,580894  95% 97% 95% 96%
4.5Python 3 #3 20.205.3757,448894  97% 99% 96% 97%
4.8Python 3 #4 20.675.6857,7041069  98% 95% 95% 98%
4.8Python 3 #4 20.785.7855,7201069  98% 98% 97% 97%
4.8Python 3 #4 20.455.7855,7921069  98% 94% 96% 91%
4.9Nuitka #2 22.545.8960,1801008  97% 97% 96% 98%
5.0Nuitka #2 22.785.9960,9041008  97% 97% 98% 97%
5.0Nuitka #2 22.785.9962,4761008  99% 99% 96% 97%
5.2Nuitka #6 6.256.2610,224552  2% 1% 100% 2%
5.3Nuitka #6 6.316.3110,280552  2% 3% 2% 100%
5.3Nuitka #6 6.346.3410,220552  82% 2% 22% 2%
5.3Python development version #4 24.616.3853,8521069  97% 98% 99% 98%
5.3Python development version #4 24.316.3852,4361069  97% 99% 95% 97%
5.4Python development version #4 24.646.4852,4281069  98% 97% 98% 97%
5.5Python development version #3 23.336.5854,500894  96% 99% 97% 97%
5.5Python development version #3 23.286.5953,188894  95% 97% 97% 98%
5.7Cython 25.526.7952,6561271  97% 94% 95% 98%
5.8Cython 25.896.8954,5401271  99% 96% 96% 96%
5.8Nuitka 26.246.8960,7281271  99% 98% 97% 97%
5.9Cython 25.676.9953,7961271  96% 92% 98% 91%
5.9Nuitka 26.106.9960,5801271  95% 98% 95% 96%
5.9Nuitka 26.196.9959,5801271  94% 97% 96% 97%
6.0Python development version #3 22.917.1952,908894  92% 98% 95% 98%
6.1Python 2 28.107.2546,6161009  97% 98% 99% 99%
6.2Python 2 28.247.4548,8121009  96% 96% 99% 97%
6.3Python 2 28.237.4644,9321009  97% 98% 99% 98%
6.5Python 3 #2 29.367.8055,8801008  97% 98% 97% 96%
6.9Python 3 #6 8.278.288,560552  3% 4% 100% 3%
7.0Python 3 #6 8.328.328,480552  3% 4% 2% 100%
7.5Python 3 #2 29.139.0057,6761008  98% 98% 98% 99%
7.6Python development version #2 34.939.0852,4281008  98% 98% 96% 98%
7.6Python development version #2 34.969.0954,6921008  99% 97% 99% 97%
7.7Python development version #2 34.989.1952,6321008  98% 95% 98% 96%
7.7Python 3 #6 9.189.228,660552  57% 50% 17% 28%
7.9Python development version #6 9.479.487,436552  4% 100% 2% 1%
8.0Python development version #6 9.539.547,476552  12% 91% 3% 1%
8.0Python development version #6 9.559.557,372552  32% 3% 69% 1%
8.0Python 3 34.389.5955,6601271  96% 99% 97% 98%
8.3Python 3 33.899.9055,7881271  98% 97% 96% 98%
8.5Python 3 33.8610.1957,8201271  97% 99% 97% 97%
8.6Python 3 #2 28.6310.2157,9241008  99% 97% 98% 96%
8.7MicroPython #6 10.4110.414,044552  25% 1% 78% 1%
8.8MicroPython #6 10.4710.474,128552  4% 1% 100% 2%
8.8MicroPython #6 10.4710.474,020552  2% 3% 0% 100%
9.0Python development version 40.8910.7954,5441271  98% 100% 95% 97%
9.0Python development version 41.0910.7952,6921271  96% 98% 98% 98%
9.3Python development version 40.7911.0952,6841271  95% 96% 97% 98%
missing benchmark programs
Jython No program
IronPython No program
Shedskin No program
Numba No program
Grumpy No program

 fannkuch-redux benchmark : Indexed-access to tiny integer-sequence

diff program output N = 7 with this output file to check your program is correct before contributing.

We are trying to show the performance of various programming language implementations - so we ask that contributed programs not only give the correct result, but also use the same algorithm to calculate that result.

For N = 7 programs should generate these permutations (40KB) - which, incidentally, seem to be in the same order as permutations generated by the Tompkins-Paige algorithm, see pages 150-151 Permutation Generation Methods Robert Sedgewick.

The fannkuch benchmark is defined by programs in Performing Lisp Analysis of the FANNKUCH Benchmark, Kenneth R. Anderson and Duane Rettig.

Each program should

The conjecture is that this maximum count is approximated by n*log(n) when n goes to infinity.

FANNKUCH is an abbreviation for the German word Pfannkuchen, or pancakes, in analogy to flipping pancakes.


Thanks to Oleg Mazurov for insisting on a checksum and providing this helpful description of the approach he took -

Revised BSD license

  Home   Conclusions   License   Play