From: brabuhr@... Date: 2008-11-25T10:14:17+09:00 Subject: Re: Sieve of Zakiya jzakiya wrote: > Charles Oliver Nutter wrote: >> Yeah, there's several methods there that could easily blow the cap and >> have to remain interpreted. The inability to compile the whole file as a >> result is probably a large part of the lower perf. The algorithm is also >> *extremely* memory-intensive; logging GC on JRuby it had to do multiple >> full collections before the first iteration even came back. > > I just uploaded a more memory efficient and faster upgrade. > > Please check it out. $ ruby1.8 -v SieveOfZakiya.rb ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] user system total real primes up to 10000001: 12.160000 3.280000 15.440000 ( 15.968446) primes up to 10000001: 16.410000 2.710000 19.120000 ( 19.802800) primes up to 10000001: 4.340000 0.300000 4.640000 ( 4.708012) primes up to 10000001: 18.340000 2.510000 20.850000 ( 21.099350) primes up to 10000001: 11.600000 1.750000 13.350000 ( 13.638693) primes up to 10000001: 9.060000 1.450000 10.510000 ( 10.802420) primes up to 10000001: 8.410000 1.260000 9.670000 ( 9.923761) primes up to 10000001: 6.620000 0.200000 6.820000 ( 7.042592) primes up to 10000001: 4.620000 0.210000 4.830000 ( 4.858175) primes up to 10000001: 4.010000 0.210000 4.220000 ( 4.241419) primes up to 10000001: 9.060000 0.230000 9.290000 ( 9.345546) $ ruby1.9 -v SieveOfZakiya.rb ruby 1.9.0 (2008-06-20 revision 17482) [i486-linux] user system total real primes up to 10000001: 3.870000 0.020000 3.890000 ( 4.007278) primes up to 10000001: 4.670000 0.050000 4.720000 ( 4.884780) primes up to 10000001: 1.710000 0.060000 1.770000 ( 1.818867) primes up to 10000001: 6.020000 0.080000 6.100000 ( 6.291805) primes up to 10000001: 3.970000 0.050000 4.020000 ( 4.189796) primes up to 10000001: 3.170000 0.080000 3.250000 ( 3.355820) primes up to 10000001: SieveOfZakiya.rb:1272: [BUG] Segmentation fault ruby 1.9.0 (2008-06-20 revision 17482) [i486-linux] $ jruby -v SieveOfZakiya.rb jruby 1.1.5 (ruby 1.8.6 patchlevel 114) (2008-11-03 rev 7996) [i386-java] Error, could not compile; pass -d or -J-Djruby.jit.logging.verbose=true for more details user system total real primes up to 10000001: 10.117000 0.000000 10.117000 ( 10.116355) primes up to 10000001: 14.625000 0.000000 14.625000 ( 14.624596) primes up to 10000001: 7.303000 0.000000 7.303000 ( 7.303146) primes up to 10000001: 16.469000 0.000000 16.469000 ( 16.468992) primes up to 10000001: 10.874000 0.000000 10.874000 ( 10.874482) primes up to 10000001: 8.648000 0.000000 8.648000 ( 8.648109) primes up to 10000001: 9.625000 0.000000 9.625000 ( 9.624519) primes up to 10000001: 10.190000 0.000000 10.190000 ( 10.190249) primes up to 10000001: 9.384000 0.000000 9.384000 ( 9.383951) primes up to 10000001: 10.588000 0.000000 10.588000 ( 10.587707) primes up to 10000001: 15.747000 0.000000 15.747000 ( 15.747025) $ jruby -v -J-server SieveOfZakiya.rb jruby 1.1.5 (ruby 1.8.6 patchlevel 114) (2008-11-03 rev 7996) [i386-java] Error, could not compile; pass -d or -J-Djruby.jit.logging.verbose=true for more details user system total real primes up to 10000001: 6.457000 0.000000 6.457000 ( 6.457001) primes up to 10000001: 11.203000 0.000000 11.203000 ( 11.202618) primes up to 10000001: 5.599000 0.000000 5.599000 ( 5.599136) primes up to 10000001: 12.384000 0.000000 12.384000 ( 12.384355) primes up to 10000001: 7.844000 0.000000 7.844000 ( 7.844102) primes up to 10000001: 6.420000 0.000000 6.420000 ( 6.420077) primes up to 10000001: 7.478000 0.000000 7.478000 ( 7.478256) primes up to 10000001: 8.779000 0.000000 8.779000 ( 8.778884) primes up to 10000001: 8.752000 0.000000 8.752000 ( 8.752092) primes up to 10000001: 10.061000 0.000000 10.061000 ( 10.060471) primes up to 10000001: 11.674000 0.000000 11.674000 ( 11.674323) $ jruby -v -J-Xmn128m -J-Xms1024m -J-Xmx1024m -J-server SieveOfZakiya.rb jruby 1.1.5 (ruby 1.8.6 patchlevel 114) (2008-11-03 rev 7996) [i386-java] Error, could not compile; pass -d or -J-Djruby.jit.logging.verbose=true for more details user system total real primes up to 10000001: 4.512000 0.000000 4.512000 ( 4.512570) primes up to 10000001: 9.059000 0.000000 9.059000 ( 9.058663) primes up to 10000001: 3.557000 0.000000 3.557000 ( 3.556361) primes up to 10000001: 11.114000 0.000000 11.114000 ( 11.113504) primes up to 10000001: 16.059000 0.000000 16.059000 ( 16.059220) primes up to 10000001: 5.075000 0.000000 5.075000 ( 5.075088) primes up to 10000001: 4.964000 0.000000 4.964000 ( 4.964077) primes up to 10000001: 6.260000 0.000000 6.260000 ( 6.260179) primes up to 10000001: 3.720000 0.000000 3.720000 ( 3.720471) primes up to 10000001: 2.877000 0.000000 2.877000 ( 2.877802) primes up to 10000001: 4.547000 0.000000 4.547000 ( 4.547695)