|
|
- #####################################################################
- # CS:APP Data Lab
- # Directions to Instructors
- #
- # May 31, 2011: Now includes the "Beat the Prof" contest
- #
- # Copyright (c) 2002-2018, R. Bryant and D. O'Hallaron
- ######################################################################
-
- This directory contains the files that you will need to run the CS:APP
- Data Lab, which helps develops the student's understanding of bit
- representations, two's complement arithmetic, and IEEE floating point.
-
- For fun, we've also provided a new user-level HTTP-based "Beat the
- Prof" contest that replaces the old email-based version. The new
- contest is completely self-contained and does not require root
- password. The only requirement is that you have a user account on a
- Linux machine with an IP address.
-
- System requirements: Uses bison and flex to build dlc.
-
- ************
- 1. Overview
- ************
-
- In this lab, students work on a C file, called bits.c, that consists
- of a series of programming "puzzles". Each puzzle is an empty
- function body that must be completed so that it implements a specified
- mathematical function, such as "absolute value". Students must solve
- the non-floating point puzzles using only straight-line C code and a
- restricted set of C arithmetic and logical operators. For the
- floating-point puzzles they can use conditionals and arbitrary
- operators.
-
- Students use the following three tools to check their work.
- Instructors use the same tools to assign grades.
-
- 1. dlc: A "data lab compiler" that checks each function in bits.c for
- compliance with the coding guidelines, checking that the students use
- less than the maximum number of operators, that they use only
- straight-line code, and that they use only legal operators. The
- sources and a Linux binary are included with the lab.
-
- 2. btest: A test harness that checks the functions in bits.c for
- correctness. This tool has been significantly improved, now checking
- wide swaths around the edge cases for integers and floating point
- representations such as 0, Tmin, denorm-norm boundary, and inf.
-
- 3. driver.pl: A autograding driver program that uses dlc and btest to
- check each test function in bits.c for correctness and adherence to
- the coding guidelines
-
- The default version of the lab consists of 15 puzzles, in
- ./src/selections.c, chosen from a set of 73 standard puzzles defined
- in the directory ./src/puzzles/. You can customize the lab from term
- to term by choosing a different set of puzzles from the standard set
- of puzzles.
-
- You can also define new puzzles of your own and add them to the
- standard set. See ./src/README for instructions on how to add new
- puzzles to the standard set.
-
- NOTE: If you define new puzzles, please send them to me (Dave
- O'Hallaron, droh@cs.cmu.edu) so that I can add them to the standard
- set of puzzles in the data lab distribution.
-
- ********
- 2. Files
- ********
-
- All CS:APP labs have the same simple top-level directory structure:
-
- Makefile Builds the entire lab.
- README This file.
- src/ Contains all source files for the lab.
- datalab-handout/ Handout directory that goes to the students. Generated
- by the Makefile from files in ./src. Never modify anything
- in this directory.
- grade/ Autograding scripts that instructors can use to
- grade student handins.
- writeup/ Sample Latex lab writeup.
- contest/ Everything needed for the optional "Beat the Prof" contest.
-
- ********************
- 3. Building the Lab
- *******************
-
- Step 0. If you decide to run the "Beat the Prof" contest (section 5),
- then edit the ./contest/Contest.pm file so that the driver knows where
- to send the results. See ./contest/README for the simple
- instructions. If you decide *not* to offer the contest, then do
- nothing in this step.
-
- Step 1. Select the puzzles you want to include by editing the file
- ./src/selections.c.
-
- The default ./src/selections.c comes from a previous instance of the
- Data Lab at CMU. The file ./src/selections-all.c contains the
- complete list of puzzles to choose from.
-
- Step 2. Modify the Latex lab writeup in ./writeup/datalab.tex to
- tailor it for your course.
-
- Step 3. Type the following in the current directory:
- unix> make clean
- unix> make
-
- The Makefile generates the btest source files, builds the dlc binary
- (if necessary), formats the lab writeup, and then copies btest, the
- dlc binary, and the driver to the handout directory. After that, it
- builds a tarfile of the handout directory (in ./datalab-handout.tar)
- that you can then hand out to students.
-
- Note on Binary Portability: dlc is distributed in the datalab-handout
- directory as a binary. Linux binaries are not always portable across
- distributions due to different versions of dynamic libraries. You'll
- need to be careful to compile dlc on a machine that is compatible with
- those that the students will be using.
-
- Note: Running "make" also automatically generates the solutions to the
- puzzles, which you can find in ./src/bits.c and ./src/bits.c-solution.
-
-
- ******************
- 4. Grading the Lab
- ******************
-
- There is a handy autograder script that automatically grades your
- students' handins. See ./grade/README for instructions.
-
- **************************
- 5. "Beat the Prof" Contest
- **************************
-
- For fun, we've included an optional "Beat the Prof" contest, where
- students compete against themselves and the instructor. The goal is to
- solve each Data Lab puzzle using the fewest number of
- operators. Students who match or beat the instructor's operator count
- for each puzzle are winners. See ./contest/README for the simple
- instructions on how to set up the contest.
-
- NOTE: The contest is completely optional. Whether you decide to
- offer it or not has no affect on how you build and distribute the lab.
-
- NOTE: If you do decide to offer the contest, then you should configure
- the contest *before* you build the lab, so that the driver knows the
- server and port to send the contest results of each student (using the
- constants defined in the ./src/Driverhdrs.pm file, which is
- autogenerated from the ./contest/Contest.pm config file).
-
- If you decide to offer the contest *after* you've built and handed out
- the lab to the students, you're still OK:
-
- 1) Configure the contest as described in contest/Makefile
-
- 2) Rebuild the lab in the usual way:
- linux> cd datalab
- linux> make
-
- 3) Distribute the new ./src/Driverhdrs.pm file to the students.
-
-
- ***************************
- 6. Experimental BDD checker
- ***************************
-
- For fun, we have included an experimental correctness checker based on
- binary decision diagrams (BDDs) (R. E. Bryant, IEEE Transactions on
- Computers, August, 1986) that uses the CUDD BDD package from the
- University of Colorado. The BDD checker does an exhaustive test of the
- test functions in bits.c, formally verifying the correctness of each
- test function against a reference solution for *ALL* possible input
- values. For functions that differ from the reference solution, the BDD
- checker produces a counterexample in the form of a set of function
- arguments that cause the test solution to differ from the reference
- solution.
-
- The sources are included in ./src/bddcheck. To compile:
-
- unix> cd src/bddcheck
- unix> make clean
- unix> make
-
- To use BDDs to check ./src/bits.c for correctness:
-
- unix> cd src
- unix> ./bddcheck/check.pl # with error messages and counterexamples
- unix> ./bddcheck/check.pl -g # compact tabular output with no error messages
-
- Note that check.pl must be run from the parent directory of ./bddcheck.
-
- We've been using this BDD checker instead of btest at CMU for several
- years and the code appears to be stable. The main weakness is in the
- Perl code that extracts the functions from bits.c. It usually works,
- but some things -- such as calls to other functions, or functions that
- don't end with a single brace -- confuse it. So we're reluctant to
- make it the default checker for the distributed CS:APP labs. However,
- if you have any questions about the correctness of a particular
- solution, then this is the authoritative way to decide.
-
- Please send any comments about the BDD checker to randy.bryant@cs.cmu.edu.
-
|