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