diff options
author | Joshua Bakita <jbakita@cs.unc.edu> | 2020-10-17 15:36:30 -0400 |
---|---|---|
committer | Joshua Bakita <jbakita@cs.unc.edu> | 2020-10-17 15:46:22 -0400 |
commit | 5aad2261f7c012aa16a93c7c5bf6bda0081658fb (patch) | |
tree | d9ff8f87b4613639c214032eb3fcf14967d76b5f | |
parent | 97c1685def13be3724a6d025f4e12f236777a911 (diff) |
Add updated DIS post-processing scripts from (rejected) RTSS'20 paper
These are compatible with the outputs of all the DIS stressmarks
as instumented with `extra.h`.
-rw-r--r-- | .gitignore | 32 | ||||
-rwxr-xr-x | dis/clean.sh | 7 | ||||
-rwxr-xr-x | dis/postproc.sh | 17 | ||||
-rwxr-xr-x | dis/summarize.py | 36 |
4 files changed, 69 insertions, 23 deletions
@@ -2,16 +2,44 @@ | |||
2 | *.txt | 2 | *.txt |
3 | *.txt.clean | 3 | *.txt.clean |
4 | 4 | ||
5 | # Ignore DIS benchmarks | 5 | # Ignore DIS benchmark binaries |
6 | **/field | 6 | **/field |
7 | **/matrix | 7 | **/matrix |
8 | **/neighborhood | 8 | **/neighborhood |
9 | **/pointer | 9 | **/pointer |
10 | **/transitive | 10 | **/transitive |
11 | **/update | 11 | **/update |
12 | # Ignore DIS all-pairs binaries | ||
13 | **/field_all | ||
14 | **/matrix_all | ||
15 | **/neighborhood_all | ||
16 | **/pointer_all | ||
17 | **/transitive_all | ||
18 | **/update_all | ||
12 | 19 | ||
13 | # Ignore Tacle Benchmarks | 20 | # Ignore Tacle Benchmarks |
14 | **/bin/ | 21 | **/adpcm_dec |
22 | **/adpcm_enc | ||
23 | **/ammunition | ||
24 | **/cjpeg_transupp | ||
25 | **/cjpeg_wrbmp | ||
26 | **/dijkstra | ||
27 | **/epic | ||
28 | **/fmref | ||
29 | **/gsm_dec | ||
30 | **/gsm_enc | ||
31 | **/h264_dec | ||
32 | **/huff_enc | ||
33 | **/mpeg2 | ||
34 | **/ndes | ||
35 | **/petrinet | ||
36 | **/rijndael_dec | ||
37 | **/rijndael_enc | ||
38 | **/statemate | ||
39 | **/susan | ||
15 | 40 | ||
16 | # Ignore random walk benchmark | 41 | # Ignore random walk benchmark |
17 | **/random_walk | 42 | **/random_walk |
43 | |||
44 | # Ignore misc debug and build outputs | ||
45 | **/.gdb_history | ||
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())) | ||