| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | #!/usr/bin/env python3# coding=utf-8## StarPU --- Runtime system for heterogeneous multicore architectures.## Copyright (C) 2019-2021  Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria## StarPU is free software; you can redistribute it and/or modify# it under the terms of the GNU Lesser General Public License as published by# the Free Software Foundation; either version 2.1 of the License, or (at# your option) any later version.## StarPU is distributed in the hope that it will be useful, but# WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.## See the GNU Lesser General Public License in COPYING.LGPL for more details.#import sysimport reimport osPROGNAME=sys.argv[0]def usage():    print("Offline tool to draw a communication matrix")    print("")    print("Usage: %s <output_execution>" % PROGNAME)    print("")    print("Options:")    print("	-h, --help          display this help and exit")    print("	-v, --version       output version information and exit")    print("	-png                produce plots in png format (default is pdf)")    print("")    print("Report bugs to <@PACKAGE_BUGREPORT@>")    sys.exit(1)if len(sys.argv) >= 2:    if sys.argv[1] == '-v' or sys.argv[1] == '--version':        print("%s (@PACKAGE_NAME@) @PACKAGE_VERSION@" % PROGNAME)        sys.exit(0)    if sys.argv[1] == '-h' or sys.argv[1] == '--help':        usage()if (len(sys.argv) == 1):    usage()if len(sys.argv) >= 2 and sys.argv[1] == '-png':    outputformat='png'    outputext='png'    outputfile=sys.argv[2]else:    outputformat='pdf color'    outputext='pdf'    outputfile=sys.argv[1]# find the number of nodesnodes=0file = open(outputfile, "r")for line in file.readlines():    match = re.search('\TOTAL', line)    if match:        (node,stuff)=line.split(sep="[")[2].split("]")        if (int(node) > nodes):            nodes=int(node)file.close()nodes=nodes+1# extract volume of comm and bandwidth between all pair of nodesvolumes = [[0 for x in range(nodes)] for y in range(nodes)]bandwidth = [[0 for x in range(nodes)] for y in range(nodes)]file = open(outputfile, "r")for line in file.readlines():    match = re.search('\[starpu_comm_stats]', line)    if match:        match = re.search('TOTAL', line)        if not match:            (head,volB,B,volMB,MB,bwB,B,bwMB,MB) = line.split()            (src,dst)=head.split(sep="[")[2].split(sep="]")[0].split(sep=":")            volumes[int(src)][int(dst)] = float(volB)            bandwidth[int(src)][int(dst)] = float(bwB)file.close()def writeData(filename, nodes, data):    ofile=open(filename, "w")    for dst in range(nodes):        for src in range(nodes):            ofile.write("%f "% data[src][dst])        ofile.write("\n")    ofile.close()def generateGnuplotScript(filename, datafilename, outputfile, nodes):    ofile=open(filename, "w")    srctics=""    dsttics=""    for node in range(nodes-1):        srctics += "\"src%d\" %d, " % (node, node)        dsttics += "\"dst%d\" %d, " % (node, node)    ofile.write("set term %s\n" % outputformat)    ofile.write("set output \"%s.%s\"\n" % (outputfile, outputext))    ofile.write("set view map scale 1\nset style data lines\n")    ofile.write("set palette model RGB defined ( 0 'white', 100 'black' )\n")    ofile.write("set xtics (%s\"src%d\" %d)\n" % (srctics, nodes-1, nodes-1))    ofile.write("set ytics (%s\"dst%d\" %d)\n" % (dsttics, nodes-1, nodes-1))    ofile.write("plot '%s' matrix with image\n" % datafilename)    ofile.close()# generate gnuplot volume data and script filewriteData(outputfile+"_volume.data", nodes, volumes)generateGnuplotScript(outputfile+"_volume.gp", outputfile+"_volume.data", outputfile+"_volume_heatmap", nodes)os.system("gnuplot " + outputfile+"_volume.gp")# generate gnuplot bandwidth data and script filewriteData(outputfile+"_bw.data", nodes, bandwidth)generateGnuplotScript(outputfile+"_bw.gp", outputfile+"_bw.data", outputfile+"_bw_heatmap", nodes)os.system("gnuplot " + outputfile+"_bw.gp")
 |