#!/bin/env python """Testlet to run the QuadratureParallelInterleaved test.""" import os import time import test_utils as util Processor_Numbers = [1, 2, 4, 8, 16] name = 'Running quadrature parallel interleaved test' def test(logfile): result = True (cluster, domain) = util.get_hostname() # get python to run python_env_var = os.getenv('PYTHON') # compile C code util.log_print_nl(logfile, 'Compiling quadrature_parallel_interleaved.c:') obj_file = 'quadrature_parallel_interleaved' cmd = ('mpicc quadrature_parallel_interleaved.c -lm -o %s' % obj_file) util.log_print_nl(logfile, cmd) (_, fd) = os.popen4(cmd) output = fd.read() status = fd.close() if status: util.log_print_nl(logfile, 'ERRORS COMPILING') util.log_print(logfile, output) return False util.log_print_nl(logfile) # run the tests results = [] #machines_file = os.path.join('~', '.machines_%s' % cluster) #machines_file = os.path.join('machines_%s' % cluster) single_processor_time = None for num_procs in Processor_Numbers: cmd = ('mpirun -nolocal -np %2d -hostfile %s %s' % (num_procs, util.machines_file, obj_file)) util.log_print(logfile, cmd + ' ...') (_, fd) = os.popen4(cmd) output = fd.readlines() status = fd.close() if status: util.log_print_nl(logfile, 'ERRORS') util.log_print(logfile, '\n'.join(output)) return False elapsed_time = None for line in output: if line.startswith('Time'): (_, elapsed_time) = line.split(' = ', 1) elapsed_time = elapsed_time.strip() (elapsed_time, _) = elapsed_time.split(' ', 1) elapsed_time = float(elapsed_time) if elapsed_time is None: util.log_print_nl(logfile, 'ERRORS') util.log_print(logfile, '\n'.join(output)) return False results.append((num_procs, elapsed_time)) util.log_print_nl(logfile, 'took %.1fs' % elapsed_time) # interpret the results util.log_print(logfile, '\nResults of quadrature interleaved parallel test on %s\n' % cluster) util.log_print(logfile, '%s\t%s\t%s\t%s\n' % ('#procs', 'time', 'speedup', 'parallel efficiency')) single_processor_time = None for (num_processors, elapsed_time) in results: num_processors = int(num_processors) if num_processors == 1: single_processor_time = elapsed_time speedup = single_processor_time / elapsed_time parallel_efficiency = speedup / num_processors util.log_print(logfile, '%d\t%.2f\t%.2f\t%.2f\n' % (num_processors, elapsed_time, speedup, parallel_efficiency)) os.remove(obj_file) return result if __name__ == '__main__': import sys logfile = 'test.log' if len(sys.argv) > 1: logfile = sys.argv[1] try: os.remove(logfile) except: pass if not test(logfile): sys.exit(10) sys.exit(0)