Skip to content
Snippets Groups Projects
Commit 5276c950 authored by Kurt A. O'Hearn's avatar Kurt A. O'Hearn
Browse files

Update tools.

parent 5d928121
No related branches found
No related tags found
No related merge requests found
......@@ -4,20 +4,22 @@ from fileinput import input
from itertools import product
from re import sub
from subprocess import Popen, PIPE
from os import getcwd, environ, path, rename
from os import getcwd, environ, path, remove, rename, rmdir
from sys import exit
from tempfile import mkdtemp
from time import time
class TestCase():
def __init__(self, geo_file, ffield_file, control_file, params={}, result_header_fmt='',
result_body_fmt='', result_file='result.txt'):
result_header='', result_body_fmt='', result_file='results.txt'):
self.__geo_file = geo_file
self.__ffield_file = ffield_file
self.__control_file = control_file
self.__param_names = sorted(params.keys())
self.__params = params
self.__result_header_fmt = result_header_fmt
self.__result_header = result_header
self.__result_body_fmt = result_body_fmt
self.__result_file = result_file
self.__control_res = { \
......@@ -45,18 +47,22 @@ class TestCase():
r'(?P<key>geo_format\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
}
def _setup(self, param):
for line in input(self.__control_file, inplace=1):
line = line.rstrip()
for k in self.__control_res.keys():
try:
line = self.__control_res[k](line, param[k])
except KeyError:
pass
print line
def run(self):
def _setup(self, param, temp_file):
fp = open(self.__control_file, 'r')
lines = fp.read()
fp.close()
for k in self.__control_res.keys():
try:
lines = self.__control_res[k](lines, param[k])
except KeyError:
pass
fp_temp = open(temp_file, 'w', 0)
fp_temp.write(lines)
fp_temp.close()
def run(self, bin_file='sPuReMD/bin/spuremd'):
base_dir = getcwd()
bin_path = path.join(base_dir, bin_file)
env = dict(environ)
write_header = True
......@@ -64,8 +70,10 @@ class TestCase():
write_header = False
fout = open(self.__result_file, 'a', 0)
if write_header:
fout.write(self.__result_header_fmt.format('Data Set', 'Steps', 'Q Tol', 'Pre T', 'Pre Comp',
'Pre App', 'Iters', 'SpMV', 'QEq', 'Threads', 'Time (s)'))
fout.write(self.__result_header_fmt.format(*self.__result_header))
temp_dir = mkdtemp()
temp_file = path.join(temp_dir, path.basename(self.__control_file))
for p in product(*[self.__params[k] for k in self.__param_names]):
param_dict = dict((k, v) for (k, v) in zip(self.__param_names, p))
......@@ -73,24 +81,24 @@ class TestCase():
+ '_step' + param_dict['nsteps'] + '_tol' + param_dict['qeq_solver_q_err'] \
+ '_precomp' + param_dict['pre_comp_type'] + '_thread' + param_dict['threads']
self._setup(param_dict)
self._setup(param_dict, temp_file)
env['OMP_NUM_THREADS'] = param_dict['threads']
start = time()
proc_handle = Popen([path.join(base_dir, 'sPuReMD/bin/spuremd'),
self.__geo_file, self.__ffield_file, self.__control_file],
proc_handle = Popen([bin_path, self.__geo_file, self.__ffield_file, temp_file],
stdout=PIPE, stderr=PIPE, env=env)
#TODO: handle outputs?
stdout, stderr = proc_handle.communicate()
print 'stdout:', stdout
print 'stderr:', stderr
stop = time()
self._process_result(fout, stop - start, param_dict)
fout.close()
remove(temp_file)
rmdir(temp_dir)
def _process_result(self, fout, time, param):
qeq = 0.
iters = 0.
pre_comp = 0.
pre_app = 0.
......@@ -100,6 +108,7 @@ class TestCase():
for line in fp:
line = line.split()
try:
qeq = qeq + float(line[6])
iters = iters + float(line[7])
pre_comp = pre_comp + float(line[8])
pre_app = pre_app + float(line[9])
......@@ -108,14 +117,15 @@ class TestCase():
except Exception:
pass
cnt = cnt - 1
qeq = qeq / cnt
iters = iters / cnt
pre_comp = pre_comp / cnt
pre_app = pre_app / cnt
spmv = spmv / cnt
fout.write(self.__result_body_fmt.format(path.basename(self.__control_file).split('.')[0],
fout.write(self.__result_body_fmt.format(path.basename(self.__geo_file).split('.')[0],
param['nsteps'], param['qeq_solver_q_err'], param['pre_comp_type'], pre_comp, pre_app, iters, spmv,
param['threads'], time))
qeq, param['threads'], time))
if __name__ == '__main__':
......@@ -124,21 +134,23 @@ if __name__ == '__main__':
data_dir = path.join(base_dir, 'data/benchmarks')
header_fmt_str = '{:20}|{:5}|{:5}|{:5}|{:10}|{:10}|{:10}|{:10}|{:10}|{:10}|{:10}\n'
header_str = ['Data Set', 'Steps', 'Q Tol', 'Pre T', 'Pre Comp',
'Pre App', 'Iters', 'SpMV', 'QEq', 'Threads', 'Time (s)']
body_fmt_str = '{:20} {:5} {:5} {:5} {:10.6f} {:10.6f} {:10.6f} {:10.6f} {:10.6f} {:10} {:10.6f}\n'
params = {
'ensemble_type': ['0'],
'nsteps': ['20'],
'qeq_solver_type': ['2'],
'qeq_solver_q_err': ['1e-6'],
'nsteps': ['20', '100', '500', '1000'],
'qeq_solver_type': ['0'],
'qeq_solver_q_err': ['1e-6', '1e-10'],
# 'qeq_solver_q_err': ['1e-6', '1e-8', '1e-10', '1e-14'],
'pre_comp_type': ['2'],
'pre_comp_type': ['0'],
# 'pre_comp_type': ['0', '1', '2'],
'pre_comp_refactor': ['20'],
'pre_comp_refactor': ['1'],
# 'pre_comp_sweeps': ['3'],
# 'pre_app_type': ['0'],
# 'pre_app_jacobi_iters': ['50'],
'threads': ['1'],
'threads': ['12'],
# 'threads': ['1', '2', '4', '12', '24'],
'geo_format': ['1'],
}
......@@ -147,39 +159,39 @@ if __name__ == '__main__':
TestCase(path.join(data_dir, 'water/water_6540.pdb'),
path.join(data_dir, 'water/ffield.water'),
path.join(control_dir, 'param.gpu.water'),
params=params, result_header_fmt=header_fmt_str, result_body_fmt=body_fmt_str),
params=params, result_header_fmt=header_fmt_str, result_header = header_str, result_body_fmt=body_fmt_str),
# TestCase(path.join(data_dir, 'water/water_78480.pdb'),
# path.join(data_dir, 'water/ffield.water'),
# path.join(control_dir, 'param.gpu.water'),
# params=params, result_header_fmt=header_fmt_str, result_body_fmt=body_fmt_str),
# params=params, result_header_fmt=header_fmt_str, result_header = header_str, result_body_fmt=body_fmt_str),
# TestCase(path.join(data_dir, 'water/water_327000.geo'),
# path.join(data_dir, 'water/ffield.water'),
# path.join(control_dir, 'param.gpu.water'),
# params=params, result_header_fmt=header_fmt_str, result_body_fmt=body_fmt_str),
# TestCase(path.join(data_dir, 'bilayer/bilayer_56800.pdb'),
# path.join(data_dir, 'bilayer/ffield-bio'),
# path.join(control_dir, 'param.gpu.water'),
# params=params, result_header_fmt=header_fmt_str, result_body_fmt=body_fmt_str),
# TestCase(path.join(data_dir, 'dna/dna_19733.pdb'),
# path.join(data_dir, 'dna/ffield-dna'),
# path.join(control_dir, 'param.gpu.water'),
# params=params, result_header_fmt=header_fmt_str, result_body_fmt=body_fmt_str),
# TestCase(path.join(data_dir, 'silica/silica_6000.pdb'),
# path.join(data_dir, 'silica/ffield-bio'),
# path.join(control_dir, 'param.gpu.water'),
# params=params, result_header_fmt=header_fmt_str, result_body_fmt=body_fmt_str),
# params=params, result_header_fmt=header_fmt_str, result_header = header_str, result_body_fmt=body_fmt_str),
TestCase(path.join(data_dir, 'bilayer/bilayer_56800.pdb'),
path.join(data_dir, 'bilayer/ffield-bio'),
path.join(control_dir, 'param.gpu.water'),
params=params, result_header_fmt=header_fmt_str, result_header = header_str, result_body_fmt=body_fmt_str),
TestCase(path.join(data_dir, 'dna/dna_19733.pdb'),
path.join(data_dir, 'dna/ffield-dna'),
path.join(control_dir, 'param.gpu.water'),
params=params, result_header_fmt=header_fmt_str, result_header = header_str, result_body_fmt=body_fmt_str),
TestCase(path.join(data_dir, 'silica/silica_6000.pdb'),
path.join(data_dir, 'silica/ffield-bio'),
path.join(control_dir, 'param.gpu.water'),
params=params, result_header_fmt=header_fmt_str, result_header = header_str, result_body_fmt=body_fmt_str),
# TestCase(path.join(data_dir, 'silica/silica_72000.geo'),
# path.join(data_dir, 'silica/ffield-bio'),
# path.join(control_dir, 'param.gpu.water'),
# params=params, result_header_fmt=header_fmt_str, result_body_fmt=body_fmt_str),
# params=params, result_header_fmt=header_fmt_str, result_header = header_str, result_body_fmt=body_fmt_str),
# TestCase(path.join(data_dir, 'silica/silica_300000.geo'),
# path.join(data_dir, 'silica/ffield-bio'),
# path.join(control_dir, 'param.gpu.water'),
# params=params, result_header_fmt=header_fmt_str, result_body_fmt=body_fmt_str),
# TestCase(path.join(data_dir, 'petn/petn_48256.pdb'),
# path.join(data_dir, 'petn/ffield.petn'),
# path.join(control_dir, 'param.gpu.water'),
# params=params, result_header_fmt=header_fmt_str, result_body_fmt=body_fmt_str),
# params=params, result_header_fmt=header_fmt_str, result_header = header_str, result_body_fmt=body_fmt_str),
TestCase(path.join(data_dir, 'petn/petn_48256.pdb'),
path.join(data_dir, 'petn/ffield.petn'),
path.join(control_dir, 'param.gpu.water'),
params=params, result_header_fmt=header_fmt_str, result_header = header_str, result_body_fmt=body_fmt_str),
]
for test in test_cases:
test.run()
test.run(bin_file='sPuReMD/bin/spuremd')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment