From 5aad2261f7c012aa16a93c7c5bf6bda0081658fb Mon Sep 17 00:00:00 2001 From: Joshua Bakita Date: Sat, 17 Oct 2020 15:36:30 -0400 Subject: 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`. --- dis/clean.sh | 7 ++++++- dis/postproc.sh | 17 ++++++++++++++++- dis/summarize.py | 36 +++++++++++++++++------------------- 3 files changed, 39 insertions(+), 21 deletions(-) (limited to 'dis') 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 @@ -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 +#!/bin/bash +# Input: Output of ./summarize.py +# This script primarially converts an LLC assignment mask to a decimal number +# of assigned cache ways. It also removes the first line (column headers) and the +# last three lines (summary statistics) +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 @@ #!/bin/bash -./summarize.py $1.txt > $1-pp.txt +# This takes the saved output from the timing code in `extra.h`, summarizes +# it, and converts LLC masks to decimals. +# This is compatible with the output of all the current DIS runner scripts. +if echo $1 | grep -q ".txt"; then + echo "Don't include .txt! Exiting..." + exit +fi +if echo $1 | grep -q "\-pp"; then + echo "Don't include -pp! Exiting..." + exit +fi +if [[ ! -f $1.txt ]]; then + echo "Input does not exist. Exiting..." + exit +fi +./summarize.py $1.txt --inf-precision > $1-pp.txt ./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 @@ import sys f = sys.argv[1] +if len(sys.argv) < 2: + print("Usage "+sys.argv[0]+" --inf-precision") res = {} mem_res = {} memw_res = {} @@ -48,24 +50,20 @@ def percentile(N, percent, key=lambda x:x): d1 = key(N[int(c)]) * (k-f) return d0+d1 ## end of http://code.activestate.com/recipes/511478/ }}} -""" -print("Average times:") -for r in res.keys(): - print(res[r]/samples[r]) - -print("Average memory read:") -for r in mem_res.keys(): - print(mem_res[r]/samples[r]) - -print("Average memory write:") -for r in memw_res.keys(): - print(memw_res[r]/samples[r]) - -print("Max times:") -for r in max_res.keys(): - print(max_res[r]) -""" +avg_max = 0 +avg_99th = 0 +avg_avg = 0 print("Name\t\tAverage\t\tMax\t\t99th %\t\tAvg Mem Read\tAvg Mem Write\t") -for r in res.keys(): +for r in sorted(res.keys()): # print(r + "\t\t" + str(res[r]/samples[r]) + "\t\t" + str(max_res[r])) - 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])) + avg_avg += sum(res[r])/len(res[r]) + avg_max += max(res[r]) + avg_99th += percentile(sorted(res[r]), 0.99) + if len(sys.argv) > 2 and sys.argv[2] == "--inf-precision": + 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])) + else: + 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])) + +print("Average average:", avg_avg/len(res.keys())) +print("Average max:", avg_max/len(res.keys())) +print("Average 99th:", avg_99th/len(res.keys())) -- cgit v1.2.2