mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			107 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| # Daniel Torres 2022
 | |
| # SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
 | |
| 
 | |
| import subprocess
 | |
| import sys
 | |
| import json
 | |
| import plotly.graph_objects as go
 | |
| from plotly.subplots import make_subplots
 | |
| 
 | |
| debug = True
 | |
| 
 | |
| def loadCoremark():
 | |
|     """loads the coremark data dictionary"""
 | |
|     coremarkPath = "riscv-coremark/work/coremark.sim.log"
 | |
|     
 | |
|     keywordlist = ["CoreMark 1.0", "CoreMark Size", "MTIME", "MINSTRET", "Branches Miss Predictions", "BTB Misses"]
 | |
|     for keyword in keywordlist:
 | |
|         bashInst = "cat " + coremarkPath + " | grep \"" + keyword +  "\" | cut -d \':\' -f 2 | cut -d \" \" -f 2 | tail -1"
 | |
|         result = subprocess.run(bashInst, stdout=subprocess.PIPE, shell=True)
 | |
|         if (debug): print(result)
 | |
|         coremarkData[keyword] = int(result.stdout)
 | |
|     if (debug): print(coremarkData)
 | |
|     return coremarkData
 | |
| 
 | |
| def loadEmbench(embenchPath, embenchData):
 | |
|     """loads the embench data dictionary"""
 | |
|     f = open(embenchPath)
 | |
|     embenchData = json.load(f)
 | |
|     if (debug): print(embenchData)
 | |
|     return embenchData
 | |
| 
 | |
| def graphEmbench(embenchSpeedOpt_SpeedData, embenchSizeOpt_SpeedData, embenchSpeedOpt_SizeData, embenchSizeOpt_SizeData):
 | |
|     fig = make_subplots(rows=2, cols=4,
 | |
|                         # subplot_titles( "Wally's Embench Cycles and Instret (with -O2)","Wally's Embench Cycles Per Instruction (with -O2)"))
 | |
|                         subplot_titles=( "Wally's Embench Cycles and Instret (with -O2)","Wally's Embench Cycles Per Instruction (with -O2)","Wally's Embench Speed Score (with -O2)","Wally's Embench Size Score (with -O2)",
 | |
|                                      "Wally's Embench Cycles and Instret (with -Os)","Wally's Embench Cycles Per Instruction (with -Os)","Wally's Embench Speed Score (with -Os)","Wally's Embench Size Score (with -Os)"))
 | |
|     
 | |
|     ydata = list(embenchSpeedOpt_SpeedData["speed results"]["detailed speed results"].keys()) + ["speed geometric mean","speed geometric sd","speed geometric range"]
 | |
|     xdata = list(embenchSpeedOpt_SpeedData["speed results"]["detailed speed results"].values()) + [embenchSpeedOpt_SpeedData["speed results"]["speed geometric mean"],embenchSpeedOpt_SpeedData["speed results"]["speed geometric sd"],embenchSpeedOpt_SpeedData["speed results"]["speed geometric range"]]
 | |
| 
 | |
|     fig.add_trace( go.Bar(
 | |
|             y=ydata,
 | |
|             x=xdata,
 | |
|             textposition='outside', text=xdata,
 | |
|             orientation='h'),
 | |
|             row=1,col=3)
 | |
| 
 | |
|     ydata = list(embenchSizeOpt_SpeedData["speed results"]["detailed speed results"].keys()) + ["speed geometric mean","speed geometric sd","speed geometric range"]
 | |
|     xdata = list(embenchSizeOpt_SpeedData["speed results"]["detailed speed results"].values()) + [embenchSizeOpt_SpeedData["speed results"]["speed geometric mean"],embenchSizeOpt_SpeedData["speed results"]["speed geometric sd"],embenchSizeOpt_SpeedData["speed results"]["speed geometric range"]]
 | |
| 
 | |
|     fig.add_trace( go.Bar(
 | |
|             y=ydata,
 | |
|             x=xdata,
 | |
|             textposition='outside', text=xdata,
 | |
|             orientation='h'),
 | |
|             row=2,col=3)
 | |
| 
 | |
|     
 | |
|     ydata = list(embenchSpeedOpt_SizeData["size results"]["detailed size results"].keys()) + ["size geometric mean","size geometric sd","size geometric range"]
 | |
|     xdata = list(embenchSpeedOpt_SizeData["size results"]["detailed size results"].values()) + [embenchSpeedOpt_SizeData["size results"]["size geometric mean"],embenchSpeedOpt_SizeData["size results"]["size geometric sd"],embenchSpeedOpt_SizeData["size results"]["size geometric range"]]
 | |
| 
 | |
|     fig.add_trace( go.Bar(
 | |
|             y=ydata,
 | |
|             x=xdata,
 | |
|             textposition='outside', text=xdata,
 | |
|             orientation='h'),
 | |
|             row=1,col=4)
 | |
| 
 | |
|     ydata = list(embenchSizeOpt_SizeData["size results"]["detailed size results"].keys()) + ["size geometric mean","size geometric sd","size geometric range"]
 | |
|     xdata = list(embenchSizeOpt_SizeData["size results"]["detailed size results"].values()) + [embenchSizeOpt_SizeData["size results"]["size geometric mean"],embenchSizeOpt_SizeData["size results"]["size geometric sd"],embenchSizeOpt_SizeData["size results"]["size geometric range"]]
 | |
| 
 | |
|     fig.add_trace( go.Bar(
 | |
|             y=ydata,
 | |
|             x=xdata,
 | |
|             textposition='outside', text=xdata,
 | |
|             orientation='h'),
 | |
|             row=2,col=4)
 | |
|         
 | |
|     #         facet_row="Score", facet_col="Optimization Flag",
 | |
|     #         category_orders={"Score": ["Cycles & Instr", "CPI", "SpeedScore", "SizeScore"],
 | |
|     #                           "Optimization Flag": ["O2", "Os"]}),
 | |
|     #         orientation='h')
 | |
|     fig.update_layout(height=1500,width=4000, title_text="Wally Embench Scores", showlegend=False)
 | |
| 
 | |
|     fig.write_image("figure.png", engine="kaleido")
 | |
|     # fig.show()
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     coremarkData = {}
 | |
|     embenchSizeOpt_SpeedData = {}
 | |
|     embenchSpeedOpt_SpeedData = {}
 | |
|     embenchSizeOpt_SizeData = {}
 | |
|     embenchSpeedOpt_SizeData = {}
 | |
|     # coremarkData = loadCoremark()
 | |
|     embenchSpeedOpt_SpeedData = loadEmbench("embench/wallySpeedOpt_speed.json", embenchSpeedOpt_SpeedData)
 | |
|     embenchSizeOpt_SpeedData = loadEmbench("embench/wallySizeOpt_speed.json", embenchSizeOpt_SpeedData)
 | |
|     embenchSpeedOpt_SizeData = loadEmbench("embench/wallySpeedOpt_size.json", embenchSpeedOpt_SizeData)
 | |
|     embenchSizeOpt_SizeData = loadEmbench("embench/wallySizeOpt_size.json", embenchSizeOpt_SizeData)
 | |
| 
 | |
|     graphEmbench(embenchSpeedOpt_SpeedData, embenchSizeOpt_SpeedData, embenchSpeedOpt_SizeData, embenchSizeOpt_SizeData)
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     sys.exit(main())
 | |
| 
 | |
| # "ls -Art ../addins/embench-iot/logs/*speed* | tail -n 1 " # gets most recent embench speed log |