> On 17 Dec 2016, at 15:23, Sven Van Caekenberghe <s...@stfx.eu> wrote: > > >> On 17 Dec 2016, at 14:28, Henrik Nergaard <henrik.nerga...@uia.no> wrote: >> >> This is not a comparable benchmark as the sum in Smalltalk keeps on growing >> and ends up doing LargeInteger calculations and thus the speed loss, while >> the c the int just rolls over. >> >> Sum in Smalltalk = 500000000500000000 >> Sum in C = -1243309312 > > Yes, I realised afterwards. Shame on me. > > Now, in Pharo 64 bits: > > [ > | sum | > sum:= 0. > 1 to: 1e9 do: [ :i | sum := sum + i ]. > self assert: sum = (1e9 * (1e9 + 1) / 2) ] timeToRun. > > "0:00:00:03.379" > > (1e9 * (1e9 + 1) / 2) < SmallInteger maxVal. > > "true" > > So there the speed difference is way smaller.
And here is a correct C99 version $ cat bench.c #include <stdio.h> #include <time.h> #include <assert.h> int main() { clock_t begin = clock(); long sum = 0; for (int i = 1; i <= 1000000000; i++) sum += i; assert(sum == ((1000000000*1000000001)/2)); clock_t end = clock(); double time_spent = (double)(end - begin) / CLOCKS_PER_SEC; printf("time_spent=%f\n", time_spent); } prometheus:tmp sven$ ./a.out time_spent=2.393986 >> Best regards, >> Henrik >> >> -----Original Message----- >> From: Pharo-users [mailto:pharo-users-boun...@lists.pharo.org] On Behalf Of >> Sven Van Caekenberghe >> Sent: Saturday, December 17, 2016 2:15 PM >> To: Any question about pharo is welcome <pharo-users@lists.pharo.org> >> Subject: Re: [Pharo-users] [Stupid Benchmarks] C++ vs Pharo >> >> Like this: >> >> [ | sum | sum:= 0. 1 to: 1e9 do: [ :i | sum := sum + i ]. sum ] timeToRun. >> >> "0:00:00:39.305" >> >> cat bench.c >> >> #include <stdio.h> >> #include <time.h> >> >> int main() { >> clock_t begin = clock(); >> >> int sum = 0; >> for (int i = 0; i < 1000000000; i++) >> sum += i; >> >> clock_t end = clock(); >> double time_spent = (double)(end - begin) / CLOCKS_PER_SEC; >> printf("time_spent=%f\n", time_spent); } >> >> ./a.out >> >> time_spent=2.370234 >> >> That is C being 16 times faster ... >> >>> On 17 Dec 2016, at 13:49, Sven Van Caekenberghe <s...@stfx.eu> wrote: >>> >>> Hmm, this sounds wrong (C++ should be (a lot) faster on such micro >>> benchmarks). >>> >>> You should exclude the executable startup time. >>> >>> In Pharo you should do [ .. ] timeToRun and something similar in C/C++. >>> >>>> On 17 Dec 2016, at 13:41, Dimitris Chloupis <kilon.al...@gmail.com> wrote: >>>> >>>> in multiplication pharo is around 2 times slower compared to C++ >>>> >>>> #include <stdio.h> >>>> >>>> int main() >>>> { >>>> double x=1; >>>> for(double i; i<1000000000 ; ++i) >>>> { >>>> x = 0.1*i; >>>> } >>>> >>>> return 1; >>>> } >>>> >>>> time ./testMul >>>> 3.13 real 3.13 user 0.00 sys >>>> >>>> time ./pharo Ephestos.image eval "|x| x := 1. 1 to: 1000000000 do:[:each| >>>> x := 0.1 * each]" >>>> 1 >>>> 4.97 real 4.48 user 0.09 sys >>>> >>>> On Sat, Dec 17, 2016 at 2:16 PM Dimitris Chloupis <kilon.al...@gmail.com> >>>> wrote: >>>> So I was bored and decided to test how fast pharo is compared to C++. >>>> >>>> so I tested addition >>>> >>>> C++ version: >>>> >>>> #include <stdio.h> >>>> >>>> int main() >>>> { >>>> double x=0; >>>> while(x<1000000000) >>>> { >>>> x = x+1; >>>> } >>>> >>>> return 1; >>>> } >>>> >>>> time ./test1 >>>> 2.84 real 2.84 user 0.00 sys >>>> >>>> Pharo version: >>>> >>>> time ./pharo Ephestos.image eval "|x| x := 0. 1 to: 1000000000 do:[:each| >>>> x := x +1]" >>>> 1 >>>> 2.09 real 1.94 user 0.08 sys >>>> >>>> Pharo is +50% faster than C++ ... o_O ... that's suprising, I assume here >>>> Pharo VM probably does some kind of optimisation. >>>> >>> >> >> >> >