This is a comparison of mops running on Parrot (-O6 on an Athlon 700)
versus Java JDK 1.4.0 beta 2 jitted and interpreted.  You can see that
Parrot performance is very comparable to Java in interpreted mode.

I've attached mops.class and mops.ksm, some disassembly output from
Kopi.  mops.class was generated automatically by Parrot2Java which I
will make available once I fix a few more bugs :-).

-Kevin


$ test_prog mops.pbc
Iterations:    100000000
Estimated ops: 300000000
Elapsed time:  14.766181
M op/s:        20.316695

$ java -version
java version "1.4.0-beta2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta2-b77)
Java HotSpot(TM) Client VM (build 1.4.0-beta2-b77, mixed mode)

$ java mops
Iterations:    100000000
Estimated ops: 300000000
Elapsed time:  0.6059999465942383
M op/s:        495.0495485783799

$ java -Xint mops
Iterations:    100000000
Estimated ops: 300000000
Elapsed time:  10.911999940872192
M op/s:        27.49266877067277

Attachment: mops.class
Description: Binary data

// compiler version: 45.3

@source "mops.pbc"
public class mops extends java.lang.Object {

    /**
     * main
     *
     * @stack   20
     * @locals  12
     */
    public static void main(java.lang.String[]) {
        _L0:    @const          0
                @istore         1
                @const          1
                @istore         2
                @const          100000000
                @istore         3
                @getstatic      java.io.PrintStream java.lang.System.out
                @const          "Iterations:    "
                @invokevirtual  void java.io.PrintStream.print(java.lang.String)
                @getstatic      java.io.PrintStream java.lang.System.out
                @iload          3
                @invokevirtual  void java.io.PrintStream.print(int)
                @getstatic      java.io.PrintStream java.lang.System.out
                @const          "\n"
                @invokevirtual  void java.io.PrintStream.print(java.lang.String)
                @const          3
                @istore         4
                @iload          3
                @iload          4
                @imul           
                @istore         5
                @getstatic      java.io.PrintStream java.lang.System.out
                @const          "Estimated ops: "
                @invokevirtual  void java.io.PrintStream.print(java.lang.String)
                @getstatic      java.io.PrintStream java.lang.System.out
                @iload          5
                @invokevirtual  void java.io.PrintStream.print(int)
                @getstatic      java.io.PrintStream java.lang.System.out
                @const          "\n"
                @invokevirtual  void java.io.PrintStream.print(java.lang.String)
                @invokestatic   long java.lang.System.currentTimeMillis()
                @l2d            
                @const          1000.0D
                @ddiv           
                @dstore         6
        _L35:   @iload          1
                @iload          3
                @if_icmpeq      _L43
                @iload          1
                @iload          2
                @iadd           
                @istore         1
                @goto           _L35
        _L43:   @invokestatic   long java.lang.System.currentTimeMillis()
                @l2d            
                @const          1000.0D
                @ddiv           
                @dstore         8
                @dload          8
                @dload          6
                @dsub           
                @dstore         10
                @getstatic      java.io.PrintStream java.lang.System.out
                @const          "Elapsed time:  "
                @invokevirtual  void java.io.PrintStream.print(java.lang.String)
                @getstatic      java.io.PrintStream java.lang.System.out
                @dload          10
                @invokevirtual  void java.io.PrintStream.print(double)
                @getstatic      java.io.PrintStream java.lang.System.out
                @const          "\n"
                @invokevirtual  void java.io.PrintStream.print(java.lang.String)
                @iload          5
                @i2d            
                @dstore         6
                @dload          6
                @dload          10
                @ddiv           
                @dstore         6
                @const          1000000.0D
                @dstore         10
                @dload          6
                @dload          10
                @ddiv           
                @dstore         6
                @getstatic      java.io.PrintStream java.lang.System.out
                @const          "M op/s:        "
                @invokevirtual  void java.io.PrintStream.print(java.lang.String)
                @getstatic      java.io.PrintStream java.lang.System.out
                @dload          6
                @invokevirtual  void java.io.PrintStream.print(double)
                @getstatic      java.io.PrintStream java.lang.System.out
                @const          "\n"
        _L82:   @invokevirtual  void java.io.PrintStream.print(java.lang.String)
                @return         
        @var    0: args java.lang.String[] [ _L0, _L82]
        @var    1: i2 int [ _L0, _L82]
        @var    2: i3 int [ _L0, _L82]
        @var    3: i4 int [ _L0, _L82]
        @var    4: i1 int [ _L0, _L82]
        @var    5: i5 int [ _L0, _L82]
        @var    6: d1 double [ _L0, _L82]
        @var    8: d5 double [ _L0, _L82]
        @var    10: d2 double [ _L0, _L82]
        
    }
}

Reply via email to