diff options
Diffstat (limited to 'dis')
-rwxr-xr-x | dis/clean.sh | 7 | ||||
-rwxr-xr-x | dis/postproc.sh | 17 | ||||
-rwxr-xr-x | dis/summarize.py | 36 |
3 files changed, 39 insertions, 21 deletions
diff --git a/dis/clean.sh b/dis/clean.sh index 7c58295..1b6d2f5 100755 --- a/dis/clean.sh +++ b/dis/clean.sh | |||
@@ -1 +1,6 @@ | |||
1 | tail -n +2 $1 | tr "-" " " | sed "s/L3:0=0000;1=0000;2=0000;3=0000/0/" | sed "s/L3:0=0000;1=0000;2=0000;3=0001/1/" | sed "s/L3:0=0000;1=0000;2=0000;3=0003/2/" | sed "s/L3:0=0000;1=0000;2=0000;3=0007/3/" | sed "s/L3:0=0000;1=0000;2=0000;3=000f/4/" | sed "s/L3:0=0000;1=0000;2=0000;3=003f/6/" | sed "s/L3:0=0000;1=0000;2=0000;3=00ff/8/" | sed "s/L3:0=0000;1=0000;2=0000;3=03ff/10/" | sed "s/L3:0=0000;1=0000;2=0000;3=0fff/12/" | sed "s/L3:0=0000;1=0000;2=0000;3=3fff/14/" | sed "s/L3:0=0000;1=0000;2=0000;3=ffff/16/" > $1.clean | 1 | #!/bin/bash |
2 | # Input: Output of ./summarize.py | ||
3 | # This script primarially converts an LLC assignment mask to a decimal number | ||
4 | # of assigned cache ways. It also removes the first line (column headers) and the | ||
5 | # last three lines (summary statistics) | ||
6 | tail -n +2 $1 | head -n -3 | tr "-" " " | tr "+" " " | sed "s/L3:0=0000;1=0000;2=0000;3=0000/0/g" | sed "s/L3:0=0000;1=0000;2=0000;3=0001/1/g" | sed "s/L3:0=0000;1=0000;2=0000;3=0003/2/g" | sed "s/L3:0=0000;1=0000;2=0000;3=0007/3/g" | sed "s/L3:0=0000;1=0000;2=0000;3=000f/4/g" | sed "s/L3:0=0000;1=0000;2=0000;3=001f/5/g" | sed "s/L3:0=0000;1=0000;2=0000;3=003f/6/g" | sed "s/L3:0=0000;1=0000;2=0000;3=007f/7/g" | sed "s/L3:0=0000;1=0000;2=0000;3=00ff/8/g" | sed "s/L3:0=0000;1=0000;2=0000;3=01ff/9/g" | sed "s/L3:0=0000;1=0000;2=0000;3=03ff/10/g" | sed "s/L3:0=0000;1=0000;2=0000;3=07ff/11/g" | sed "s/L3:0=0000;1=0000;2=0000;3=0fff/12/g" | sed "s/L3:0=0000;1=0000;2=0000;3=1fff/13/g" | sed "s/L3:0=0000;1=0000;2=0000;3=3fff/14/g" | sed "s/L3:0=0000;1=0000;2=0000;3=7fff/15/g" | sed "s/L3:0=0000;1=0000;2=0000;3=ffff/16/g" > $1.clean | ||
diff --git a/dis/postproc.sh b/dis/postproc.sh index c5dd1c9..efe6774 100755 --- a/dis/postproc.sh +++ b/dis/postproc.sh | |||
@@ -1,3 +1,18 @@ | |||
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | ./summarize.py $1.txt > $1-pp.txt | 2 | # This takes the saved output from the timing code in `extra.h`, summarizes |
3 | # it, and converts LLC masks to decimals. | ||
4 | # This is compatible with the output of all the current DIS runner scripts. | ||
5 | if echo $1 | grep -q ".txt"; then | ||
6 | echo "Don't include .txt! Exiting..." | ||
7 | exit | ||
8 | fi | ||
9 | if echo $1 | grep -q "\-pp"; then | ||
10 | echo "Don't include -pp! Exiting..." | ||
11 | exit | ||
12 | fi | ||
13 | if [[ ! -f $1.txt ]]; then | ||
14 | echo "Input does not exist. Exiting..." | ||
15 | exit | ||
16 | fi | ||
17 | ./summarize.py $1.txt --inf-precision > $1-pp.txt | ||
3 | ./clean.sh $1-pp.txt | 18 | ./clean.sh $1-pp.txt |
diff --git a/dis/summarize.py b/dis/summarize.py index f8f6929..31dcccc 100755 --- a/dis/summarize.py +++ b/dis/summarize.py | |||
@@ -2,6 +2,8 @@ | |||
2 | import sys | 2 | import sys |
3 | 3 | ||
4 | f = sys.argv[1] | 4 | f = sys.argv[1] |
5 | if len(sys.argv) < 2: | ||
6 | print("Usage "+sys.argv[0]+" <filename> --inf-precision") | ||
5 | res = {} | 7 | res = {} |
6 | mem_res = {} | 8 | mem_res = {} |
7 | memw_res = {} | 9 | memw_res = {} |
@@ -48,24 +50,20 @@ def percentile(N, percent, key=lambda x:x): | |||
48 | d1 = key(N[int(c)]) * (k-f) | 50 | d1 = key(N[int(c)]) * (k-f) |
49 | return d0+d1 | 51 | return d0+d1 |
50 | ## end of http://code.activestate.com/recipes/511478/ }}} | 52 | ## end of http://code.activestate.com/recipes/511478/ }}} |
51 | """ | 53 | avg_max = 0 |
52 | print("Average times:") | 54 | avg_99th = 0 |
53 | for r in res.keys(): | 55 | avg_avg = 0 |
54 | print(res[r]/samples[r]) | ||
55 | |||
56 | print("Average memory read:") | ||
57 | for r in mem_res.keys(): | ||
58 | print(mem_res[r]/samples[r]) | ||
59 | |||
60 | print("Average memory write:") | ||
61 | for r in memw_res.keys(): | ||
62 | print(memw_res[r]/samples[r]) | ||
63 | |||
64 | print("Max times:") | ||
65 | for r in max_res.keys(): | ||
66 | print(max_res[r]) | ||
67 | """ | ||
68 | print("Name\t\tAverage\t\tMax\t\t99th %\t\tAvg Mem Read\tAvg Mem Write\t") | 56 | print("Name\t\tAverage\t\tMax\t\t99th %\t\tAvg Mem Read\tAvg Mem Write\t") |
69 | for r in res.keys(): | 57 | for r in sorted(res.keys()): |
70 | # print(r + "\t\t" + str(res[r]/samples[r]) + "\t\t" + str(max_res[r])) | 58 | # print(r + "\t\t" + str(res[r]/samples[r]) + "\t\t" + str(max_res[r])) |
71 | print("{:12}\t{:>12.0f}\t{:>12.0f}\t{:>12.0f}\t{:>12.0f}\t{:>12.0f}".format(r, sum(res[r])/len(res[r]), max(res[r]), percentile(sorted(res[r]), 0.99), mem_res[r]/samples[r], memw_res[r]/samples[r])) | 59 | avg_avg += sum(res[r])/len(res[r]) |
60 | avg_max += max(res[r]) | ||
61 | avg_99th += percentile(sorted(res[r]), 0.99) | ||
62 | if len(sys.argv) > 2 and sys.argv[2] == "--inf-precision": | ||
63 | print("{:12}\t{:>12.0f}\t{:>12.0f}\t{:>12.0f}\t{:>12.0f}\t{:>12.0f}".format(r, sum(res[r])/len(res[r]), max(res[r]), percentile(sorted(res[r]), 0.99), mem_res[r]/samples[r], memw_res[r]/samples[r])) | ||
64 | else: | ||
65 | print("{:12.12}\t{:>12.0f}\t{:>12.0f}\t{:>12.0f}\t{:>12.0f}\t{:>12.0f}".format(r, sum(res[r])/len(res[r]), max(res[r]), percentile(sorted(res[r]), 0.99), mem_res[r]/samples[r], memw_res[r]/samples[r])) | ||
66 | |||
67 | print("Average average:", avg_avg/len(res.keys())) | ||
68 | print("Average max:", avg_max/len(res.keys())) | ||
69 | print("Average 99th:", avg_99th/len(res.keys())) | ||