diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2019-08-24 17:58:18 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2019-08-24 17:58:18 +0200 |
| commit | de7208a60eca11aa8014e3a9b698e092322aea88 (patch) | |
| tree | 13323f839f63d0d363517af81de317f0ec17a415 /src/benchmarks/espresso/cvrmisc.c | |
| parent | 77ac9ce0a5c55d4f79f8fb8f7daa59ddb53cb507 (diff) | |
| download | allocbench-de7208a60eca11aa8014e3a9b698e092322aea88.tar.gz allocbench-de7208a60eca11aa8014e3a9b698e092322aea88.zip | |
add espresso benchmark
Diffstat (limited to 'src/benchmarks/espresso/cvrmisc.c')
| -rw-r--r-- | src/benchmarks/espresso/cvrmisc.c | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/src/benchmarks/espresso/cvrmisc.c b/src/benchmarks/espresso/cvrmisc.c new file mode 100644 index 0000000..f0be0c3 --- /dev/null +++ b/src/benchmarks/espresso/cvrmisc.c @@ -0,0 +1,140 @@ +#include "espresso.h" + + +/* cost -- compute the cost of a cover */ +void cover_cost(F, cost) +IN pcover F; +INOUT pcost cost; +{ + register pcube p, last; + pcube *T; + int var; + + /* use the routine used by cofactor to decide splitting variables */ + massive_count(T = cube1list(F)); + free_cubelist(T); + + cost->cubes = F->count; + cost->total = cost->in = cost->out = cost->mv = cost->primes = 0; + + /* Count transistors (zeros) for each binary variable (inputs) */ + for(var = 0; var < cube.num_binary_vars; var++) + cost->in += cdata.var_zeros[var]; + + /* Count transistors for each mv variable based on sparse/dense */ + for(var = cube.num_binary_vars; var < cube.num_vars - 1; var++) + if (cube.sparse[var]) + cost->mv += F->count * cube.part_size[var] - cdata.var_zeros[var]; + else + cost->mv += cdata.var_zeros[var]; + + /* Count the transistors (ones) for the output variable */ + if (cube.num_binary_vars != cube.num_vars) { + var = cube.num_vars - 1; + cost->out = F->count * cube.part_size[var] - cdata.var_zeros[var]; + } + + /* Count the number of nonprime cubes */ + /* + THIS IS A BUG! p is never set! EDB... + + foreach_set(F, last, p) + cost->primes += TESTP(p, PRIME) != 0; + */ + + /* Count the total number of literals */ + cost->total = cost->in + cost->out + cost->mv; +} + + +/* fmt_cost -- return a string which reports the "cost" of a cover */ +char *fmt_cost(cost) +IN pcost cost; +{ + static char s[200]; + + if (cube.num_binary_vars == cube.num_vars - 1) { + int v1 = cost->primes + 1; + sprintf (s, "%d", v1); + (void) sprintf(s, "c=%d(%d) in=%d out=%d tot=%d", + cost->cubes, cost->cubes - cost->primes, cost->in, + cost->out, cost->total); + } else { + (void) sprintf(s, "c=%d(%d) in=%d mv=%d out=%d", + cost->cubes, cost->cubes - cost->primes, cost->in, + cost->mv, cost->out); + } + return s; +} + + +char *print_cost(F) +IN pcover F; +{ + cost_t cost; + cover_cost(F, &cost); + return fmt_cost(&cost); +} + + +/* copy_cost -- copy a cost function from s to d */ +void copy_cost(s, d) +pcost s, d; +{ + d->cubes = s->cubes; + d->in = s->in; + d->out = s->out; + d->mv = s->mv; + d->total = s->total; + d->primes = s->primes; +} + + +/* size_stamp -- print single line giving the size of a cover */ +void size_stamp(T, name) +IN pcover T; +IN char *name; +{ + printf("# %s\tCost is %s\n", name, print_cost(T)); + (void) fflush(stdout); +} + + +/* print_trace -- print a line reporting size and time after a function */ +void print_trace(T, name, time) +pcover T; +char *name; +long time; +{ + printf("# %s\tTime was %s, cost is %s\n", + name, print_time(time), print_cost(T)); + (void) fflush(stdout); +} + + +/* totals -- add time spent in the function into the totals */ +void totals(time, i, T, cost) +long time; +int i; +pcover T; +pcost cost; +{ + time = ptime() - time; + total_time[i] += time; + total_calls[i]++; + cover_cost(T, cost); + if (trace) { + printf("# %s\tTime was %s, cost is %s\n", + total_name[i], print_time(time), fmt_cost(cost)); + (void) fflush(stdout); + } +} + + +/* fatal -- report fatal error message and take a dive */ +void fatal(s) +char *s; +{ + fprintf(stderr, "espresso: %s\n", s); + exit(1); +} |
