Foldes, I went for your solution and got a time increase from 2.1 seconds (64bit integers) to 17.78 seconds (32 bit dow-casting). Seems like casting is no cheap...
Any other ideas possibilities? All best, Przemyslaw P.S. Naturally I realize that this is toy example and normally in a typical production code we would rather use real numbers for computations not ints. I am asking just out of curiosity ;-) On Wednesday, 15 January 2014 00:25:20 UTC+1, Földes László wrote: > > You can force the literals by enclosing them in int32(): > > p = [int32(0) for i=1:20000] > result = [int32(0) for i=1:20000] > k = int32(0) > n = int32(2) > while k < int32(20000) > i = int32(0) > > > > On Wednesday, January 15, 2014 12:04:23 AM UTC+1, Przemyslaw Szufel wrote: >> >> Simon, >> Thanks! >> I changed in Cython to >> def primes_list(int kmax): >> cdef int k, i >> cdef long long n >> cdef long long p[20000] >> and now I am getting 2.1 seconds - exactly the same time as Julia and >> Java with longs... >> >> Since the computational difference between 64bit longs and 32bit ints is >> soo high - is there any way to rewrite my toy example to force Julia to do >> 32 bit int calculations? >> >> All best, >> Przemyslaw Szufel >> >> >> On Tuesday, 14 January 2014 23:55:12 UTC+1, Simon Kornblith wrote: >>> >>> In C long is only guaranteed to be at least 32 bits (IIRC it's 64 bits >>> on 64-bit *nix but 32-bit on 64-bit Windows). long long is guaranteed >>> to be at least 64 bits (and is 64 bits on all systems I know of). >>> >>> Simon >>> >>> On Tuesday, January 14, 2014 5:46:04 PM UTC-5, Przemyslaw Szufel wrote: >>>> >>>> Simon, >>>> Thanks for the explanation! >>>> In Java int is 32 bit as well. >>>> I have just replaced ints with longs in Java and found out that now I >>>> get the Java speed also very similar to Julia. >>>> >>>> However I tried in Cython: >>>> def primes_list(int kmax): >>>> cdef int k, i >>>> cdef long n >>>> cdef long p[20000] >>>> ... >>>> >>>> and surprisingly the speed did not change...at first I thought that >>>> maybe something did not compile or is in cache - but I made sure - it's >>>> not >>>> the cache. >>>> Cython speed remains unchanged regardles using int or long? >>>> I know that now it becomes other language question...but maybe someone >>>> can explain? >>>> >>>> All best, >>>> Przemyslaw Szufel >>>> >>>> >>>> On Tuesday, 14 January 2014 23:29:40 UTC+1, Simon Kornblith wrote: >>>>> >>>>> With a 64-bit build, Julia integers are 64-bit unless otherwise >>>>> specified. In C, you use ints, which are 32-bit. Changing them to long >>>>> long >>>>> makes the C code perform similarly to the Julia code on my system. >>>>> Unfortunately, it's hard to operate on 32-bit integers in Julia, since + >>>>> promotes to 64-bit by default (am I missing something)? >>>>> >>>>> Simon >>>>> >>>>> On Tuesday, January 14, 2014 4:32:16 PM UTC-5, Przemyslaw Szufel wrote: >>>>>> >>>>>> Dear Julia users, >>>>>> >>>>>> I am considering using Julia for computational projects. >>>>>> As a first to get a feeling of the new language a I tried to >>>>>> benchmark Julia speed against other popular languages. >>>>>> I used an example code from the Cython tutorial: >>>>>> http://docs.cython.org/src/tutorial/cython_tutorial.html [ the code >>>>>> for finding n first prime numbers]. >>>>>> >>>>>> Rewriting the code in different languages and measuring the times on >>>>>> my Windows laptop gave me the following results: >>>>>> >>>>>> Language | Time in seconds (less=better) >>>>>> >>>>>> Python: 65.5 >>>>>> Cython (with MinGW): 0.82 >>>>>> Java : 0.64 >>>>>> Java (with -server option) : 0.64 >>>>>> C (with MinGW): 0.64 >>>>>> Julia (0.2): 2.1 >>>>>> Julia (0.3 nightly build): 2.1 >>>>>> >>>>>> All the codes for my experiments are attached to this post (Cython i >>>>>> Python are both being run starting from the prim.py file) >>>>>> >>>>>> The thing that worries me is that Julia takes much much longer than >>>>>> Cython ,,, >>>>>> I am a beginner to Julia and would like to kindly ask what am I doing >>>>>> wrong with my code. >>>>>> I start Julia console and use the command include ("prime.jl") to >>>>>> execute it. >>>>>> >>>>>> This code looks very simple and I think the compiler should be able >>>>>> to optimise it to at least the speed of Cython? >>>>>> Maybe I my code has been written in non-Julia style way and the >>>>>> compiler has problems with it? >>>>>> >>>>>> I will be grateful for any answers or comments. >>>>>> >>>>>> Best regards, >>>>>> Przemyslaw Szufel >>>>>> >>>>>
