diff options
| -rw-r--r-- | Makefile | 1 | ||||
| -rw-r--r-- | bench/stats.py | 10 | ||||
| -rw-r--r-- | benchmarks.md | 29 | 
3 files changed, 28 insertions, 12 deletions
@@ -127,6 +127,7 @@ progit/progit.md: progit  bench: $(BENCHFILE)  	{ sudo renice 99 $$$$; \  	  for x in `seq 1 $(NUMRUNS)` ; do \ +	  /usr/bin/env time -p ${PROG} </dev/null >/dev/null ; \  	  /usr/bin/env time -p ${PROG} $< >/dev/null ; \  		  done \  	} 2>&1  | grep 'real' | awk '{print $$2}' | python3 'bench/stats.py' diff --git a/bench/stats.py b/bench/stats.py index 3298099..c244b41 100644 --- a/bench/stats.py +++ b/bench/stats.py @@ -3,7 +3,15 @@  import sys  import statistics -values = [ float(x) for x in sys.stdin.readlines()] +def pairs(l, n): +        return zip(*[l[i::n] for i in range(n)]) + +# data comes in pairs: +#    n - time for running the program with no input +#    m - time for running it with the benchmark input +# we measure (m - n) + +values = [ float(y) - float(x) for (x,y) in pairs(sys.stdin.readlines(),2)]  print("mean = %.4f, median = %.4f, stdev = %.4f" %      (statistics.mean(values), statistics.median(values), diff --git a/benchmarks.md b/benchmarks.md index 3010091..574daf5 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -4,23 +4,30 @@ Some benchmarks, run on an ancient Thinkpad running Intel Core 2 Duo at 2GHz.  |Implementation     |  Time (sec)| Factor  |  |-------------------|-----------:|--------:| -| Markdown.pl       | 2921.30    | 14606.5 | -| kramdown          | 20.76      |   103.8 | -| PHP markdown      | 20.475     |   102.4 | -| lunamark          | 6.195      |    40.0 | -| cheapskate        | 5.645      |    28.2 | -| peg-markdown      | 5.330      |    26.7 | -| **commonmark.js** | 2.730      |    13.6 | -| marked            | 1.870      |     9.4 | -| discount          | 1.660      |     8.3 | -| **cmark**         | 0.320      |     1.6 | +| Markdown.pl       | 2921.24    | 14606.2 | +| PHP markdown      | 20.85      |   104.3 | +| kramdown          | 20.83      |   104.1 | +| lunamark          | 6.295      |    31.5 | +| cheapskate        | 5.760      |    28.8 | +| peg-markdown      | 5.450      |    27.3 | +| **commonmark.js** | 2.675      |    13.4 | +| marked            | 1.855      |     9.3 | +| discount          | 1.705      |     8.5 | +| **cmark**         | 0.315      |     1.6 |  | sundown           | 0.200      |     1.0 | +  To run these benchmarks, use `make bench PROG=/path/to/program`.  The input text is a 10MB Markdown file built by concatenating 20 copies  of the Markdown source of the first edition of [*Pro  Git*](https://github.com/progit/progit/tree/master/en) by Scott Chacon. -`time` is used to measure execution speed. +`time` is used to measure execution speed.  The reported +time is the *difference* between the time to run the program +with the benchmark input and the time to run it with no input. +(This procedure ensures that implementation dynamic languages are +not prenalized by startup time.) A median of ten runs is taken.  The +process is reniced to a high priority so that the system doesn't +interrupt runs.  | 
