[Mono-devel-list] String::Equals Performance

Ben Maurer bmaurer at ximian.com
Sun Jul 4 14:19:28 EDT 2004


I decided to write the benchmark myself. Here are some results:

important cpu info:

[benm at 164-99-120-44 benm]$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 9
model name      : Intel(R) Pentium(R) M processor 1600MHz
stepping        : 5
cpu MHz         : 1599.104

(NB: I did this test with the cpuspeed daemon set to not enable
speedstepping, so my effective cpu speed did not change during the
test).

[benm at 164-99-120-44 play]$ mono streq.exe
                Test:    Current   |    Andreas   |   Change
              ptr eq:        187   |        127   |  32.09 %
          length neq:        542   |        390   |  28.04 %
 10, neq, first char:        311   |        387   | -24.44 %
  10, neq, last char:        518   |        387   |  25.29 %
          0 char, eq:        227   |        233   |  -2.64 %
          1 char, eq:        273   |        245   |  10.26 %
          2 char, eq:        342   |        260   |  23.98 %
          3 char, eq:        352   |        274   |  22.16 %
          4 char, eq:        393   |        287   |  26.97 %
          5 char, eq:        401   |        304   |  24.19 %
          6 char, eq:        443   |        323   |  27.09 %
          7 char, eq:        450   |        337   |  25.11 %
          8 char, eq:        493   |        351   |  28.80 %
          9 char, eq:        502   |        369   |  26.49 %
         10 char, eq:        543   |        387   |  28.73 %
         11 char, eq:        553   |        402   |  27.31 %
         12 char, eq:        590   |        417   |  29.32 %
         13 char, eq:        602   |        435   |  27.74 %
         14 char, eq:        643   |        451   |  29.86 %
         15 char, eq:        652   |        468   |  28.22 %
         16 char, eq:        692   |        410   |  40.75 %
         17 char, eq:        701   |        421   |  39.94 %
         18 char, eq:        745   |        438   |  41.21 %
         19 char, eq:        746   |        453   |  39.28 %
         20 char, eq:        794   |        467   |  41.18 %
         40 char, eq:       1312   |        709   |  45.96 %
         60 char, eq:       1823   |        951   |  47.83 %
         80 char, eq:       2320   |       1125   |  51.51 %
        100 char, eq:       2825   |       1361   |  51.82 %
        150 char, eq:       4182   |       1931   |  53.83 %
        200 char, eq:       5465   |       2498   |  54.29 %
        250 char, eq:       6725   |       3076   |  54.26 %
        300 char, eq:       7995   |       3622   |  54.70 %
        350 char, eq:       9257   |       4213   |  54.49 %
        400 char, eq:      10528   |       4676   |  55.59 %
        450 char, eq:      11786   |       5224   |  55.68 %
        500 char, eq:      13060   |       5796   |  55.62 %
        600 char, eq:      15582   |       6935   |  55.49 %
        700 char, eq:      18116   |       8070   |  55.45 %
        800 char, eq:      20643   |       9124   |  55.80 %
        900 char, eq:      23179   |      10291   |  55.60 %

[benm at 164-99-120-44 play]$ mono -O=all streq.exe
                Test:    Current   |    Andreas   |   Change
              ptr eq:        115   |        102   |  11.30 %
          length neq:        572   |        302   |  47.20 %
 10, neq, first char:        291   |        302   |  -3.78 %
  10, neq, last char:        533   |        301   |  43.53 %
          0 char, eq:        223   |        213   |   4.48 %
          1 char, eq:        259   |        219   |  15.44 %
          2 char, eq:        326   |        228   |  30.06 %
          3 char, eq:        338   |        237   |  29.88 %
          4 char, eq:        382   |        248   |  35.08 %
          5 char, eq:        396   |        255   |  35.61 %
          6 char, eq:        440   |        263   |  40.23 %
          7 char, eq:        445   |        274   |  38.43 %
          8 char, eq:        514   |        286   |  44.36 %
          9 char, eq:        514   |        294   |  42.80 %
         10 char, eq:        587   |        304   |  48.21 %
         11 char, eq:        580   |        309   |  46.72 %
         12 char, eq:        631   |        318   |  49.60 %
         13 char, eq:        641   |        330   |  48.52 %
         14 char, eq:        699   |        347   |  50.36 %
         15 char, eq:        695   |        345   |  50.36 %
         16 char, eq:        763   |        327   |  57.14 %
         17 char, eq:        751   |        337   |  55.13 %
         18 char, eq:        808   |        343   |  57.55 %
         19 char, eq:        808   |        355   |  56.06 %
         20 char, eq:        862   |        362   |  58.00 %
         40 char, eq:       1465   |        493   |  66.35 %
         60 char, eq:       2064   |        627   |  69.62 %
         80 char, eq:       2665   |        733   |  72.50 %
        100 char, eq:       3254   |        865   |  73.42 %
        150 char, eq:       4918   |       1184   |  75.93 %
        200 char, eq:       6429   |       1504   |  76.61 %
        250 char, eq:       8095   |       1825   |  77.46 %
        300 char, eq:       9208   |       2146   |  76.69 %
        350 char, eq:      10944   |       2468   |  77.45 %
        400 char, eq:      12357   |       2759   |  77.67 %
        450 char, eq:      13829   |       3075   |  77.76 %
        500 char, eq:      15650   |       3399   |  78.28 %
        600 char, eq:      18451   |       4043   |  78.09 %
        700 char, eq:      21285   |       4686   |  77.98 %
        800 char, eq:      24276   |       5291   |  78.20 %
        900 char, eq:      27261   |       5930   |  78.25 %

Some notes:
      * Why the regression on `10, neq, first char'? Alot of that goes
        away with -O=all, but still something to look at.
      * Ditto with `0 char, eq'
      * Why does -O=all slow down the current code?
      * MS's jit seems to generate much better code than our jit here.
        We need to look into this. I can't give numbers here because of
        the lovely EULA ;-(.
      * You should not run this benchmark against the 1.0 release. Right
        after 1.0, I added a optimization to the jit which makes
        get_OffsetToStringData an intrinsic. This makes the statement
        fixed (char* a = b) much faster -- and that is the only way to
        get the data from a string if you are not inside the string
        class.

-- Ben




More information about the Mono-devel-list mailing list