source: branches/numpy_misc/tools/acceptance_tests/test_quadrature_parallel_interleaved.py @ 6991

Last change on this file since 6991 was 6991, checked in by rwilson, 15 years ago

Initial commit of the cluster acceptance package.

  • Property svn:executable set to *
File size: 3.1 KB
Line 
1#!/bin/env python
2
3'''Testlet to run the QuadratureParallelInterleaved test.'''
4
5import os
6import time
7import test_utils as util
8
9Processor_Numbers = [1, 2, 4, 8, 16]
10
11def test(logfile):
12    result = True
13    start_time = time.time()
14
15    (cluster, domain) = util.get_hostname()
16
17    util.header(logfile, 'Running quadrature parallel interleaved test on %s.' % cluster)
18
19    # compile C code
20    obj_file = 'quadrature_parallel_interleaved'
21    cmd = ('mpicc quadrature_parallel_interleaved.c -lm -o %s' % obj_file)
22    util.log_print(logfile, 'Compiling quadrature_parallel_interleaved.c ...')
23    (_, fd) = os.popen4(cmd)
24    output = fd.read()
25    status = fd.close()
26    if status:
27        util.log_print_nl(logfile, 'ERRORS COMPILING')
28        util.log_print(logfile, output)
29        util.footer(logfile, start_time)
30        return False
31
32    util.log_print_nl(logfile, 'OK\n')
33
34    # run the tests
35    results = []
36    machines_file = '~/.machines_%s' % cluster
37    single_processor_time = None
38    for num_procs in Processor_Numbers:
39        cmd = ('mpirun -np %2d -hostfile %s %s'
40               % (num_procs, machines_file, obj_file))
41        util.log_print(logfile, cmd + ' ...')
42        (_, fd) = os.popen4(cmd)
43        output = fd.readlines()
44        status = fd.close()
45        if status:
46            util.log_print_nl(logfile, 'ERRORS')
47            util.log_print(logfile, '\n'.join(output))
48            util.footer(logfile, start_time)
49            return False
50
51        for line in output:
52            if line.startswith('Time'):
53                (_, elapsed_time) = line.split(' = ', 1)
54                elapsed_time = elapsed_time.strip()
55                (elapsed_time, _) = elapsed_time.split(' ', 1)
56                elapsed_time = float(elapsed_time)
57
58        if elapsed_time is None:
59            util.log_print_nl(logfile, 'ERRORS')
60            util.log_print(logfile, '\n'.join(output))
61            util.footer(logfile, start_time)
62            return False
63           
64        results.append((num_procs, elapsed_time))
65        util.log_print_nl(logfile, 'took %.1fs' % elapsed_time)
66
67    # interpret the results
68    util.log_print(logfile, '\nResults of quadrature interleaved parallel test on %s\n' % cluster)
69    util.log_print(logfile, '%s\t%s\t%s\t%s\n' % ('#procs', 'time', 'speedup', 'parallel efficiency'))
70
71    single_processor_time = None
72    for (num_processors, elapsed_time) in results:
73        num_processors = int(num_processors)
74        if num_processors == 1:
75            single_processor_time = elapsed_time
76
77        speedup = single_processor_time / elapsed_time
78        parallel_efficiency = speedup / num_processors
79
80        util.log_print(logfile, '%d\t%.2f\t%.2f\t%.2f\n'
81                       % (num_processors, elapsed_time, speedup, parallel_efficiency))
82
83    util.footer(logfile, start_time)
84
85    os.remove(obj_file)
86
87    return result
88
89
90if __name__ == '__main__':
91    import sys
92
93    logfile = 'test.log'
94    if len(sys.argv) > 1:
95        logfile = sys.argv[1]
96
97    try:
98        os.remove(logfile)
99    except:
100        pass
101
102    if not test(logfile):
103        sys.exit(10)
104
105    sys.exit(0)
Note: See TracBrowser for help on using the repository browser.