I loaded the Ubuntu binary (usually guaranteed to be ancient). I will build 0.3.
On Thursday, February 13, 2014 10:52:19 AM UTC-5, Stefan Karpinski wrote: > > You're using an ancient version of Julia, first off. Please do try > something more recent, like a 0.2 version or a 0.3 prerelease: > http://julialang.org/downloads/. Julia has a significant amount of > startup time (recently much reduced), you're comparing the time it takes > for Julia to compile all of its standard library plus your function and > then run your function. It's doing all of that less than 2x slower than > Python is running the code. If you want more meaningful results, you should > do the timing within the language, not from the shell. > > > On Thu, Feb 13, 2014 at 10:46 AM, James King <[email protected]<javascript:> > > wrote: > >> Thanks for the quick reply. Yes these were all hand coded in Julia, >> python, and C - same algorithm. >> >> Version 0.1.2 >> 02f3159-Linux-amd64 (2013-05-15 23:25:17) >> >> I was timing from the shell, my function is much faster timed from within >> julia: >> julia> @time myprimes(10000000) >> elapsed time: 0.23879289627075195 seconds >> (about 2 x C time) >> >> I don't seem to have built in julia function for primes? >> julia> primes(10000000) >> ERROR: primes not defined >> >> perhaps I am missing some package? >> >> >> C code below, in case you want to compare: >> >> #include <stdio.h> >> #include <math.h> >> #include <stdlib.h> >> #include <stdint.h> >> #include <assert.h> >> #include <string.h> >> >> uint64_t sieve (uint64_t N) >> { >> uint64_t sieve_to = ceil(sqrt (N)); >> uint64_t pi = 0; >> uint8_t* S = malloc (sizeof (uint8_t) * (N + 1)); >> uint64_t i, j; >> memset (S, 1, sizeof (uint8_t) * N); >> S[0] = 0; S[1] = 0; >> >> for (i = 1; i <= sieve_to; i++) >> if (S[i] == 1) >> for (j = i*i; j <= N; j += i) >> S[j] = 0; >> >> for (i = 1; i<= N; i++) pi += S[i]; >> free (S); >> return (pi); >> } >> >> >> int main() >> { >> printf ("%lu\n", sieve(10000000)); >> return(0); >> } >> >> >> >> >> On Thursday, February 13, 2014 10:34:32 AM UTC-5, Stefan Karpinski wrote: >> >>> Did you code this up in Python too? There's a built-in Julia function >>> called primes (written in pure >>> Julia<https://github.com/JuliaLang/julia/blob/master/base/primes.jl>), >>> which implements a prime number sieve efficiently: >>> >>> julia> @time primes(10000000); >>> elapsed time: 0.167461201 seconds (6581064 bytes allocated) >>> >>> Obviously the times are apples to oranges since we're on different >>> machines, but it looks to be comparable to your C version. Also, on my >>> system, your version runs in much less time: >>> >>> julia> @time primes2(10000000); >>> elapsed time: 0.185365732 seconds (80021608 bytes allocated) >>> >>> What version of Julia are you running and how are you timing it? Are you >>> perchance timing the execution of the program from the shell? >>> >>> >>> On Thu, Feb 13, 2014 at 10:26 AM, James King <[email protected]> wrote: >>> >>>> When I'm learning a new language one of the programs I write is a >>>> simple sieve of Eratosthenes; the julia code is shown below. >>>> Julia is taking 70% longer than python 2.7.5 to execute the program - >>>> have I coded something incorrectly? >>>> >>>> Language Execution time (seconds) C 0.106 pypy 0.323 python 1.26 >>>> julia 2.177 >>>> >>>> >>>> function primes(N) >>>> sieveTo = ceil(sqrt(N)) >>>> S = ones(N) >>>> S[1] = 0 >>>> for i in 1:sieveTo >>>> if S[i] > 0 >>>> for j in i*i:i:N >>>> S[j] = 0 >>>> end >>>> end >>>> end >>>> return(sum(S)) >>>> end >>>> >>>> println(primes(10000000)) >>>> >>> >>> >
