Commit | Line | Data |
---|---|---|
b3d73c46 FD |
1 | #! /usr/bin/python3 |
2 | from subprocess import call | |
9294e9a4 FD |
3 | from collections import defaultdict |
4 | import csv | |
b3d73c46 FD |
5 | import numpy as np |
6 | import pandas as pd | |
9294e9a4 | 7 | import sys |
b3d73c46 FD |
8 | |
9 | def test_case(df): | |
f758d98b FD |
10 | # Duration is in usec |
11 | # usecPecIter = Duration/(average number of iteration per thread) | |
12 | df['usecperiter'] = (df['nbthreads'] * df['duration']) / df['nbiter'] | |
13 | ||
14 | periter_mean = pd.DataFrame({'periter_mean' : | |
15 | df.groupby(['nbthreads', 'tracer', 'testcase','sleeptime'])['usecperiter'].mean()}).reset_index() | |
16 | ||
17 | periter_stdev = pd.DataFrame({'periter_stdev' : | |
18 | df.groupby(['nbthreads', 'tracer', 'testcase','sleeptime'])['usecperiter'].std()}).reset_index() | |
19 | ||
20 | nbiter_mean = pd.DataFrame({'nbiter_mean' : | |
21 | df.groupby(['nbthreads', 'tracer', 'testcase','sleeptime'])['nbiter'].mean()}).reset_index() | |
22 | ||
23 | nbiter_stdev = pd.DataFrame({'nbiter_stdev' : | |
24 | df.groupby(['nbthreads', 'tracer', 'testcase','sleeptime'])['nbiter'].std()}).reset_index() | |
25 | ||
26 | duration_mean = pd.DataFrame({'duration_mean' : | |
27 | df.groupby(['nbthreads', 'tracer', 'testcase','sleeptime'])['duration'].mean()}).reset_index() | |
28 | ||
29 | duration_stdev = pd.DataFrame({'duration_stdev' : | |
30 | df.groupby(['nbthreads', 'tracer', 'testcase','sleeptime'])['duration'].std()}).reset_index() | |
31 | ||
32 | tmp = periter_mean.merge(periter_stdev) | |
33 | ||
34 | tmp = tmp.merge(nbiter_mean) | |
35 | tmp = tmp.merge(nbiter_stdev) | |
36 | ||
37 | tmp = tmp.merge(duration_mean) | |
38 | tmp = tmp.merge(duration_stdev) | |
39 | ||
40 | # if there is any NaN or None value in the DF we raise an exeception | |
41 | if tmp.isnull().values.any(): | |
42 | raise Exception('NaN value found in dataframe') | |
b3d73c46 | 43 | |
b3d73c46 | 44 | for i, row in tmp.iterrows(): |
f758d98b FD |
45 | testcase_name='_'.join([row['tracer'],str(row['nbthreads'])+'thr', 'peritermean']) |
46 | yield( {"name": testcase_name, "result": "pass", "units": "usec/iter", | |
47 | "measurement": str(row['periter_mean'])}) | |
48 | ||
49 | testcase_name='_'.join([row['tracer'],str(row['nbthreads'])+'thr', 'periterstdev']) | |
50 | yield( {"name": testcase_name, "result": "pass", "units": "usec/iter", | |
51 | "measurement": str(row['periter_stdev'])}) | |
52 | ||
53 | testcase_name='_'.join([row['tracer'],str(row['nbthreads'])+'thr', 'nbitermean']) | |
54 | yield( {"name": testcase_name, "result": "pass", "units": "iterations", | |
55 | "measurement": str(row['nbiter_mean'])}) | |
56 | ||
57 | testcase_name='_'.join([row['tracer'],str(row['nbthreads'])+'thr', 'nbiterstdev']) | |
58 | yield( {"name": testcase_name, "result": "pass", "units": "iterations", | |
59 | "measurement": str(row['nbiter_stdev'])}) | |
60 | ||
61 | testcase_name='_'.join([row['tracer'],str(row['nbthreads'])+'thr', 'durationmean']) | |
62 | yield( {"name": testcase_name, "result": "pass", "units": "usec", | |
63 | "measurement": str(row['duration_mean'])}) | |
b3d73c46 | 64 | |
f758d98b FD |
65 | testcase_name='_'.join([row['tracer'],str(row['nbthreads'])+'thr', 'durationstdev']) |
66 | yield( {"name": testcase_name, "result": "pass", "units": "usec", | |
67 | "measurement": str(row['duration_stdev'])}) | |
b3d73c46 FD |
68 | |
69 | testcase_name='_'.join([row['tracer'],str(row['nbthreads'])+'thr', 'memmean']) | |
70 | yield( {"name": testcase_name, "result": "pass", "units": "kB", | |
71 | "measurement": str(row['mem_mean'])}) | |
72 | ||
73 | testcase_name='_'.join([row['tracer'],str(row['nbthreads'])+'thr', 'memstdev']) | |
74 | yield( {"name": testcase_name, "result": "pass", "units": "kB", | |
75 | "measurement": str(row['mem_stdev'])}) | |
76 | ||
77 | ||
78 | def main(): | |
79 | results_file=sys.argv[1] | |
80 | df = pd.read_csv(results_file) | |
9294e9a4 | 81 | results=defaultdict() |
b3d73c46 FD |
82 | data = test_case(df) |
83 | for res in data: | |
84 | call( | |
85 | ['lava-test-case', | |
86 | res['name'], | |
87 | '--result', res['result'], | |
88 | '--measurement', res['measurement'], | |
89 | '--units', res['units']]) | |
90 | ||
9294e9a4 | 91 | # Save the results to write to the CSV file |
f758d98b | 92 | results[res['name']]=res['measurement'] |
9294e9a4 FD |
93 | |
94 | # Write the dictionnary to a csv file where each key is a column | |
95 | with open('processed_results.csv', 'w') as output_csv: | |
96 | dict_csv_write=csv.DictWriter(output_csv, results.keys()) | |
97 | dict_csv_write.writeheader() | |
98 | dict_csv_write.writerow(results) | |
99 | ||
b3d73c46 FD |
100 | if __name__ == '__main__': |
101 | main() |