Merge branch 'master' into boehm-demers-weiser-gc
[bpt/guile.git] / gc-benchmarks / larceny / README
1 Source Code for Selected GC Benchmarks
2
3 These benchmarks are derived from the benchmarks that Lars Hansen used for
4 his thesis on Older-first garbage collection in practice . That thesis
5 contains storage profiles and detailed discussion for most of these
6 benchmarks.
7
8 Portability
9
10 Apart from a run-benchmark procedure, most of these benchmarks are intended
11 to run in any R5RS-conforming implementation of Scheme. (The softscheme
12 benchmark is an exception.) Please report any portability problems that you
13 encounter.
14
15 To find the main entry point(s) of a benchmark, search for calls to
16 run-benchmark, which calculates and reports the run time and any other
17 relevant statistics. The run-benchmark procedure is
18 implementation-dependent; see run-benchmark.chez for an example of how to
19 write it.
20
21 GC Benchmarks
22
23 To obtain a gzip'ed tar file containing source code for all of the
24 benchmarks described below, click here .
25
26 dummy
27 Description: A null benchmark for testing the implementation-specific
28 run-benchmark procedure.
29 dynamic
30 Description: Fritz Henglein's algorithm for dynamic type inference.
31 Three inputs are available for this benchmark. In increasing order of
32 size, they are:
33 1. dynamic.sch, the code for the benchmark itself
34 2. dynamic-input-small.sch, which is macro-expanded code for the
35 Twobit compiler
36 3. dynamic-input-large.sch, which is macro-expanded code for the
37 Twobit compiler and SPARC assembler.
38 earley
39 Description: Earley's context-free parsing algorithm, as implemented by
40 Marc Feeley, given a simple ambiguous grammar, generating all the parse
41 trees for a short input.
42 gcbench
43 Description: A synthetic benchmark originally written in Java by John
44 Ellis, Pete Kovac, and Hans Boehm.
45 graphs
46 Description: Enumeration of directed graphs, possibly written by Jim
47 Miller. Makes heavy use of higher-order procedures.
48 lattice
49 Description: Enumeration of lattices of monotone maps between lattices,
50 obtained from Andrew Wright, possibly written by Wright or Jim Miller.
51 nboyer
52 Description: Bob Boyer's theorem proving benchmark, with a scaling
53 parameter suggested by Boyer, some bug fixes noted by Henry Baker and
54 ourselves, and rewritten to use a more reasonable representation for
55 the database (with constant-time lookups) instead of property lists
56 (which gave linear-time lookups for the most widely distributed form of
57 the boyer benchmark in Scheme).
58 nucleic2
59 Description: Marc Feeley et al's Pseudoknot benchmark, revised to use
60 R5RS macros instead of implementation-dependent macro systems.
61 perm
62 Description: Zaks's algorithm for generating a list of permutations.
63 This is a diabolical garbage collection benchmark with four parameters
64 M, N, K, and L. The MpermNKL benchmark allocates a queue of size K and
65 then performs M iterations of the following operation: Fill the queue
66 with individually computed copies of all permutations of a list of size
67 N, and then remove the oldest L copies from the queue. At the end of
68 each iteration, the oldest L/K of the live storage becomes garbage, and
69 object lifetimes are distributed uniformly between two volumes that
70 depend upon N, K, and L.
71 sboyer
72 Description: This is the nboyer benchmark with a small but effective
73 tweak: shared consing as implemented by Henry Baker.
74 softscheme
75 Description: Andrew's Wright's soft type inference for Scheme. This
76 software is covered by the GNU GENERAL PUBLIC LICENSE. This benchmark
77 is nonportable because it uses a low-level syntax definition to define
78 a non-hygienic defmacro construct. Requires an input file; the inputs
79 used with the dynamic and twobit benchmarks should be suitable.
80 twobit
81 Description: A portable version of the Twobit Scheme compiler and
82 Larceny's SPARC assembler, written by Will Clinger and Lars Hansen. Two
83 input files are provided:
84 1. twobit-input-short.sch, the nucleic2 benchmark stripped of
85 implementation-specific alternatives to its R4RS macros
86 2. twobit.sch, the twobit benchmark itself
87 twobit-smaller.sch
88 Description: The twobit benchmark without the SPARC assembler.
89
90 ----------------------------------------------------------------------------
91
92 Last updated 4 April 2001.