From c1b5ea8184205a2604af619941fa336ddae4a002 Mon Sep 17 00:00:00 2001 From: "Kurt A. O'Hearn" <ohearnku@msu.edu> Date: Thu, 28 Jul 2016 18:25:08 -0700 Subject: [PATCH] Rename benchmark. Fix SuperLU-MT build. Update benchmark script. --- .../petn/{petn.pdb => petn_48256.pdb} | 0 sPuReMD/configure.ac | 2 +- tools/run_sim.py | 106 ++++++++++++------ 3 files changed, 74 insertions(+), 34 deletions(-) rename data/benchmarks/petn/{petn.pdb => petn_48256.pdb} (100%) diff --git a/data/benchmarks/petn/petn.pdb b/data/benchmarks/petn/petn_48256.pdb similarity index 100% rename from data/benchmarks/petn/petn.pdb rename to data/benchmarks/petn/petn_48256.pdb diff --git a/sPuReMD/configure.ac b/sPuReMD/configure.ac index 5829f0e3..358dfe7e 100644 --- a/sPuReMD/configure.ac +++ b/sPuReMD/configure.ac @@ -58,7 +58,7 @@ if test "x$BUILD_OPENMP" = "xyes"; then fi fi -if test "x$BUILD_SUPERLU_MT" != "xno" +if test "x$BUILD_SUPERLU_MT" != "x" then CPPFLAGS="${CPPFLAGS} -I${BUILD_SUPERLU_MT}/include" LDFLAGS="${LDFLAGS} -L${BUILD_SUPERLU_MT}/lib" diff --git a/tools/run_sim.py b/tools/run_sim.py index a7be0e2a..de1c0372 100644 --- a/tools/run_sim.py +++ b/tools/run_sim.py @@ -3,49 +3,89 @@ from fileinput import input from re import sub from subprocess import Popen, PIPE -from os import environ, path, rename +from os import getcwd, environ, path, rename +from sys import exit from time import time -base_dir = os.getcwd() +base_dir = getcwd() control_dir = path.join(base_dir, 'environ') -data_dir = path.join(base_dir, 'data') +data_dir = path.join(base_dir, 'data/benchmarks') puremd_args = [ \ - (path.join(data_dir, 'water_6540.pdb'), path.join(data_dir, 'ffield.water'), path.join(control_dir, 'param.gpu.water')), \ - (path.join(data_dir, 'water_52320.pdb'), path.join(data_dir, 'ffield.water'), path.join(control_dir, 'param.gpu.water')), \ - (path.join(data_dir, 'water_80000.geo'), path.join(data_dir, 'ffield.water'), path.join(control_dir, 'param.gpu.water')), \ - (path.join(data_dir, 'bilayer.pdb'), path.join(data_dir, 'ffield-bio'), path.join(control_dir, 'param.gpu.water')), \ - (path.join(data_dir, 'dna.pdb'), path.join(data_dir, 'ffield-dna'), path.join(control_dir, 'param.gpu.water')), \ +# (path.join(data_dir, 'water/water_6540.pdb'), path.join(data_dir, 'water/ffield.water'), path.join(control_dir, 'param.gpu.water')), \ +# (path.join(data_dir, 'water/water_78480.pdb'), path.join(data_dir, 'water/ffield.water'), path.join(control_dir, 'param.gpu.water')), \ +# (path.join(data_dir, 'water/water_327000.geo'), path.join(data_dir, 'water/ffield.water'), path.join(control_dir, 'param.gpu.water')), \ +# (path.join(data_dir, 'bilayer/bilayer_56800.pdb'), path.join(data_dir, 'bilayer/ffield-bio'), path.join(control_dir, 'param.gpu.water')), \ + (path.join(data_dir, 'dna/dna_19733.pdb'), path.join(data_dir, 'dna/ffield-dna'), path.join(control_dir, 'param.gpu.water')), \ + (path.join(data_dir, 'silica/silica_6000.pdb'), path.join(data_dir, 'silica/ffield-bio'), path.join(control_dir, 'param.gpu.water')), \ +# (path.join(data_dir, 'silica/silica_72000.geo'), path.join(data_dir, 'silica/ffield-bio'), path.join(control_dir, 'param.gpu.water')), \ +# (path.join(data_dir, 'silica/silica_300000.geo'), path.join(data_dir, 'silica/ffield-bio'), path.join(control_dir, 'param.gpu.water')), \ +# (path.join(data_dir, 'petn/petn_48256.pdb'), path.join(data_dir, 'petn/ffield.petn'), path.join(control_dir, 'param.gpu.water')), \ ] -header_fmt_str = '{:20}|{:5}|{:10}|{:10}' -body_fmt_str = '{:20} {:5} {:10} {:10d}' +header_fmt_str = '{:20}|{:5}|{:5}|{:5}|{:10}|{:10}|{:10}|{:10}|{:10}|{:10}' +body_fmt_str = '{:20} {:5} {:5} {:5} {:10.6f} {:10.6f} {:10.6f} {:10.6f} {:10} {:10.6f}' -tols = ['1e-6', '1e-8', '1e-10', '1e-14'] -threads = ['1', '2', '4', '10', '20'] +steps = ['20'] #['100'] +qeq_solver_tol = ['1e-6'] #['1e-6', '1e-8', '1e-10', '1e-14'] +pre_comp_type = ['2'] #['0', '1', '2'] +threads = ['1', '2', '4', '12', '24'] patterns = [ \ - lambda l, x: sub(r'(?P<key>q_err\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l.rstrip()), \ + lambda l, x: sub(r'(?P<key>simulation_name\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \ + lambda l, x: sub(r'(?P<key>nsteps\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \ + lambda l, x: sub(r'(?P<key>qeq_solver_q_err\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \ + lambda l, x: sub(r'(?P<key>pre_comp_type\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \ + lambda l, x: sub(r'(?P<key>geo_format\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \ ] d = dict(environ) -print header_fmt_str.format('Data Set', 'Tol', 'Threads', 'Time (ms)') +print header_fmt_str.format('Data Set', 'Steps', 'Q Tol', 'Pre T', 'Pre Comp', + 'Pre App', 'Iters', 'SpMV', 'Threads', 'Time (s)') for i in xrange(len(puremd_args)): - for j in xrange(len(tols)): - for line in input(puremd_args[i][2], inplace=1): - for p in patterns: - line = p(line, tols[j]) - print line - for k in xrange(len(threads)): - d['OMP_NUM_THREADS'] = threads[k] - start = time() - p = Popen([path.join(base_dir, 'sPuReMD/spuremd')] + list(puremd_args[i]), - stdout=PIPE, stderr=PIPE, env=d) - stdout, stderr = p.communicate() - stop = time() - print body_fmt_str.format(path.basename(puremd_args[i][0]), tols[j], threads[k], - int((stop - start) * 1000)) - - rename('water.6.notab.log', path.basename(puremd_args[i][0]).split('.')[0] - + '_' + tols[j] + 'tol_' + threads[k] + 'thread' + '.log') - rename('water.6.notab.out', path.basename(puremd_args[i][0]).split('.')[0] - + '_' + tols[j] + 'tol_' + threads[k] + 'thread' + '.out') + for s in xrange(len(steps)): + for j in xrange(len(qeq_solver_tol)): + for t in xrange(len(pre_comp_type)): + for k in xrange(len(threads)): + for line in input(puremd_args[i][2], inplace=1): + line = line.rstrip() + line = patterns[0](line, path.basename(puremd_args[i][0]).split('.')[0] + + '_' + 'tol' + qeq_solver_tol[j] + '_precomp' + pre_comp_type[t] + '_thread' + threads[k]) + line = patterns[1](line, steps[s]) + line = patterns[2](line, qeq_solver_tol[j]) + line = patterns[3](line, pre_comp_type[t]) + print line + + d['OMP_NUM_THREADS'] = threads[k] + start = time() + p = Popen([path.join(base_dir, 'sPuReMD/bin/spuremd')] + list(puremd_args[i]), + stdout=PIPE, stderr=PIPE, env=d) + stdout, stderr = p.communicate() + stop = time() + + iters = 0. + pre_comp = 0. + pre_app = 0. + spmv = 0. + cnt = 0 + with open(path.basename(puremd_args[i][0]).split('.')[0] + + '_' + 'tol' + qeq_solver_tol[j] + '_precomp' + pre_comp_type[t] + '_thread' + + threads[k] + '.log', 'r') as fp: + for line in fp: + line = line.split() + try: + iters = iters + float(line[7]) + pre_comp = pre_comp + float(line[8]) + pre_app = pre_app + float(line[9]) + spmv = spmv + float(line[10]) + cnt = cnt + 1 + except Exception: + pass + cnt = cnt - 1 + iters = iters / cnt + pre_comp = pre_comp / cnt + pre_app = pre_app / cnt + spmv = spmv / cnt + + print body_fmt_str.format(path.basename(puremd_args[i][0]).split('.')[0], + steps[s], qeq_solver_tol[j], pre_comp_type[t], pre_comp, pre_app, iters, spmv, + threads[k], stop - start) -- GitLab