Un altro benchmark che mette a confronto alcune recenti versioni di ruby con gli ultimi rilasci di python. Due semplici script per confrontare sintassi e prestazioni di questi moderni linguaggi.
Il sistema su cui ho eseguito la prova è un portatile Dell Inspiron 9400 con Centrino Duo, Intel T7200 4Mb Cache 2Ghz, Ram 2Gb 667Mhz. Sistema operativo Windows XP pro SP3.
Questo è il risultato del primo test, usato come riscaldamento per le vm:
| Versione | Compilatore | Secondi |
|---|---|---|
| Python 2.6.4 | 7,5 | |
| Ruby 1.9.1 p129 | i386-mingw32 | 8,2 |
| JRuby 1.4.0 | Client VM 1.6.0_15 [x86-java] | 9,0 |
| Python 3.1.1 | 9,1 | |
| Ruby 1.9.1 p243 | i386-mingw32 | 9,6 |
| IronRuby 0.9.3.0 | .NET 2.0.0.0 | 20,3 |
| Ruby 1.9.1 p376 | i386-mswin32 | 20,9 |
| Ruby 1.8.6 p368 | i386-mingw32 | 22,9 |
| IronPython 2.6 | .NET 2.0.0.0 | 225,4 |
| Jython 2.5.1 | Client VM 1.6.0_15 [x86-java] | Timeout |
Il risultato che segue invece, si riferisce alla media delle tre rilevazioni successive al riscaldamento. Le prestazioni di JRuby migliorano del 23%:
| Versione | Compilatore | Secondi |
|---|---|---|
| JRuby 1.4.0 | Client VM 1.6.0_15 [x86-java] | 6,9 |
| Python 2.6.4 | 7,5 | |
| Ruby 1.9.1 p129 | i386-mingw32 | 8,2 |
| Python 3.1.1 | 9,0 | |
| Ruby 1.9.1 p243 | i386-mingw32 | 10,0 |
| IronRuby 0.9.3.0 | .NET 2.0.0.0 | 18,9 |
| Ruby 1.9.1 p376 | i386-mswin32 | 20,6 |
| Ruby 1.8.6 p368 | i386-mingw32 | 23,2 |
| IronPython 2.6 | .NET 2.0.0.0 | 256,5 |
| Jython 2.5.1 | Client VM 1.6.0_15 [x86-java] | Timeout |
Ed ecco gli script. Ho cercato di ottimizzare le rispettive versioni e per fare ciò, ho dovuto creare due varianti per ogni linguaggio.
Ruby 1.8.6:
def strings_test(ntest) r1 = r2 = r3 = 0 xstr = "" ntest.times do #Create a string, add 'abcde1234_' until getting a str size 1000 xstr = 'abcde1234_' * 10000 #Make letters upcase xstr.upcase! #Change '1234_' with '67890 ' (space at last position) #Now the repeated string should be 'ABCDE67890 ' xstr.gsub! '1234_', '67890 ' #Cast numbers from 29 upto size/2 to string and add it to xstr variable, ciclying for every number (not add all numbers one time) 29.upto(xstr.size/2) {|n| xstr << n.to_s} #Check 1: Count 'A' char #Check 2: Count '9' char 0.upto(xstr.size-1) do |n| if xstr[n].chr() == 'A' r1+=1 elsif xstr[n].chr() == '9' r2+=1 end end #Create an array from xstr using space to split r3 += xstr.split.size end return r1, r2, r3, xstr end def arrays_test(ntest, xstr) r1 = r2 = r3 = r4 = r5 = 0 ntest.times do #Clear ar then add 5000 times this element: "I", "am", "great", null, "or", "number", 1 ar = [] 5000.times do ['I', 'am', 'great', nil, 'or', 'number', 1].each {|a| ar << a} end #...then reverse elements to obtain this order: 1, "number", "or", null, "great", "am", "I" ar.reverse! #...then, count the element with value "great" using two separate cicle #the first starting from 31 until 2955 (bounty inclused) 31.upto(2955) do |n| r1 += 1 if ar[n] == 'great' end #the second looping all the array elements ar.each {|n| r2+=1 if n == 'great'} #Loop inside and build a temporary string with index and value, without put it into a variable and only for elements <> null ar.each_index{|i| ar[i] ? "#{i} #{ar[i]}" : r3+=1 } #delete null value elements and take its size ar.compact! r4 += ar.size #then join elements with space and take its size r5 += ar.join(' ').size end return r1, r2, r3, r4, r5 end def nums_test(ntest) r1 = r2 = 0 ntest.times do #Find all prime numbers from 8 to 95 step by 3 and sum all primes got, to check the result #51.upto(307) do |n| (8..95).step(3) do |n| primes(n).each {|a| r1 += a} end #Calculate factorial numbers start from 2 to 42 r2 = 0 for n in 2..42 r2 += fac(n) end end return r1, r2 end #Primes must return an array of prime numbers def primes(n) ar = [] for x in (2..n) prime = true for y in (2..x-1) if x%y == 0 prime = false break end end ar << x if prime end return ar end def fac(n) (1..n).inject{|total, current| total * current} end # --- START --- puts "\nWarming up..." t1=t2=t3=0 time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Check3: #{r3}" puts "Check4: #{xstr.size}" time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Check3: #{r3}" puts "Check4: #{r4}" puts "Check5: #{r5}" time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) puts "\n1. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "\n2. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "\n3. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "-------------------------------------" puts "Average Strings test - Elapsed %.3f" % (t1/3) puts "Average Arrays test - Elapsed %.3f" % (t2/3) puts "Average Numeric test - Elapsed %.3f" % (t3/3) puts "\nRuby Average elapsed time %.3f" % (t1/3+t2/3+t3/3)
Ruby 1.9.1:
def strings_test(ntest) r1 = r2 = r3 = 0 xstr = "" ntest.times do #Create a string, add 'abcde1234_' until getting a str size 1000 xstr = 'abcde1234_' * 10000 #Make letters upcase xstr.upcase! #Change '1234_' with '67890 ' (space at last position) #Now the repeated string should be 'ABCDE67890 ' xstr.gsub! '1234_', '67890 ' #Cast numbers to string, from 29 up to size/2. Add it to xstr variable as well, ciclying for every number (not adding all numbers once) 29.upto(xstr.size/2) {|n| xstr << n.to_s} #Check 1: Count 'A' char #Check 2: Count '9' char 0.upto(xstr.size-1) do |n| if xstr[n] == 'A' r1+=1 elsif xstr[n] == '9' r2+=1 end end #Create an array from xstr using space to split, its size is the third check r3 += xstr.split.size end return r1, r2, r3, xstr end def arrays_test(ntest, xstr) r1 = r2 = r3 = r4 = r5 = 0 ntest.times do #Clear ar then add 5000 times this element: "I", "am", "great", null, "or", "number", 1 ar = [] 5000.times do ['I', 'am', 'great', nil, 'or', 'number', 1].each {|a| ar << a} end #...then reverse elements to obtain this order: 1, "number", "or", null, "great", "am", "I" ar.reverse! #...then, count the element with value "great" using two separate cicle #the first starting from 31 until 2955 (bounty inclused) 31.upto(2955) do |n| r1 += 1 if ar[n] == 'great' end #the second looping all the array elements ar.each {|n| r2+=1 if n == 'great'} #Loop inside and build a temporary string with index and value, without put it into a variable and only for elements <> null ar.each_index{|i| ar[i] ? "#{i} #{ar[i]}" : r3+=1 } #delete null value elements and take its size ar.compact! r4 += ar.size #then join elements with space and take its size r5 += ar.join(' ').size end return r1, r2, r3, r4, r5 end def nums_test(ntest) r1 = r2 = 0 ntest.times do #Find all prime numbers from 8 to 95 step by 3 (bounds included) and sum all primes got, to check the result #51.upto(307) do |n| (8..95).step(3) do |n| primes(n).each {|a| r1 += a} end #Calculate factorial numbers start from 2 to 42 r2 = 0 for n in 2..42 r2 += fac(n) end end return r1, r2 end #Primes must return an array of prime numbers def primes(n) ar = [] for x in (2..n) prime = true for y in (2..x-1) if x%y == 0 prime = false break end end ar << x if prime end return ar end def fac(n) (1..n).inject{|total, current| total * current} end # --- START --- puts "\nWarming up..." t1=t2=t3=0 time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Check3: #{r3}" puts "Check4: #{xstr.size}" time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Check3: #{r3}" puts "Check4: #{r4}" puts "Check5: #{r5}" time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) puts "\n1. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "\n2. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "\n3. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "-------------------------------------" puts "Average Strings test - Elapsed %.3f" % (t1/3) puts "Average Arrays test - Elapsed %.3f" % (t2/3) puts "Average Numeric test - Elapsed %.3f" % (t3/3) puts "\nRuby Average elapsed time %.3f" % (t1/3+t2/3+t3/3)
Python 2.6:
from time import time #import psyco #psyco.full() #psyco.full(memory=100) #psyco.profile(0.05, memory=100) #psyco.profile(0.2) def strings_test(ntest): r1 = r2 = r3 = 0 xstr = "" for x in xrange(ntest): #Create a string, add 'abcde1234_' until getting a xstr size 1000 xstr = 'abcde1234_' * 10000 #Make letters upcase xstr = xstr.upper() #Change '1234_' with '67890 ' (space at last position) #Now the repeated string should be 'ABCDE67890 ' xstr = xstr.replace('1234_', '67890 ') #Cast numbers to string, from 29 up to size/2. Add it to xstr variable as well, ciclying for every number (not adding all numbers once) for y in xrange(29,int(len(xstr)/2) + 1): xstr += "%s" %y #Result 1: Count 'A' char #Result 2: Count '9' char for y in xrange(0, len(xstr)): if xstr[y] == 'A': r1+=1 elif xstr[y] == '9': r2+=1 #Create an array from xstr using space to split r3 += len(xstr.split()) return r1, r2, r3, xstr #Slower than other version def multiremove(ar, what): i = 0 for el in ar: if el == what: del ar[i] i+=1 #Ugly but a bit faster def multiremove2(ar, what): todel = [] for y in xrange(0,len(ar)): if ar[y] == what: todel.append(y) todel.reverse() for y in todel: ar.pop(y) def arrays_test(ntest, xstr): r1 = r2 = r3 = r4 = r5 = 0 for x in xrange(ntest): #Clear ar then add 5000 times this element: "I", "am", "great", null, "or", "number", 1 ar = [] for y in xrange(0, 5000): ar.extend(["I", "am", "great", None, "or", "number", 1]) #...then reverse elements to obtain this order: 1, "number", "or", null, "great", "am", "I" ar.reverse() #...then, count the element with value "great" using two separate cicle #the first starting from 31 until 2955 (bounty included) for y in xrange(31,2955): if ar[y] == "great": r1 +=1 #the second looping all the array elements for y in xrange(0, len(ar)): if ar[y] == "great": r2+=1 #Loop inside and build a temporary string with index and value, without put it into a variable and only for elements <> null for y in xrange(0, len(ar)): if ar[y]: "%s %s" %(y, ar[y]) else: r3+=1 #delete null value elements and take its size multiremove2(ar, None) r4 += len(ar) #then join elements with space and take its size r5 += len(" ".join(str(n) for n in ar)) return r1, r2, r3, r4, r5 def nums_test(ntest): r1 = r2 = 0 for x in xrange(ntest): #Find all prime numbers from 8 to 95 step by 3 (bounds included) and sum all primes got, to check the result for n in xrange(8, 96, 3): for prime in primes(n): r1 += prime fac = lambda n:[1,0][n>0] or fac(n-1)*n #Calculate factorial numbers start from 2 to 42 (bounds included) r2 = 0 for n in xrange(2, 43): r2 += fac(n) return r1, r2 #Primes must return an array of prime numbers def primes(n): ar = [] for x in xrange(2, n+1): prime = True for y in xrange(2, x): if x%y == 0: prime = False break if prime: ar.append(x) return ar # --- START --- print "\nWarming up..." t1=t2=t3=0 stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print "Strings test - Elapsed %.3f" % (p1) print "Check1: %s" %r1 print "Check2: %s" %r2 print "Check3: %s" %r3 print "Check4: %d" %(len(xstr)) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print "Arrays test - Elapsed %.3f" % (p2) print "Check1: %s" %r1 print "Check2: %s" %r2 print "Check3: %s" %r3 print "Check4: %s" %r4 print "Check5: %s" %r5 stime = time() r1, r2 = nums_test(500) p3=time() - stime print "Numeric test - Elapsed %.3f" % (p3) print "Check1: %s" %r1 print "Check2: %s" %r2 print "Python Partial elapsed time %.3f" % (p1+p2+p3) print "\n1. Starting Python tests..." stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print "Strings test - Elapsed %.3f" % (p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print "Arrays test - Elapsed %.3f" % (p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print "Numeric test - Elapsed %.3f" % (p3) print "Python Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 print "\n2. Starting Python tests..." stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print "Strings test - Elapsed %.3f" % (p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print "Arrays test - Elapsed %.3f" % (p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print "Numeric test - Elapsed %.3f" % (p3) print "Python Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 print "\n3. Starting Python tests..." stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print "Strings test - Elapsed %.3f" % (p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print "Arrays test - Elapsed %.3f" % (p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print "Numeric test - Elapsed %.3f" % (p3) print "Python Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 print "-------------------------------------" print "Average Strings test - Elapsed %.3f" % (t1/3) print "Average Arrays test - Elapsed %.3f" % (t2/3) print "Average Numeric test - Elapsed %.3f" % (t3/3) print "Python Average elapsed time %.3f" % (t1/3+t2/3+t3/3)
Python 3.1:
from time import time #import psyco #psyco.full() #psyco.full(memory=100) #psyco.profile(0.05, memory=100) #psyco.profile(0.2) def strings_test(ntest): r1 = r2 = r3 = 0 xstr = "" for x in range(ntest): #Create a string, add 'abcde1234_' until getting a xstr size 1000 xstr = 'abcde1234_' * 10000 #Make letters upcase xstr = xstr.upper() #Change '1234_' with '67890 ' (space at last position) #Now the repeated string should be 'ABCDE67890 ' xstr = xstr.replace('1234_', '67890 ') #Cast numbers from 29 upto 1028 to string and add it to xstr variable, ciclying for every number (not add all numbers one time) for y in range(29,int(len(xstr)/2) + 1): xstr += "%s" %y #Result 1: Count 'A' char #Result 2: Count '9' char for y in range(0, len(xstr)): if xstr[y] == 'A': r1+=1 elif xstr[y] == '9': r2+=1 #Create an array from xstr using space to split r3 += len(xstr.split()) return r1, r2, r3, xstr #Slower than other version def multiremove(ar, what): i = 0 for el in ar: if el == what: del ar[i] i+=1 #Ugly but a bit faster def multiremove2(ar, what): todel = [] for y in range(0,len(ar)): if ar[y] == what: todel.append(y) todel.reverse() for y in todel: ar.pop(y) def arrays_test(ntest, xstr): r1 = r2 = r3 = r4 = r5 = 0 for x in range(ntest): #Clear ar then add 5000 times this element: "I", "am", "great", null, "or", "number", 1 ar = [] for y in range(0, 5000): ar.extend(["I", "am", "great", None, "or", "number", 1]) #...then reverse elements to obtain this order: 1, "number", "or", null, "great", "am", "I" ar.reverse() #...then, count the element with value "great" using two separate cicle #the first starting from 31 until 2955 (bounty included) for y in range(31,2955): if ar[y] == "great": r1 +=1 #the second looping all the array elements for y in range(0, len(ar)): if ar[y] == "great": r2+=1 #Loop inside and build a temporary string with index and value, without put it into a variable and only for elements <> null for y in range(0, len(ar)): if ar[y]: "%s %s" %(y, ar[y]) else: r3+=1 #delete null value elements and take its size multiremove2(ar, None) r4 += len(ar) #then join elements with space and take its size r5 += len(" ".join(str(n) for n in ar)) return r1, r2, r3, r4, r5 def nums_test(ntest): r1 = r2 = 0 for x in range(ntest): #Find all prime numbers from 8 to 95 step by 3 (bounds included) and sum all primes got, to check the result for n in range(8, 96, 3): for prime in primes(n): r1 += prime fac = lambda n:[1,0][n>0] or fac(n-1)*n #Calculate factorial numbers start from 2 to 42 (bounds included) r2 = 0 for n in range(2, 43): r2 += fac(n) return r1, r2 #Primes must return an array of prime numbers def primes(n): ar = [] for x in range(2, n+1): prime = True for y in range(2, x): if x%y == 0: prime = False break if prime: ar.append(x) return ar # --- START --- print("\nWarming up...") t1=t2=t3=0 stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print("Strings test - Elapsed %.3f" % p1) print("Check1: %s" % r1) print("Check2: %s" % r2) print("Check3: %s" % r3) print("Check4: %d" % len(xstr)) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print("Arrays test - Elapsed %.3f" % p2) print("Check1: %s" % r1) print("Check2: %s" % r2) print("Check3: %s" % r3) print("Check4: %s" % r4) print("Check5: %s" % r5) stime = time() r1, r2 = nums_test(500) p3=time() - stime print("Numeric test - Elapsed %.3f" % p3) print("Check1: %s" % r1) print("Check2: %s" % r2) print( "Python Partial elapsed time %.3f" % (p1+p2+p3)) print("\n1. Starting Python tests...") stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print("Strings test - Elapsed %.3f" % p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print( "Arrays test - Elapsed %.3f" % p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print("Numeric test - Elapsed %.3f" % p3) print( "Python Partial elapsed time %.3f" % (p1+p2+p3)) t1+=p1;t2+=p2;t3+=p3 print("\n2. Starting Python tests...") stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print("Strings test - Elapsed %.3f" % p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print( "Arrays test - Elapsed %.3f" % p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print("Numeric test - Elapsed %.3f" % p3) print( "Python Partial elapsed time %.3f" % (p1+p2+p3)) t1+=p1;t2+=p2;t3+=p3 print("\n3. Starting Python tests...") stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print("Strings test - Elapsed %.3f" % p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print( "Arrays test - Elapsed %.3f" % p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print("Numeric test - Elapsed %.3f" % p3) print( "Python Partial elapsed time %.3f" % (p1+p2+p3)) t1+=p1;t2+=p2;t3+=p3 print("-------------------------------------") print("Average Strings test - Elapsed %.3f" % (t1/3)) print("Average Arrays test - Elapsed %.3f" % (t2/3)) print("Average Numeric test - Elapsed %.3f" % (t3/3)) print("Python Average elapsed time %.3f" % (t1/3+t2/3+t3/3))
Italiano
English
roger
3 June 2010 at 17:42
(sorry to post here, couldn’t seem to post on the older post)
I did notice with your mandelbrot benchmark that if you run it in jruby –server and “repeat” about 10 times it goes from 3.5s to 2.75s on my machine (if that’s any help).
Thanks!