Skip to content

Commit 16055f9

Browse files
committed
Improve analysis scripts
1 parent f4dd950 commit 16055f9

File tree

3 files changed

+47
-8
lines changed

3 files changed

+47
-8
lines changed

source-code/mpi4py/analyze_mpifitness_data.py

+13-6
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,33 @@
77

88

99
def accumulate(data_file):
10-
regex = re.compile(r'^([a-z]+).+?:\s+(\d+(?:\.\d+)(?:e[+-]\d+)?)')
10+
regex = re.compile(r'^([a-z]+).+?(\d+\.\d+):\s+(\d+(?:\.\d+)(?:e[+-]\d+)?)')
1111
timings = dict()
12+
times = dict()
1213
for line in data_file:
1314
match = regex.search(line)
1415
if match:
1516
test = match.group(1)
1617
time = float(match.group(2))
18+
duration = float(match.group(3))
1719
if test not in timings:
1820
timings[test] = list()
19-
timings[test].append(time)
20-
return timings
21+
times[test] = list()
22+
timings[test].append(duration)
23+
times[test].append(time)
24+
data = dict()
25+
for test in timings:
26+
data[test] = np.array([times[test], timings[test]]).T
27+
return data
2128

2229

23-
def print_stats(test, data_list):
30+
def print_stats(test, data):
2431
print(f'{test}:')
25-
data = np.array(data_list)
2632
print(f' min: {data.min()}')
2733
print(f' median: {np.median(data)}')
2834
print(f' mean: {data.mean()}')
2935
print(f' max: {data.max()}')
36+
print(f' stddev: {np.std(data)}')
3037
print(f' n: {len(data)}')
3138

3239

@@ -36,7 +43,7 @@ def main():
3643
options = arg_parser.parse_args()
3744
timings = accumulate(options.file)
3845
for test, data_list in timings.items():
39-
print_stats(test, data_list)
46+
print_stats(test, data_list[:, 1])
4047
return 0
4148

4249

source-code/mpi4py/plot_time_distribution.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ def main():
2121
arg_parser.add_argument('--log', action='store_true', help='use log x-axis')
2222
options = arg_parser.parse_args()
2323
timings = accumulate(options.file)
24+
data = timings[options.test][:, 1]
2425
if options.rug:
25-
grid = sns.distplot(timings[options.test], rug=True, hist=False)
26+
grid = sns.distplot(data, rug=True, hist=False)
2627
else:
27-
grid = sns.distplot(timings[options.test], bins=options.bins)
28+
grid = sns.distplot(data, bins=options.bins)
2829
if options.log:
2930
grid.set(xscale='log')
3031
grid.set(title=options.test)

source-code/mpi4py/plot_timeline.py

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/usr/bin/env python
2+
3+
from argparse import ArgumentParser, FileType
4+
import matplotlib.pyplot as plt
5+
import seaborn as sns
6+
import sys
7+
from analyze_mpifitness_data import accumulate
8+
9+
10+
def main():
11+
arg_parser = ArgumentParser(description='plot MPI time distirbution')
12+
arg_parser.add_argument('--file', required=True, type=FileType('r'),
13+
help='file to plot data from')
14+
arg_parser.add_argument('--test', required=True,
15+
choices=['pingpong', 'bcast', 'scatter', 'gather',
16+
'alltoall', 'reduce'],
17+
help='test to visualize')
18+
arg_parser.add_argument('--log', action='store_true', help='use log x-axis')
19+
options = arg_parser.parse_args()
20+
timings = accumulate(options.file)
21+
data = timings[options.test]
22+
grid = sns.scatterplot(x=(data[:, 0] - data[0, 0]), y=data[:, 1], alpha=0.6)
23+
if options.log:
24+
grid.set(yscale='log')
25+
grid.set(title=options.test)
26+
plt.show()
27+
return 0
28+
29+
30+
if __name__ == '__main__':
31+
sys.exit(main())

0 commit comments

Comments
 (0)