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 >