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())) | ||
