
PearColator!

Optimizing compiler fast PowerPC emulation, using the Jikes RVM as a dynamic binary translator (DBT). The PearColator project's home is now on SourceForge!
PearColator is a DBT built around an existing dynamic optimizing compiler and adaptive compilation framework. It is written in Java. It has a safe and portable memory model, the cost of which can be optimized away by code motion, extended array SSA transformations and other optimizations (the Jikes RVM has a clean and simple intermediate representation making it ideal for creating optimizations - Java is well known as an excellent develoment language). PearColator is cleanly written in Java, and should be portable to other JVMs at little cost. PearColator optimizes itself in parallel to its execution. As part of the Jamaica project parallelisation optimizations have been created and are being tested for PearColator. Java's exception model allows hardware exceptions to be precisely and accurately simulated in the presence of optimizing compiler optimizations.
License:
PearColator is released under the CPL to be compatible with the Jikes RVM.
Status:
PearColator is still under development but already runs a number of applications (understandably our interest has primarily been with benchmarks). If you are looking for a fast, stable and ready to use open source PowerPC dynamic binary translator then we'd recomend PearPC or QEMU. If you are an academic researching computer architectures then you may want to try SimpleScalar as well as PearColator.
Results:
The following are results collected from PearColator and other DBTs:
Host Machine SuSE or yellowdog Linux | Execution environment | Dhrystones C or Java version |
GZIP Compressing 10MB of zeros | Primes Computing and printing prime numbers |
---|---|---|---|---|
G3 600MHz | Native execution | 714285.7 | 0.880s | 2.190s |
Athlon XP 2700+ | Native execution | 3333333.2 | 0.166s | 2.190s |
Athlon XP 2700+ | QEMU fast fast memory model ignoring security and paging issues | 500000.0 | 0.905s | 1.720s |
Athlon XP 2700+ | PearPC Running from a Darwin command prompt | 140845.1 | 3.560s | 3.740s |
Athlon XP 2700+ | PearColator Result for optimal trace length | 243902.4 | 8.968s | 13.35s |
Athlon XP 2700+ | Jikes RVM | 2503755.0 | n/a | n/a |
Athlon XP 2700+ | HotSpot 1.4.2 client | 3661662.0 | n/a | n/a |
Athlon XP 2700+ | HotSpot 1.4.2 server | 5753739.0 | n/a | n/a |
Both gzip and primes only run for a short time, so the cost of optimizing compiler isn't recovered by improved performance. The optimizing compiler allows the performance of a secure and safe memory model version of PearColator to be almost half of that of the insecure QEMU fast performance.
Below is the result of running nbench on PearColator on an Athlon XP 2700+:
BYTEmark* Native Mode Benchmark ver. 2 (10/95) Index-split by Andrew D. Balsa (11/97) Linux/Unix* port by Uwe F. Mayer (12/96,11/97) TEST : Iterations/sec. : Old Index : New Index : : Pentium 90* : AMD K6/233* --------------------:------------------:-------------:------------ NUMERIC SORT : 11.553 : 0.30 : 0.10 STRING SORT : 0.57828 : 0.26 : 0.04 BITFIELD : 3.2823e+06 : 0.56 : 0.12 FP EMULATION : 0.56264 : 0.27 : 0.06 FOURIER : 16.485 : 0.02 : 0.01 ASSIGNMENT : 0.20576 : 0.78 : 0.20 IDEA : 48.94 : 0.75 : 0.22 HUFFMAN : 16.021 : 0.44 : 0.14 NEURAL NET : 0.090893 : 0.15 : 0.06 LU DECOMPOSITION : 2.9936 : 0.16 : 0.11 ==========================ORIGINAL BYTEMARK RESULTS========================== INTEGER INDEX : -10.000 FLOATING-POINT INDEX: -10.000 Baseline (MSDOS*) : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0 ==============================LINUX DATA BELOW=============================== Ljava/lang/Error;: Unrecognised system call: 42 at java.lang.Throwable.fillInStackTrace(Throwable.java:103) at java.lang.Throwable.<init>(Throwable.java:53) at java.lang.Throwable.<init>(Throwable.java:57) at java.lang.Error.<init>(Error.java:81) at org.binarytranslator.PPC_Emulator.PPC_ProcessSpace.doSysCall(PPC_ProcessSpace.java:2137) at com.ibm.JikesRVM.DummyDynamicCodeRunner.invokeCode_PC_0x1001b6c0(DynamicCodeRunner.java:0) at org.binarytranslator.PPC_Emulator.Main.run(Main.java:161) at org.binarytranslator.PPC_Emulator.Main.main(Main.java:124) at com.ibm.JikesRVM.MainThread.run(MainThread.java:102) JikesRVM: exit 113
The pipe system call still needs work :-) QEMU present benchmark results for nbench here.
Documentation:
View the JavaDoc for the PearColator project here.
View Richard Matley's MSc thesis about PearColator here.
Download:
You've read everything, agreed to the license and are prepared to try out PearColator? Then visit SourceForge for the latest version.