I hadn't noticed he was calling eval. Good catch, Stefan. --Tim
On Friday, May 01, 2015 10:57:40 AM Stefan Karpinski wrote: > With the anonymous function approach, you shouldn't be calling eval at all. > As a rule, if you're calling eval at all after the startup phase of your > program, you're doing something wrong. > > On Fri, May 1, 2015 at 10:46 AM, 'Antoine Messager' via julia-users < > > [email protected]> wrote: > > I am sorry for insisting, but it seems that even with anonymous function, > > the time necessary to create an anonymous function or a normal function > > (without the @gensym) is linearly increasing with the quantity of function > > created. I have tried the following: > > > > *for i in 1:1000* > > * if(i%100==0)* > > * print("$(int(i/10))%")* > > * end* > > * tic()* > > * > > > > mymat=sgenerateAdjMat(Nnodes,int(Nnodes*1.5),int(Nnodes*0.3),2);* > > > > * > > > > degrates=exp((rand(Distributions.Uniform(-3.0*log(10),2.0*log(10)),Nnodes > > )));*> > > * > > > > basalrates=exp((rand(Distributions.Uniform(-3.0*log(10),2.0*log(10)),Nnod > > es)));*> > > * > > > > lhs,rhs,lhsjac,rhsjac=make_funjac_ode(mymat,Nnodes,degrates,basalrates,pr > > obact);*> > > * myfun=make_anonymous_f(lhs,rhs);* > > * time[i]=toq()* > > *end* > > > > > > <https://lh3.googleusercontent.com/-tyrafotpY98/VUOQKo4IWNI/AAAAAAAAAB0/sD > > bwnXDvIik/s1600/Capture%2Bd%E2%80%99e%CC%81cran%2B2015-05-01%2Ba%CC%80%2B1 > > 5.38.03.png> It the the same with the normal function. > > > > I know that the creation of the parameters (rhs,lhs...) always takes the > > same amount of time. > > Anonymous function: I need to eval the following: > > *function code_anonymous_f(lhs::Dict, rhs::Dict)* > > * lines = {}* > > * for key in keys(lhs)* > > * push!(lines, :( $(lhs[key]) = $(rhs[key])) )* > > * end* > > * quote* > > * func = (y, fy) -> begin* > > * $(lines...)* > > * end* > > * end* > > *end* > > > > Normal function @gensym expressed only once: > > *@gensym f!* > > *function code_f(lhs::Dict, rhs::Dict)* > > * lines = {}* > > * for key in keys(lhs)* > > * push!(lines, :( $(lhs[key]) = $(rhs[key])) )* > > * end* > > * quote* > > * function $f!(y, fy)* > > * $(lines...)* > > * end* > > * end* > > *end* > > > > I would need to create around 1.000.000 systems so I don't know what to > > do. After 20.000 tryes, it takes like 17 second instead of 0.01 at the > > beginning. I don't understand where it could come from. > > > > Thank you in advance, > > Antoine > > > > Le lundi 27 avril 2015 15:49:56 UTC+1, Antoine Messager a écrit : > >> Dear all, > >> > >> I need to create a lot of systems of equation, find some characteristics > >> of each system and store the system if of interest. Each system is > >> created > >> under the same name. It works fine for the first 1000 systems but after > >> the > >> program starts to be too slow. I have tried to use the garbage collector > >> each time I create a new system but it did not speed up the code. I don't > >> know what to do, I don't understand where it could come from. > >> > >> Cheers, > >> Antoine
