Python script
Jump to navigation
Jump to search
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)