BRASS Research Group


TCOVSUIF 2.0

The old message is: TCOVSUIF x.x is no longer supported. gcc has changed the format of the output that a program produces when compiled with gcc -a -ggdb so that it can no longer be used.

The new message is, I've had reports from users that the ``current'' gcc -a -ggdb format reverted so that tcovsuif is still useful. I haven't checked it out (I gotta graduate soon!). Any feedback is useful!


The old version of TCOVSUIF is here.

TCOVSUIF is a simple profiling system for use with the SUIF Compiler System from Stanford University. Basically, it takes the basic block counts produced by an executable compiled with gcc -a, correlates that information with the tree_nodes in the SUIF representation of the program, and records that information in annotations in the SUIF.

Requirements:

- Solaris or SunOS (gcc does not support the `-a' option on other systems)
- SUIF 1.1.2 (1.1.1 seems to work but has not been thoroughly tested)

Improvements over old version of TCOVSUIF:

- Does not require cc, acc, or tcov
- Requires no modifications to existing SUIF passes

tcovsuif-2.0b0.tar.gz
The current gzip'ed beta distribution (21kB)
tcovsuif-2.0b0.tar.zip
The current zip'ed beta distribution (21kB)
tcovsuif-2.0b0.tar
The current uncompressed beta distribution (110kB)
README
Describes installation and use
README.annote
Documents the profiling annotations added to the SUIF files
tcovsuif.ps
Paper from SUIF workshop proceedings (88kB)
(NB: talks about old version of TCOVSUIF)
tcovsuif.fm.ps
Slides from SUIF workshop talk (77kB)
(NB: talks about old version of TCOVSUIF)
Tim Callahan, timothyc at cs.berkeley.edu
Contact for TCOVSUIF comments and bugs

Example Uses

We use the profiling information for doing cost/benefit analyses to decide which parts of a program should be mapped to reconfigurable hardware resources. At the coarse level, the number of times a loop executes gives some indication of how significant it is to overall execution time.

At a finer level, we use a form of hyperblock scheduling [1] (something like trace scheduling but extended for architectures supporting predicated execution), so we use the profiling information to help decide which basic blocks should be included in the hyperblock -- this hyperblock is what gets implemented in the reconfigurable hardware. See this paper for more info or this web page for more general information.

[1] "Effective Compiler Support for Predicated Execution Using the Hyperblock", Scott Mahlke & others in the IMPACT Compiler Group, MICRO'25.


[BRASS Home] [Projects] [Class] [Documents] [People] [Contact] [Sponsors] [Links]