Daniel Berger
Posts: 1383
Nickname: djberg96
Registered: Sep, 2004
Daniel Berger is a Ruby Programmer who also dabbles in C and Perl
Ruby, Solaris, Compiler Flags
Posted: Jul 30, 2011 12:42 AM
This post originated from an RSS feed registered with Ruby Buzz
by Daniel Berger.
Original Post: Ruby, Solaris, Compiler Flags
Feed Title: Testing 1,2,3...
Feed URL: http://djberg96.livejournal.com/data/rss
Feed Description: A blog on Ruby and other stuff.
Latest Ruby Buzz Posts
Latest Ruby Buzz Posts by Daniel Berger
Latest Posts From Testing 1,2,3...
Advertisement
After finally getting my Solaris 10 VM reinstalled, along with a copy of Sun Studio Compiler 12, I decided to do some benchmarking. These are the results of some Array benchmarks that are included in the "berger_spec" project, using Ruby 1.8.7-p352. The first set of results are with no compiler flags set. The second set are the results using "-g -fast -xipo -xrestrict -xpagesize=2M". With no flags set:
Array[] 0.310000 0.000000 0.310000 ( 0.314656)
Array.new(int) 0.240000 0.000000 0.240000 ( 0.238028)
Array.new(int, obj) 0.300000 0.000000 0.300000 ( 0.300978)
Array.new(array) 0.370000 0.000000 0.370000 ( 0.370444)
Array.new(size){ block } 0.490000 0.000000 0.490000 ( 0.487876)
Array#& 0.460000 0.000000 0.460000 ( 0.467969)
Array#* (int) 0.310000 0.010000 0.320000 ( 0.305176)
Array#* (join) 0.970000 0.000000 0.970000 ( 0.972113)
Array#- 0.520000 0.000000 0.520000 ( 0.526612)
Array#<< 0.120000 0.010000 0.130000 ( 0.137587)
Array#<=> 0.280000 0.000000 0.280000 ( 0.282714)
Array#== 0.320000 0.000000 0.320000 ( 0.320758)
Array#[] 0.070000 0.000000 0.070000 ( 0.067216)
Array#[]= 0.080000 0.000000 0.080000 ( 0.075855)
Array#| 0.570000 0.010000 0.580000 ( 0.591650)
Array#assoc 0.130000 0.000000 0.130000 ( 0.130801)
Array#at 0.060000 0.000000 0.060000 ( 0.065698)
Array#clear 0.070000 0.000000 0.070000 ( 0.065757)
Array#collect 0.400000 0.000000 0.400000 ( 0.404131)
Array#collect! 0.330000 0.000000 0.330000 ( 0.331329)
Array#compact 0.150000 0.000000 0.150000 ( 0.152455)
Array#compact! 0.060000 0.000000 0.060000 ( 0.062184)
Array#concat 0.130000 0.010000 0.140000 ( 0.139257)
Array#delete(obj) 0.250000 0.000000 0.250000 ( 0.248629)
Array#delete(obj){ block } 0.310000 0.000000 0.310000 ( 0.308989)
Array#delete_at 0.070000 0.000000 0.070000 ( 0.067850)
Array#delete_if 0.360000 0.000000 0.360000 ( 0.361809)
Array#each 0.310000 0.000000 0.310000 ( 0.317559)
Array#each_index 0.390000 0.000000 0.390000 ( 0.384572)
Array#empty? 0.060000 0.000000 0.060000 ( 0.058954)
Array#eql? 0.260000 0.000000 0.260000 ( 0.262421)
Array#fetch(index) 0.070000 0.000000 0.070000 ( 0.073590)
Array#fetch(index, default) 0.110000 0.000000 0.110000 ( 0.109604)
Array#fetch(index){ block } 0.160000 0.000000 0.160000 ( 0.155640)
Array#fill(obj) 0.110000 0.000000 0.110000 ( 0.115837)
Array#fill(obj, start) 0.130000 0.000000 0.130000 ( 0.129365)
Array#fill(obj, start, length) 0.120000 0.000000 0.120000 ( 0.119590)
Array#fill(obj, range) 0.160000 0.000000 0.160000 ( 0.160754)
Array#fill{ block } 0.250000 0.000000 0.250000 ( 0.247193)
Array#fill(start){ block } 0.230000 0.000000 0.230000 ( 0.232438)
Array#fill(start, length){ block } 0.140000 0.000000 0.140000 ( 0.144361)
Array#fill(range){ block } 0.230000 0.000000 0.230000 ( 0.227871)
Array#first 0.060000 0.000000 0.060000 ( 0.056156)
Array#flatten 1.000000 0.050000 1.050000 ( 1.044090)
Array#flatten! 0.810000 0.000000 0.810000 ( 0.812008)
Array#include? 0.290000 0.000000 0.290000 ( 0.288412)
Array#index 0.480000 0.000000 0.480000 ( 0.485483)
Array#insert 34.160000 0.040000 34.200000 ( 34.253063)
Array#join 0.950000 0.060000 1.010000 ( 1.017708)
Array#last 0.070000 0.000000 0.070000 ( 0.060686)
Array#length 0.050000 0.000000 0.050000 ( 0.058534)
Array#nitems 0.060000 0.000000 0.060000 ( 0.060758)
Array#pack 0.280000 0.070000 0.350000 ( 0.346961)
Array#pop 0.060000 0.000000 0.060000 ( 0.061161)
Array#push 0.270000 0.010000 0.280000 ( 0.280934)
Array#rassoc 0.150000 0.000000 0.150000 ( 0.152078)
Array#reject 0.380000 0.000000 0.380000 ( 0.377071)
Array#reject! 0.310000 0.000000 0.310000 ( 0.315611)
Array#replace 0.220000 0.000000 0.220000 ( 0.212419)
Array#reverse 0.110000 0.000000 0.110000 ( 0.118272)
Array#reverse! 0.070000 0.000000 0.070000 ( 0.065353)
Array#reverse_each 0.310000 0.000000 0.310000 ( 0.307441)
Array#rindex 0.070000 0.000000 0.070000 ( 0.070481)
Array#shift 0.060000 0.000000 0.060000 ( 0.061049)
Array#slice(int) 0.060000 0.000000 0.060000 ( 0.064987)
Array#slice(start, length) 0.100000 0.000000 0.100000 ( 0.098006)
Array#slice(range) 0.190000 0.000000 0.190000 ( 0.184972)
Array#slice!(int)! 0.070000 0.000000 0.070000 ( 0.072685)
Array#slice!(start, length) 0.120000 0.000000 0.120000 ( 0.125541)
Array#slice!(range) 0.160000 0.000000 0.160000 ( 0.157826)
Array#sort 0.150000 0.000000 0.150000 ( 0.143664)
Array#sort{ block } 1.200000 0.000000 1.200000 ( 1.212228)
Array#sort! 0.090000 0.000000 0.090000 ( 0.083815)
Array#sort!{ block } 0.880000 0.000000 0.880000 ( 0.887263)
Array#to_a 0.070000 0.000000 0.070000 ( 0.063464)
Array#to_ary 0.050000 0.000000 0.050000 ( 0.057507)
Array#to_s 1.010000 0.000000 1.010000 ( 1.011248)
Array#transpose 0.320000 0.000000 0.320000 ( 0.316514)
Array#uniq 0.540000 0.000000 0.540000 ( 0.543465)
Array#uniq! 0.350000 0.000000 0.350000 ( 0.345773)
Array#unshift 0.050000 0.000000 0.050000 ( 0.057270)
Array#values_at(int) 0.200000 0.000000 0.200000 ( 0.192256)
Array#values_at(range) 0.250000 0.000000 0.250000 ( 0.253189)
With compiler flags -g -fast -xipo -xrestrict -xpagesize=2M:
Array[] 0.170000 0.000000 0.170000 ( 0.172121)
Array.new(int) 0.140000 0.000000 0.140000 ( 0.135445)
Array.new(int, obj) 0.170000 0.000000 0.170000 ( 0.166088)
Array.new(array) 0.190000 0.000000 0.190000 ( 0.197206)
Array.new(size){ block } 0.240000 0.000000 0.240000 ( 0.237472)
Array#& 0.310000 0.000000 0.310000 ( 0.310026)
Array#* (int) 0.210000 0.010000 0.220000 ( 0.217617)
Array#* (join) 0.520000 0.000000 0.520000 ( 0.525306)
Array#- 0.340000 0.000000 0.340000 ( 0.340506)
Array#<< 0.060000 0.050000 0.110000 ( 0.109793)
Array#<=> 0.170000 0.000000 0.170000 ( 0.162905)
Array#== 0.200000 0.050000 0.250000 ( 0.253786)
Array#[] 0.030000 0.000000 0.030000 ( 0.037419)
Array#[]= 0.050000 0.000000 0.050000 ( 0.042840)
Array#| 0.390000 0.050000 0.440000 ( 0.439489)
Array#assoc 0.070000 0.000000 0.070000 ( 0.064447)
Array#at 0.030000 0.000000 0.030000 ( 0.036351)
Array#clear 0.030000 0.000000 0.030000 ( 0.031723)
Array#collect 0.170000 0.000000 0.170000 ( 0.163739)
Array#collect! 0.130000 0.000000 0.130000 ( 0.131613)
Array#compact 0.080000 0.010000 0.090000 ( 0.085052)
Array#compact! 0.030000 0.000000 0.030000 ( 0.033368)
Array#concat 0.090000 0.020000 0.110000 ( 0.111146)
Array#delete(obj) 0.130000 0.000000 0.130000 ( 0.129340)
Array#delete(obj){ block } 0.170000 0.000000 0.170000 ( 0.170104)
Array#delete_at 0.040000 0.000000 0.040000 ( 0.036985)
Array#delete_if 0.180000 0.000000 0.180000 ( 0.184568)
Array#each 0.120000 0.000000 0.120000 ( 0.115847)
Array#each_index 0.130000 0.000000 0.130000 ( 0.133975)
Array#empty? 0.030000 0.000000 0.030000 ( 0.030337)
Array#eql? 0.160000 0.000000 0.160000 ( 0.156354)
Array#fetch(index) 0.040000 0.000000 0.040000 ( 0.040687)
Array#fetch(index, default) 0.050000 0.000000 0.050000 ( 0.054539)
Array#fetch(index){ block } 0.070000 0.000000 0.070000 ( 0.074566)
Array#fill(obj) 0.050000 0.000000 0.050000 ( 0.053080)
Array#fill(obj, start) 0.070000 0.000000 0.070000 ( 0.064187)
Array#fill(obj, start, length) 0.060000 0.000000 0.060000 ( 0.060635)
Array#fill(obj, range) 0.090000 0.000000 0.090000 ( 0.087738)
Array#fill{ block } 0.130000 0.000000 0.130000 ( 0.130971)
Array#fill(start){ block } 0.120000 0.000000 0.120000 ( 0.122547)
Array#fill(start, length){ block } 0.080000 0.000000 0.080000 ( 0.083082)
Array#fill(range){ block } 0.130000 0.000000 0.130000 ( 0.129588)
Array#first 0.030000 0.000000 0.030000 ( 0.031762)
Array#flatten 0.610000 0.060000 0.670000 ( 0.671874)
Array#flatten! 0.480000 0.000000 0.480000 ( 0.476308)
Array#include? 0.160000 0.000000 0.160000 ( 0.163326)
Array#index 0.260000 0.000000 0.260000 ( 0.264573)
Array#insert 30.930000 0.020000 30.950000 ( 30.960786)
Array#join 0.560000 0.260000 0.820000 ( 0.832717)
Array#last 0.030000 0.000000 0.030000 ( 0.030846)
Array#length 0.030000 0.000000 0.030000 ( 0.030950)
Array#nitems 0.030000 0.000000 0.030000 ( 0.032106)
Array#pack 0.250000 0.230000 0.480000 ( 0.475462)
Array#pop 0.030000 0.000000 0.030000 ( 0.031812)
Array#push 0.150000 0.160000 0.310000 ( 0.296990)
Array#rassoc 0.080000 0.000000 0.080000 ( 0.082723)
Array#reject 0.180000 0.000000 0.180000 ( 0.182116)
Array#reject! 0.120000 0.000000 0.120000 ( 0.116769)
Array#replace 0.090000 0.000000 0.090000 ( 0.092382)
Array#reverse 0.060000 0.000000 0.060000 ( 0.061858)
Array#reverse! 0.040000 0.000000 0.040000 ( 0.032183)
Array#reverse_each 0.110000 0.000000 0.110000 ( 0.113048)
Array#rindex 0.040000 0.000000 0.040000 ( 0.039673)
Array#shift 0.030000 0.000000 0.030000 ( 0.033855)
Array#slice(int) 0.040000 0.000000 0.040000 ( 0.036325)
Array#slice(start, length) 0.090000 0.000000 0.090000 ( 0.091806)
Array#slice(range) 0.070000 0.000000 0.070000 ( 0.072233)
Array#slice!(int)! 0.040000 0.000000 0.040000 ( 0.041699)
Array#slice!(start, length) 0.070000 0.000000 0.070000 ( 0.065852)
Array#slice!(range) 0.090000 0.000000 0.090000 ( 0.087642)
Array#sort 0.080000 0.000000 0.080000 ( 0.086419)
Array#sort{ block } 0.560000 0.000000 0.560000 ( 0.559803)
Array#sort! 0.050000 0.000000 0.050000 ( 0.048642)
Array#sort!{ block } 0.470000 0.000000 0.470000 ( 0.463398)
Array#to_a 0.030000 0.000000 0.030000 ( 0.033682)
Array#to_ary 0.030000 0.000000 0.030000 ( 0.032244)
Array#to_s 0.560000 0.350000 0.910000 ( 0.911277)
Array#transpose 0.260000 0.000000 0.260000 ( 0.258392)
Array#uniq 0.370000 0.000000 0.370000 ( 0.364935)
Array#uniq! 0.160000 0.000000 0.160000 ( 0.160942)
Array#unshift 0.030000 0.000000 0.030000 ( 0.030089)
Array#values_at(int) 0.060000 0.000000 0.060000 ( 0.066309)
Array#values_at(range) 0.300000 0.010000 0.310000 ( 0.310101)
So, generally speaking, some nice improvements. :)
Read: Ruby, Solaris, Compiler Flags