From 1e3af608df7e22e7e347cc8f619a415b6a934059 Mon Sep 17 00:00:00 2001 From: "Peter W. Draper" <p.w.draper@durham.ac.uk> Date: Thu, 26 Sep 2019 17:52:57 +0100 Subject: [PATCH] Add output graphics --- post-process.py | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/post-process.py b/post-process.py index ce70ff1..458fae2 100755 --- a/post-process.py +++ b/post-process.py @@ -28,7 +28,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. """ import matplotlib -matplotlib.use("Agg") +#matplotlib.use("Agg") +import matplotlib.pyplot as plt import numpy import pylab as pl import sys @@ -118,6 +119,7 @@ with open(infile, "r") as fp: nrecvs = nrecvs + 1 # Now output. Note we could have unmatched recv keys, we don't check for that. +msends = [None] * nsends with open(outfile, "w") as fp: fp.write("# send_logticin send_logtic send_injtic send_endtic send_dtic send_step send_rank send_otherrank send_itype send_isubtype send_tag send_size send_nr_tests send_tsum send_tmin send_tmax recv_logticin recv_logtic recv_injtic recv_endtic recv_dtic recv_step recv_rank recv_otherrank recv_itype recv_isubtype recv_tag recv_size recv_nr_tests recv_tsum recv_tmin recv_tmax\n") for key in keysends: @@ -125,11 +127,52 @@ with open(outfile, "w") as fp: if len(keysends[key]) == 1 and len(keyrecvs[key]) == 1: isend = keysends[key][0] irecv = keyrecvs[key][0] + msends[isend] = irecv fp.write(" ".join(sends[isend]) + " " + " ".join(recvs[irecv]) + "\n") else: print "# ERROR: found ", len(keysends[key]), "/", len(keyrecvs[key]), " matches for key: ", key, " should be 1/1" else: print "# ERROR: missing recv key: ", key +print "# Matched sends and recvs written to file: ", outfile + +# Reorder recvs to same order as sends. +recvs = [recvs[i] for i in msends] + +# Do a plot. Display and saves the graphic, uncomment the "Agg" line above to just save. +def doplot(x, y, xlabel, ylabel, title, outpng): + axmax1 = max(x) + axmax2 = max(y) + axmax = max([axmax1, axmax2]) + fig,ax = plt.subplots() + ax.set_xlim(0,axmax) + ax.set_ylim(0,axmax) + ax.plot(x, y, ',') + ax.set_xlabel(xlabel) + ax.set_ylabel(ylabel) + ax.set_title("SWIFTmpistepsim plot: " + title) + fig.tight_layout() + plt.savefig(outpng, bbox_inches="tight") + print "# Saved plot to: ", outpng + plt.show() + +# Plot no. 1: sends injection time against time of local handoff. +send_injects = [float(send[injcol]) for send in [line for line in sends]] +send_ends = [float(send[endcol]) for send in [line for line in sends]] +doplot(send_injects, send_ends, "Message start time", + "Message local completion time", "local send completions", + "local_sends.png") + +# Plot no. 2: recv injection time against time of local handoff. +recv_injects = [float(recv[injcol]) for recv in [line for line in recvs]] +recv_ends = [float(recv[endcol]) for recv in [line for line in recvs]] +doplot(recv_injects, recv_ends, "Message start time", + "Message local completion time", "local recv completions", + "local_recvs.png") + +# Plot no. 3: send injection time against time of remote completion. +doplot(send_injects, recv_ends, "Message start time", + "Global message completion time", "message completion times", + "completions.png") sys.exit(0) -- GitLab