Since we have made sure that our for loops have the right boundaries, we can assure the compiler that we're not going to step out of the bounds of an array, and surround our code in the @inbounds macro. This is not something you should do unless you're certain that you'll never try to access memory out of bounds, but it does get the runtime down to 0.23 seconds, which is on the same order as Java. Here's the full code<https://gist.github.com/staticfloat/11339342>with all the modifications made. -E
On Sat, Apr 26, 2014 at 11:55 PM, Freddy Chua <freddy...@gmail.com> wrote: > Stochastic Gradient Descent is one of the most important optimisation > algorithm in Machine Learning. So having it perform better than Java is > important to have more widespread adoption. > > > On Sunday, April 27, 2014 2:03:28 PM UTC+8, Freddy Chua wrote: > >> This code takes 60+ secs to execute on my machine. The Java equivalent >> takes only 0.2 secs!!! Please tell me how to optimise the following >> code.begin >> >> begin >> N = 10000 >> K = 100 >> rate = 1e-2 >> ITERATIONS = 1 >> >> # generate y >> y = rand(N) >> >> # generate x >> x = rand(K, N) >> >> # generate w >> w = zeros(Float64, K) >> >> tic() >> for i=1:ITERATIONS >> for n=1:N >> y_hat = 0.0 >> for k=1:K >> y_hat += w[k] * x[k,n] >> end >> >> for k=1:K >> w[k] += rate * (y[n] - y_hat) * x[k,n] >> end >> end >> end >> toc() >> end >> >> Sorry for repeated posting, I did so to properly indent the code.. >> >