[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[DotGNU]Fun with Portable.NET benchmarks
From: |
Rhys Weatherley |
Subject: |
[DotGNU]Fun with Portable.NET benchmarks |
Date: |
Mon, 03 Jun 2002 13:36:13 +1000 |
I've been spending the last 3 weeks optimising the CVM
interpreter in the runtime engine using a variety of
techniques.
DotGNU members may be interested in the following table
that charts my progress (all measurements done on an
866 MHz Pentium III):
--------------------------------------------------------
11 May 13 May 24 May 1 June 3 June
Sieve 1103 1320 1434 1781 4760
Loop 1012 1097 1279 2073 13011
Logic 996 1945 2294 6979 7268
String 80 132 148 216 205
Float 34 50 54 60 60
Method 1088 1336 1519 3068 3573
PNetMark 385 540 609 1004 1644
11 May - switch loop using ilrun_opt (pnet 0.3.6)
13 May - token threaded interpreter
24 May - direct threaded interpreter
1 June - first cut of code unrolling
3 June - unroll object and array operations
--------------------------------------------------------
The "Loop" test makes heavy use of array operations,
which is why it had such a substantial jump when those
operations were unrolled.
The latest addition is code unrolling. This uses a
"mini JIT" to convert a subset of the CVM instructions
into x86 machine code. Not all instructions are
converted in this manner, so it isn't a "full JIT".
But as you can see, it does improve performance greatly
by flattening out the basic blocks in the code to reduce
the overhead of instruction dispatching.
Cheers,
Rhys.
- [DotGNU]Fun with Portable.NET benchmarks,
Rhys Weatherley <=