Generating one by one or together is a small part of the execution time:

julia> @time rand(3*10^8);
  1.281946 seconds (10 allocations: 2.235 GB, 0.23% gc time)

julia> r(n) = for i=1:n; rand(); end;
julia> @time r(3*10^8)
  0.632389 seconds (6 allocations: 192 bytes)

The one by one is perhaps faster because it doesn't have the array 
allocation overhead. So, it 


-viral

On Saturday, January 23, 2016 at 6:53:38 AM UTC+5:30, Tim Holy wrote:
>
> Try 
>     @edit randperm(10) 
> and see for yourself. 
>
> My bet is that you could speed it up by generating all the random numbers 
> you'll need in one go, rather than generating them one-by-one. Want to 
> give it 
> a shot? 
>
> --Tim 
>
> On Friday, January 22, 2016 02:54:51 PM Brian Lucena wrote: 
> > I am running a simulation that requires me to generate random 
> permutations 
> > of size 300 million.  I would ideally like to run this generation in a 
> loop 
> > 10K or 100K times. I am surprised that randperm is not faster in Julia 
> than 
> > it is.  It seems to be considerably slower than the equivalent in R (and 
> R 
> > is clearly not known for speed)  :) 
> > 
> > In Julia: 
> > 
> > *julia> **@time asd=randperm(300000000)* 
> > 
> >  43.437829 seconds (6 allocations: 2.235 GB, 0.01% gc time) 
> > 
> > *300000000-element Array{Int64,1}:* 
> > 
> > 
> > In R 
> > 
> > > start = Sys.time() 
> > > 
> > > asd = sample(300000000) 
> > > 
> > > Sys.time()-start 
> > 
> > Time difference of 23.27244 secs 
> > 
> > Julia seems to be twice as slow! 
> > 
> > Any thoughts on why that is?  Does randperm use the "knuth shuffle" or 
> does 
> > it use some other algorithm. 
> > 
> > Thanks, 
> > B 
>

Reply via email to