Mercurial > hg > dml-open-backendtools
diff ipcluster/benchmark/start_benchmark.py @ 0:e34cf1b6fe09 tip
commit
author | Daniel Wolff |
---|---|
date | Sat, 20 Feb 2016 18:14:24 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipcluster/benchmark/start_benchmark.py Sat Feb 20 18:14:24 2016 +0100 @@ -0,0 +1,90 @@ +# Part of DML (Digital Music Laboratory) +# Copyright 2014-2015 Daniel Wolff, City University + +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +#!/usr/bin/python +# -*- coding: utf-8 -*-# + +# +# This is a benchmark that funs calculations +# on distributed nodes and reports the +# average time the calculation needs. +# Used to determine efficitncy of virtualisation +# + +# parameters +import sys +import time +import numpy +from IPython.parallel import Client +#import numpy as np + +def approxPi(error): + def nth_term(n): + return 4 / (2.0 * n + 1) * (-1) ** n + prev = nth_term(0) # First term + current = nth_term(0) + nth_term(1) # First + second terms + n = 2 # Starts at third term + + while abs(prev - current) > error: + prev = current + current += nth_term(n) + n += 1 + + return current + + +def main(niters = 1,hardness = 1e-7): + # connect to client + i = 0 + while i< 5 : + try : + i = i+1 + rc = Client() + nb_core = numpy.size(rc.ids) + lview = rc.load_balanced_view() + lview.block = True + dview = rc[:] + dview.block = True + break + except Exception : + print 'Client not started yet (Waiting for 5 sec...)' + time.sleep(5) + if i == 5 : + return 'Cannot connect to cluster' + time.sleep(2) + + + #with dview.sync_imports(): + # import start_benchmark + + print 'Benchmarking pi approximation on ' + str(nb_core) + ' engines.' + ticc = time.clock() + tic = time.time() + result = numpy.mean(lview.map(approxPi,numpy.ones(nb_core*niters) * hardness)) + toc = time.time()-tic + tocc = time.clock()-ticc + print 'Result: ' + str(result) + print 'Time used: ' + str(toc) + print 'CPU Time passed: ' + str(nb_core) + "*" + str(toc) + +if __name__ == "__main__": + if len(sys.argv) >= 3: + main(sys.argv[1],sys.argv[2]) + else: + main() + +