Python script: Difference between revisions
Jump to navigation
Jump to search
(Created page with "= GW parallel tutorial = ===parse_yambo.py ()=== #! /usr/bin/env python3 import sys def parse_report(file_report): # parse_timing=False outd={} outd["parallel_s...") |
|||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
= GW parallel tutorial = | = GW parallel tutorial = | ||
===parse_yambo.py | ===parse_yambo.py=== | ||
#! /usr/bin/env python3 | #! /usr/bin/env python3 | ||
import sys | import sys | ||
def parse_report(file_report): | |||
def parse_report(file_report): | |||
# | # | ||
parse_timing=False | parse_timing=False | ||
Line 86: | Line 85: | ||
if parse_timing and "GW(REDUX)" in line: | if parse_timing and "GW(REDUX)" in line: | ||
outd["GW_REDUX_time"] = line.split(":")[1].split("CPU")[0] | outd["GW_REDUX_time"] = line.split(":")[1].split("CPU")[0] | ||
fl.close() | fl.close() | ||
clean_parsed_data(outd) | clean_parsed_data(outd) | ||
# | # | ||
return outd | return outd | ||
def clean_parsed_data(outd): | |||
def clean_parsed_data(outd): | |||
# | # | ||
for key in outd: | for key in outd: | ||
Line 99: | Line 96: | ||
val=val.replace(" ","") | val=val.replace(" ","") | ||
outd[key]=val | outd[key]=val | ||
def print_parsed_data(outd,datafile=None): | |||
def print_parsed_data(outd,datafile=None): | |||
print() | print() | ||
if datafile != None: | if datafile != None: | ||
Line 108: | Line 104: | ||
print(" %20s : %s " % (key, str(outd[key])) ) | print(" %20s : %s " % (key, str(outd[key])) ) | ||
print() | print() | ||
def formatter(val,maxfield=12): | |||
def formatter(val,maxfield=12): | |||
sval=str(val) | sval=str(val) | ||
return " "*(maxfield-len(sval))+sval | return " "*(maxfield-len(sval))+sval | ||
def print_perfGW_data(outd=None): | |||
def print_perfGW_data(outd=None): | |||
# | # | ||
if outd==None: | if outd==None: | ||
Line 131: | Line 125: | ||
print(strout) | print(strout) | ||
return | return | ||
strout = formatter(outd["ncores"],len("# ncores")) | strout = formatter(outd["ncores"],len("# ncores")) | ||
strout+= formatter(outd["mpi_tasks"]) | strout+= formatter(outd["mpi_tasks"]) | ||
Line 150: | Line 143: | ||
print(strout) | print(strout) | ||
return | return | ||
def main(argv): | |||
def main(argv): | |||
# | # | ||
usage_str=''' | usage_str=''' | ||
Usage parse_Yambo.py [-h,--help] [-a, --all] file1 file2... | Usage parse_Yambo.py [-h,--help] [-a, --all] file1 file2... | ||
''' | ''' | ||
# | # | ||
verbose=False | verbose=False | ||
Line 181: | Line 172: | ||
else: | else: | ||
print_perfGW_data(outd) | print_perfGW_data(outd) | ||
if __name__ == "__main__": | |||
if __name__ == "__main__": | |||
main(sys.argv) | main(sys.argv) |
Latest revision as of 10:31, 21 January 2020
GW parallel tutorial
parse_yambo.py
#! /usr/bin/env python3 import sys def parse_report(file_report): # parse_timing=False outd={} outd["parallel_structure"]="" outd["mpi_tasks"]=1 outd["openmp_tasks"]=1 outd["ncores"]=1 outd["completed"]=False # fl=open(file_report,"r") #print ("parsing "+file_report) # for line in fl: # # versioning # if "Version" in line: s=line.split() outd["version"]=s[s.index("Version")+1] if "Revision" in line: s=line.split() outd["revision"]=s[s.index("Revision")+1] if "Hash" in line: s=line.split() outd["hash"]=s[s.index("Hash")+1] # # parallel data # if "CPU-Threads" in line: outd["parallel_structure"]=outd["parallel_structure"]+" " \ +line.split(":")[1].replace("\n"," ") if "MPI CPU" in line: outd["mpi_tasks"]=int(line.split(":")[-1]) if "THREADS " in line: outd["openmp_threads"]=int(line.split(":")[-1]) if "THREADS TOT(max)" in line: outd["ncores"]=int(line.split(":")[-1]) # # timing # if "Timing Overview" in line: parse_timing=True if "| The users of YAMBO have little formal obligations " in line: parse_timing=False outd["completed"]=True # if parse_timing and "Timing " in line: outd["wall_time"] = line.split(":")[1].split("/")[0].replace("-","") if parse_timing and "io_WF" in line: outd["io_WF_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "io_HF" in line: outd["io_HF_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "io_DIPOLES" in line: outd["io_DIPOLES_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "io_X" in line: outd["io_X_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "RIM" in line: outd["RIM_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "Coulomb Cutoff" in line: outd["cutoff_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "Dipoles" in line: outd["dipoles_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "Xo (procedure)" in line: outd["Xo_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "Xo (REDUX)" in line: outd["Xo_REDUX_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "X (procedure)" in line: outd["X_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "X (REDUX)" in line: outd["X_REDUX_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "LINEAR ALGEBRA" in line: outd["LinAlG_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and " HF " in line: outd["HF_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "HF(REDUX)" in line: outd["HF_REDUX_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "GW(ppa)" in line: outd["GW_time"] = line.split(":")[1].split("CPU")[0] if parse_timing and "GW(REDUX)" in line: outd["GW_REDUX_time"] = line.split(":")[1].split("CPU")[0] fl.close() clean_parsed_data(outd) # return outd def clean_parsed_data(outd): # for key in outd: val=outd[key] if isinstance(val,str): val=val.replace(" ","") outd[key]=val def print_parsed_data(outd,datafile=None): print() if datafile != None: print(" %20s : %s " % ("file", str(datafile))) # for key in outd: print(" %20s : %s " % (key, str(outd[key])) ) print() def formatter(val,maxfield=12): sval=str(val) return " "*(maxfield-len(sval))+sval def print_perfGW_data(outd=None): # if outd==None: strout ="# ncores" strout+=formatter("MPI") strout+=formatter("threads") strout+=formatter("io_WF") strout+=formatter("Dipoles") strout+=formatter("Xo") strout+=formatter("Xo(REDUX)") strout+=formatter("X") strout+=formatter("Sgm_x") strout+=formatter("(REDUX)") strout+=formatter("Sgm_c") strout+=formatter("(REDUX)") strout+=formatter("WALL_TIME") print(strout) return strout = formatter(outd["ncores"],len("# ncores")) strout+= formatter(outd["mpi_tasks"]) strout+= formatter(outd["openmp_threads"]) if not outd["completed"]: print(strout) return strout+= formatter(outd["io_WF_time"]) strout+= formatter(outd["dipoles_time"]) strout+= formatter(outd["Xo_time"]) strout+= formatter(outd["Xo_REDUX_time"]) strout+= formatter(outd["X_time"]) strout+= formatter(outd["HF_time"]) strout+= formatter(outd["HF_REDUX_time"]) strout+= formatter(outd["GW_time"]) strout+= formatter(outd["GW_REDUX_time"]) strout+= formatter(outd["wall_time"]) print(strout) return def main(argv): # usage_str= Usage parse_Yambo.py [-h,--help] [-a, --all] file1 file2... # verbose=False # if len(argv) == 1: print(usage_str) sys.exit(1) if argv[1]=="-h" or argv[1]=="--help": print(usage_str) sys.exit(0) if argv[1]=="-a" or argv[1]=="--all": argv.pop(1) verbose=True # if not verbose: print_perfGW_data() # flist=argv for f in flist[1:]: # outd=parse_report(f) # if verbose: print_parsed_data(outd,datafile=f) else: print_perfGW_data(outd) if __name__ == "__main__": main(sys.argv)