1 Source Code for Selected GC Benchmarks
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
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
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
23 To obtain a gzip'ed tar file containing source code for all of the
24 benchmarks described below, click here .
27 Description: A null benchmark for testing the implementation-specific
28 run-benchmark procedure.
30 Description: Fritz Henglein's algorithm for dynamic type inference.
31 Three inputs are available for this benchmark. In increasing order of
33 1. dynamic.sch, the code for the benchmark itself
34 2. dynamic-input-small.sch, which is macro-expanded code for the
36 3. dynamic-input-large.sch, which is macro-expanded code for the
37 Twobit compiler and SPARC assembler.
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.
43 Description: A synthetic benchmark originally written in Java by John
44 Ellis, Pete Kovac, and Hans Boehm.
46 Description: Enumeration of directed graphs, possibly written by Jim
47 Miller. Makes heavy use of higher-order procedures.
49 Description: Enumeration of lattices of monotone maps between lattices,
50 obtained from Andrew Wright, possibly written by Wright or Jim Miller.
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).
59 Description: Marc Feeley et al's Pseudoknot benchmark, revised to use
60 R5RS macros instead of implementation-dependent macro systems.
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.
72 Description: This is the nboyer benchmark with a small but effective
73 tweak: shared consing as implemented by Henry Baker.
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.
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
88 Description: The twobit benchmark without the SPARC assembler.
90 ----------------------------------------------------------------------------
92 Last updated 4 April 2001.