From 20fd5b206f446cd69c2df729bac5c158e847d2d1 Mon Sep 17 00:00:00 2001 From: Caner Candan Date: Sat, 27 Nov 2010 23:07:11 +0100 Subject: [PATCH] t-openmp.py released --- eo/test/t-openmp.cpp | 6 ++-- eo/test/t-openmp.py | 69 +++++++++++++++++++++++++++----------------- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/eo/test/t-openmp.cpp b/eo/test/t-openmp.cpp index db6b4cfc0..4771c541d 100644 --- a/eo/test/t-openmp.cpp +++ b/eo/test/t-openmp.cpp @@ -64,9 +64,9 @@ int main(int ac, char** av) eoUniformGenerator< double > gen(-5, 5); std::ostringstream params; - params << "-p" << popMin << "-pS" << popStep << "-P" << popMax - << "-d" << dimMin << "-dS" << dimStep << "-D" << dimMax - << "-r" << nRun << "-s" << seedParam; + params << "_p" << popMin << "_pS" << popStep << "_P" << popMax + << "_d" << dimMin << "_dS" << dimStep << "_D" << dimMax + << "_r" << nRun << "_s" << seedParam; std::ofstream speedupFile( std::string( fileNamesPrefix + speedupFileName + params.str() ).c_str() ); std::ofstream efficiencyFile( std::string( fileNamesPrefix + efficiencyFileName + params.str() ).c_str() ); std::ofstream dynamicityFile( std::string( fileNamesPrefix + dynamicityFileName + params.str() ).c_str() ); diff --git a/eo/test/t-openmp.py b/eo/test/t-openmp.py index 3982d682e..2b7c6842a 100755 --- a/eo/test/t-openmp.py +++ b/eo/test/t-openmp.py @@ -14,25 +14,21 @@ LOG_DEFAULT_FILENAME='notitle.log' OPENMP_EXEC_FORMAT='./test/t-openmp -p=%d --popStep=%d -P=%d -d=%d --dimStep=%d -D=%d -r=%d --seed=%d -v=%s -H=%s' +RESULT_FILE_FORMAT='%s%s_p%d_pS%d_P%d_d%d_dS%d_D%d_r%d_s%d' + def parser(parser=optparse.OptionParser()): # general parameters - parser.add_option('-v', '--verbose', choices=LEVELS.keys(), default='warning', help='set a verbose level') + parser.add_option('-v', '--verbose', choices=LEVELS.keys(), default='info', help='set a verbose level') parser.add_option('-f', '--file', help='give an input project filename', default='') parser.add_option('-o', '--output', help='give an output filename for logging', default=LOG_DEFAULT_FILENAME) # general parameters ends - parser.add_option('-p', '--popMin', default=1) - parser.add_option('', '--popStep', default=1) - parser.add_option('-P', '--popMax', default=100) - parser.add_option('-d', '--dimMin', default=1) - parser.add_option('', '--dimStep', default=1) - parser.add_option('-D', '--dimMax', default=100) parser.add_option('-r', '--nRun', default=100) - parser.add_option('-s', '--seed', default=-1) + parser.add_option('-s', '--seed', default=1) topic = str(datetime.today()) for char in [' ', ':', '-', '.']: topic = topic.replace(char, '_') - parser.add_option('-t', '--topic', default='openmp_' + topic + '/') + parser.add_option('-t', '--topic', default='openmp_measures_' + topic + '/') options, args = parser.parse_args() @@ -54,33 +50,54 @@ def logger(level_name, filename=LOG_DEFAULT_FILENAME): options = parser() -def execute_openmp( p, ps, P, d, ds, D, r, s, v=options.verbose ): - cmd = OPENMP_EXEC_FORMAT % (p, ps, P, d, ds, D, r, s, v, options.topic) +def get_boxplot_data( filename ): + try: + f = open( filename ) + return [ [ float(value) for value in line.split() ] for line in f.readlines() ] + except: + raise ValueError('got an issue during the reading of file %s' % filename) + +def non_zero( value ): return value if value > 0 else 1 + +def do_measure( name, p, ps, P, d, ds, D, r=options.nRun, s=options.seed, v='logging' ): + pwd = options.topic + name + '_' + cmd = OPENMP_EXEC_FORMAT % (p, ps, P, d, ds, D, r, s, v, pwd) logging.debug( cmd ) - #os.system( cmd ) + os.system( cmd ) + + for cur in ['speedup', 'efficiency', 'dynamicity']: + filename = RESULT_FILE_FORMAT % (pwd, cur, p, ps, P, d, ds, D, r, s) + pylab.boxplot( get_boxplot_data( filename ) ) + iters = ( non_zero( P - p ) / ps ) * ( non_zero( D - d ) / ds ) + pylab.xlabel('%d iterations from %d,%d to %d,%d' % ( iters, p, d, P, D) ) + pylab.ylabel('%s - %s' % (cur, name)) + pylab.savefig( filename + '.pdf', format='pdf' ) + pylab.savefig( filename + '.png', format='png' ) + pylab.cla() + pylab.clf() def main(): - # creates first the new topic repository - #os.mkdir( options.topic ) + logging.info('creates first the new topic repository %s', options.topic) + os.mkdir( options.topic ) - # (1) EA in time O(1) + logging.info('do all tests with r = %d and a common seed value = %d' % (options.nRun, options.seed)) - # (1.1) speedup measure Sp, Ep for P & D + logging.info('EA in time O(1) and O(n) - speedup measure Sp, Ep and Dp for P & D') - # (1.1.1) measure for all combinaisons of P n D - execute_openmp( 1, 10, 100, 1, 10, 100, 100, options.seed ) + logging.info('(1) measure for all combinaisons of P n D') + do_measure( '1', 1, 10, 101, 1, 10, 101 ) - # (1.1.1) measure for all combinaisons of P n D - execute_openmp( 1, 10, 100, 1, 10, 100, 100, options.seed ) + logging.info('(2) measure for P \in [1, 100[ with D fixed to 1000') + do_measure( '2', 1, 1, 101, 1000, 1, 1000 ) + logging.info('(3) measure for P \in [1, 1000[ with ps = 10 and D fixed to 1000') + do_measure( '3', 1, 10, 1001, 1000, 1, 1000 ) - # pylab.boxplot( [ [ float(value) for value in line.split() ] for line in open( sys.argv[i] ).readlines() ] ) - - # pylab.xlabel('iterations') - # pylab.savefig( sys.argv[ len(sys.argv) - 1 ], format='pdf', transparent=True ) - - # (2) EA in time O(1) + logging.info('(4) measure for D \in [1, 100[ with P fixed to 1000') + do_measure( '4', 1000, 1, 1000, 1, 1, 101 ) + logging.info('(5) measure for D \in [1, 1000[ with ds = 10 and P fixed to 1000') + do_measure( '5', 1000, 1, 1000, 1, 10, 1001 ) # when executed, just run main(): if __name__ == '__main__':