问题来源:由于parsec的每个基准测试程序运行后,都会生成stats.txt文件,为了便于查看和对比sim_seconds,host_seconds等信息,最终将结果导入到excel中,在excel中便可通过图表等形式查看各个指标的对比结果。
参考:Excel生成的方法
数据抽取的代码如下:
package datatools; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import jxl.write.WriteException; public class DataExtract { public static void main(String[] args) throws IOException { String filepath = "C:/Users/fandroid/Desktop/testdata"; //测试集统计结果目录 String targetfile = "stats.txt"; //待抽取数据的文件名 String[] keywords = {"sim_seconds", "host_seconds"}; //统计包含此参数的数据,可统计多行数据 int region = 1; //statistics region eg: Begin/End pair String outputpath = "F:/sram.xls"; //output excel path String sheetname = "sram"; DataExtract de = new DataExtract(); double[][] datas = de.extract(keywords, filepath, targetfile, region); for(int i=0;i<datas.length;i++) { for(int j=0;j<datas[i].length;j++) { System.out.print(datas[i][j] + " "); } System.out.println(); } //output data into excel File filewrite = new File(outputpath); filewrite.createNewFile(); OutputStream os = new FileOutputStream(filewrite); ExcelData me = new ExcelData(); try { me.createExcel(os, sheetname, keywords, datas); } catch (WriteException e) { e.printStackTrace(); } } /* * Used to extract the specific statistics of the keywords * @param keywords * the specific info you want to check * @param filepath * where the whole benchmark is * @param targetfile * the specific file you want to extract. eg: stats.txt * @param region * which region you want to extraxt? eg: Begin/End pair */ public double[][] extract(String keywords[], String filepath, String targetfile, int region) throws IOException { BufferedReader br = null; String s = null; int j = 0; DataExtract de = new DataExtract(); Map<String, String> map = de.getFile(filepath, targetfile); Iterator iter = map.keySet().iterator(); double[][] darray = new double[keywords.length][map.size()]; while(iter.hasNext()) { //遍历单个基准程序,分别统计每个基准程序中相应的字段keywords int b = 0; //region counter Object key = iter.next(); String dir = map.get(key); br = new BufferedReader(new FileReader(new File(dir))); while((s = br.readLine()) != null) { if(s.contains("Begin Simulation Statistics")) { b++; } if(b == region) { //have found the statistic region for(int i = 0; i<keywords.length; i++) { if(s.contains(keywords[i])) { String t = s.substring(s.indexOf(0x0020)).trim(); //abandon the start info of the line double data = Double.parseDouble(t.substring(0, t.indexOf(0x0020))); //get the double data darray[i][j] = data; //System.out.println(data); } } } } j++; br.close(); } return darray; } /* * 用于读取某个路径下的所有测试集,然后返回测试集与对应统计数据的路径 like <"01","d:/01black/stats.txt"> */ public Map<String, String> getFile(String filepath, String targetfile) { Map<String, String> map = new LinkedHashMap<String, String>(); File dir = new File(filepath); File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { map.put(files[i].getName().substring(0, 2), files[i].getAbsolutePath() + "\\" + targetfile); } return map; } }
package datatools; import java.io.*; import java.util.Calendar; import java.util.Date; import jxl.Workbook; import jxl.format.Colour; import jxl.format.UnderlineStyle; import jxl.write.Boolean; import jxl.write.DateFormats; import jxl.write.DateTime; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class ExcelData { //根据keywords按行抽取数据,生成每行keywords对应的数据 public void createExcelByRow(OutputStream os, String sheetname, String keywords[], double[][] datas) throws WriteException, IOException { //创建工作薄 WritableWorkbook workbook = Workbook.createWorkbook(os); //创建新的一页 WritableSheet sheet = workbook.createSheet(sheetname, 0); //创建parsec2.1测试用例集 Label formate = new Label(0,0,"TestCase"); sheet.addCell(formate); Label black01 = new Label(1,0,"blackscholes"); sheet.addCell(black01); Label body02 = new Label(2,0,"bodytrack"); sheet.addCell(body02); Label canneal03 = new Label(3,0,"canneal"); sheet.addCell(canneal03); Label dedup04 = new Label(4,0,"dedup"); sheet.addCell(dedup04); Label facesim05 = new Label(5,0,"facesim"); sheet.addCell(facesim05); Label ferret06 = new Label(6,0,"ferret"); sheet.addCell(ferret06); Label fluid07 = new Label(7,0,"fluidanimate"); sheet.addCell(fluid07); Label freq08 = new Label(8,0,"freqmine"); sheet.addCell(freq08); Label stream09 = new Label(9,0,"streamcluster"); sheet.addCell(stream09); Label swap10 = new Label(10,0,"swaptions"); sheet.addCell(swap10); Label vips11 = new Label(11,0,"vips"); sheet.addCell(vips11); Label x26412 = new Label(12,0,"x264"); sheet.addCell(x26412); for(int i=0; i<keywords.length; i++) { Label word = new Label(0, i+1, keywords[i]); sheet.addCell(word); } for(int i=0;i<datas.length;i++) { for(int j=0;j<datas[i].length;j++) { Number number = new Number(j+1, i+1, datas[i][j]); sheet.addCell(number); } } //把创建的内容写入到输出流中,并关闭输出流 workbook.write(); workbook.close(); os.close(); } //根据keywords按列抽取数据,生成每行keywords对应的数据 public void createExcelByColumn(OutputStream os, String sheetname, String keywords[], double[][] datas) throws WriteException, IOException { //创建工作薄 WritableWorkbook workbook = Workbook.createWorkbook(os); //创建新的一页 WritableSheet sheet = workbook.createSheet(sheetname, 0); //创建parsec2.1测试用例集 Label formate = new Label(0,0,"TestCase"); sheet.addCell(formate); Label black01 = new Label(0,1,"blackscholes"); sheet.addCell(black01); Label body02 = new Label(0,2,"bodytrack"); sheet.addCell(body02); Label canneal03 = new Label(0,3,"canneal"); sheet.addCell(canneal03); Label dedup04 = new Label(0,4,"dedup"); sheet.addCell(dedup04); Label facesim05 = new Label(0,5,"facesim"); sheet.addCell(facesim05); Label ferret06 = new Label(0,6,"ferret"); sheet.addCell(ferret06); Label fluid07 = new Label(0,7,"fluidanimate"); sheet.addCell(fluid07); Label freq08 = new Label(0,8,"freqmine"); sheet.addCell(freq08); Label stream09 = new Label(0,9,"streamcluster"); sheet.addCell(stream09); Label swap10 = new Label(0,10,"swaptions"); sheet.addCell(swap10); Label vips11 = new Label(0,11,"vips"); sheet.addCell(vips11); Label x26412 = new Label(0,12,"x264"); sheet.addCell(x26412); for(int i=0; i<keywords.length; i++) { Label word = new Label(i+1, 0, keywords[i]); sheet.addCell(word); } for(int i=0;i<datas.length;i++) { for(int j=0;j<datas[i].length;j++) { Number number = new Number(i+1, j+1, datas[i][j]); sheet.addCell(number); } } //把创建的内容写入到输出流中,并关闭输出流 workbook.write(); workbook.close(); os.close(); } }
抽取数据后的运行效果如下: