inline function call
Riko Wichmann
riko.wichmann at remove-this.desy.de
Wed Jan 4 16:40:56 CET 2006
> Do you have an actual use-case for that? I mean, do you have code that runs
> slow, but with inlined code embarrassingly faster?
Well, I guess it would not actually be embarrassingly faster. From
trying various things and actually copying the function code into the
DoMC routine, I estimate to get about 15-20% reduction in the execution
time. It ran very slow, in the beginning but after applying some other
'fastpython' techniques it's actually quite fast ....
'inlining' is mostly a matter of curiosity now :)
here is the code snipplet:
-----------------------------------------------------------------
[... cut out some stuff here ....]
# riskfunc(med, low, high):
# risk function for costs: triangular distribution
# implemented acoording to:
http://www.brighton-webs.co.uk/distributions/triangular.asp
def riskfunc(med, low, high):
if med != 0.0:
u = random()
try:
if u <= (med-low)/(high-low):
r = low+sqrt(u*(high-low)*(med-low))
else:
r = high - sqrt((1.0-u)*(high-low)*(high-med))
except ZeroDivisionError: # case high = low
r = med
else:
r = 0.0
return r
# doMC:
# run the MC of the cost analysis
#
def doMC(Ntrial = 1):
from math import sqrt
start = time.time()
print 'run MC with ', Ntrial, ' trials'
# start with a defined seed for reproducability
total = 0.0
for i in range(Ntrial):
summe = 0.0
for k in range(len(Gcost)):
x = riskfunc(Gcost[k], Gdown[k], Gup[k])
summe += x
# store the value 'summe' for later usage
# ..... more code here
print "Summe : ", summe
stop = time.time()
print 'Computing time: ', stop-start
####################################################################
####################################################################
if __name__ == '__main__':
n = 100000
doMC(n)
More information about the Python-list
mailing list