Difference between revisions of "CSC352 Scripts to Measure Execution Times"
(2 intermediate revisions by the same user not shown) | |||
Line 18: | Line 18: | ||
We use a Python script below that will run the program '''randomTime.py''' above the right number of times and keep track of the best time. | We use a Python script below that will run the program '''randomTime.py''' above the right number of times and keep track of the best time. | ||
+ | |||
+ | <font color="red">'''Important Note''': Depending on whether you are running this script on a Linux box (e.g. beowulf) or on a Mac, you should set the two variables '''MAC''' and '''LINUX''' '''True''' or '''False''' accordingly.</font> | ||
+ | |||
+ | Setting for a Linux box: | ||
+ | |||
+ | LINUX = True | ||
+ | MAC = False | ||
+ | |||
+ | Setting for a Mac: | ||
+ | |||
+ | LINUX = False | ||
+ | MAC = True | ||
<source lang="python"> | <source lang="python"> | ||
. | . | ||
+ | |||
#! /usr/bin/python | #! /usr/bin/python | ||
# timeIt.py | # timeIt.py | ||
# D. Thiebaut | # D. Thiebaut | ||
+ | # | ||
+ | # Note: there are two different version of the command "time". One is internal | ||
+ | # to bash, the other is located in /usr/bin/time. Depending on how your path | ||
+ | # is setup, it is possible that when you execute "time" at the command line, | ||
+ | # it is the bash command that runs, but when you execute "time" inside a script, | ||
+ | # (like this python program), it is the /usr/bin/time command that runs. | ||
+ | # Moreover, the output of /usr/bin/time on Linux is not the same as /usr/bin/time | ||
+ | # on Mac OS X. | ||
+ | # | ||
+ | # For this reason, set the MAC and LINUX variables below to True or False | ||
+ | # depending on where you run your program! | ||
+ | # | ||
+ | # on Linux system, the /usr/bin/time command returns a string of the type | ||
+ | # | ||
+ | # 0.01user 0.00system 0:01.08elapsed 1%CPU (0avgtext+0avgdata 0maxresident)k | ||
+ | # | ||
+ | # on Mac OS X, the /usr/bin/time command returns a string of the type | ||
+ | # | ||
+ | # 0.03 real 0.01 user 0.01 sys | ||
+ | # | ||
from subprocess import Popen, PIPE | from subprocess import Popen, PIPE | ||
− | def | + | MAC=False |
+ | LINUX=True | ||
+ | |||
+ | def oldRunCommandOnce( program ): | ||
command="(time ./%s) 2>&1 | grep real | cut -d'm' -f 2 | cut -d's' -f 1" % program | command="(time ./%s) 2>&1 | grep real | cut -d'm' -f 2 | cut -d's' -f 1" % program | ||
p = Popen( command, shell=True, stdin=PIPE, | p = Popen( command, shell=True, stdin=PIPE, | ||
Line 34: | Line 70: | ||
execTime = float( fout.readline() ) | execTime = float( fout.readline() ) | ||
return execTime | return execTime | ||
+ | |||
+ | def runCommandOnce( program ): | ||
+ | if MAC: | ||
+ | command="(/usr/bin/time ./%s) 2>&1 | grep real" % program | ||
+ | elif LINUX: | ||
+ | command="(/usr/bin/time ./%s) 2>&1 | grep elapsed" % program | ||
+ | else: | ||
+ | print "You must set MAC and LINUX to be True and/or False!" | ||
+ | return | ||
+ | p = Popen( command, shell=True, stdin=PIPE, | ||
+ | stdout=PIPE, close_fds=True ) | ||
+ | fin, fout = p.stdin, p.stdout | ||
+ | line = fout.readline() | ||
+ | if MAC: | ||
+ | words = line.split() | ||
+ | execTime = float( words[0] ) | ||
+ | return execTime | ||
+ | if LINUX: | ||
+ | # 0.01user 0.00system 0:01.08elapsed 1%CPU (0avgtext+0avgdata 0maxresident)k | ||
+ | execTime = float( line.split()[0].split( 'u' )[0] ) | ||
+ | return execTime | ||
+ | |||
def main(): | def main(): | ||
bestTime = 1E10 | bestTime = 1E10 | ||
Line 42: | Line 100: | ||
print "sample %d: %f sec" % ( i+1, execTime ) | print "sample %d: %f sec" % ( i+1, execTime ) | ||
bestTime = min( bestTime, execTime ) | bestTime = min( bestTime, execTime ) | ||
− | + | ||
print "Best time = %f sec" % bestTime | print "Best time = %f sec" % bestTime | ||
+ | |||
+ | |||
+ | |||
+ | main() | ||
− | |||
− | |||
− | |||
Latest revision as of 21:18, 21 February 2010
Assume that we want to measure the execution time of this program:
.
#! /usr/bin/python
# randomTime.py
# D. Thiebaut
import random
import time
time.sleep( random.randrange( 2 ) )
.
which takes a random number of time between 0 and 2 seconds.
We use a Python script below that will run the program randomTime.py above the right number of times and keep track of the best time.
Important Note: Depending on whether you are running this script on a Linux box (e.g. beowulf) or on a Mac, you should set the two variables MAC and LINUX True or False accordingly.
Setting for a Linux box:
LINUX = True MAC = False
Setting for a Mac:
LINUX = False MAC = True
.
#! /usr/bin/python
# timeIt.py
# D. Thiebaut
#
# Note: there are two different version of the command "time". One is internal
# to bash, the other is located in /usr/bin/time. Depending on how your path
# is setup, it is possible that when you execute "time" at the command line,
# it is the bash command that runs, but when you execute "time" inside a script,
# (like this python program), it is the /usr/bin/time command that runs.
# Moreover, the output of /usr/bin/time on Linux is not the same as /usr/bin/time
# on Mac OS X.
#
# For this reason, set the MAC and LINUX variables below to True or False
# depending on where you run your program!
#
# on Linux system, the /usr/bin/time command returns a string of the type
#
# 0.01user 0.00system 0:01.08elapsed 1%CPU (0avgtext+0avgdata 0maxresident)k
#
# on Mac OS X, the /usr/bin/time command returns a string of the type
#
# 0.03 real 0.01 user 0.01 sys
#
from subprocess import Popen, PIPE
MAC=False
LINUX=True
def oldRunCommandOnce( program ):
command="(time ./%s) 2>&1 | grep real | cut -d'm' -f 2 | cut -d's' -f 1" % program
p = Popen( command, shell=True, stdin=PIPE,
stdout=PIPE, close_fds=True )
fin, fout = p.stdin, p.stdout
execTime = float( fout.readline() )
return execTime
def runCommandOnce( program ):
if MAC:
command="(/usr/bin/time ./%s) 2>&1 | grep real" % program
elif LINUX:
command="(/usr/bin/time ./%s) 2>&1 | grep elapsed" % program
else:
print "You must set MAC and LINUX to be True and/or False!"
return
p = Popen( command, shell=True, stdin=PIPE,
stdout=PIPE, close_fds=True )
fin, fout = p.stdin, p.stdout
line = fout.readline()
if MAC:
words = line.split()
execTime = float( words[0] )
return execTime
if LINUX:
# 0.01user 0.00system 0:01.08elapsed 1%CPU (0avgtext+0avgdata 0maxresident)k
execTime = float( line.split()[0].split( 'u' )[0] )
return execTime
def main():
bestTime = 1E10
program = "randomTime.py"
for i in range( 3 ):
execTime = runCommandOnce( program )
print "sample %d: %f sec" % ( i+1, execTime )
bestTime = min( bestTime, execTime )
print "Best time = %f sec" % bestTime
main()
.