Because we do not want to restrict the user by limiting the set of commands that can be used in running an experiment, our notion of an experiment is very general; it is, in fact, simply an executable. This means that a user may supply, for example, a compiled binary file or an executable shell script as the experiment. This notion of an experiment supports not only different computational contexts but also different programming styles.
An experiment generally consists of three separate stages: setup (Section ), execution (Sections and ), and analysis of results (Section ). Our tool set is designed with these three stages in mind but allows users to bypass any one of the stages so the tools could be used, for example, to help in analyzing existing output files. Each of the tools in our set has a command-line interface following the style of other common Unix tools (Section ). Recognizing that it can be tedious and error-prone to provide a large (or even a small) set of command-line arguments that activate the features one wants to use, all the tools also allow input of some or all arguments from a text file (Section ).