From: Yuqiang X. <xi...@ue...> - 2005-01-25 04:33:04
|
To the 3rd question: What's the behavior of "MyBigFatTest"? Does it run correctly on un-modified vm? And what's the behavior of "my_functionEntryMethod"? Thanks. In your mail: >From: Ioana Burcea <io...@ee...> >Reply-To: jik...@os... >To: jik...@os... >Subject: [Jikesrvm-researchers] inserting MIR_Call instructions >Date:Mon, 24 Jan 2005 15:59:24 -0500 (EST) > >Hi, > I've started to work with jikes only recently, so bear with me. > > I'm trying to get some profile information about basic block execution. > From this, several questions raised. > > 1. Does the register allocation pass ever change the control flow of a > method? > 2. If not, why are the peephole branch optimizations applied after > register allocation? Is there a good reason for that? > 3. I'm trying to insert a static method call at the beginning of the main > function. It seems that the static method executes fine, but then I get an > error in the vm... here it is the output: (The first line of the output is > the output of the method that I'm inserting the call for). > > I'm executing my_functionEntryMethod > vm internal error at: > -- Stack -- > Lcom/ibm/JikesRVM/VM; > _assertionFailure(Ljava/lang/String;Ljava/lang/String;)V at line 553 > Lcom/ibm/JikesRVM/VM; _assert(ZLjava/lang/String;Ljava/lang/String;)V > at line 534 > Lcom/ibm/JikesRVM/VM; _assert(Z)V at line 514 > Lorg/mmtk/vm/Assert; _assert(Z)V at line 63 > Lorg/mmtk/utility/alloc/Allocator; > alignAllocation(Lorg/vmmagic/unboxed/Address;III)Lorg/vmmagic/unboxed/Address; > at line 80 > Lorg/mmtk/utility/alloc/Allocator; > alignAllocation(Lorg/vmmagic/unboxed/Address;II)Lorg/vmmagic/unboxed/Address; > at line 110 > Lorg/mmtk/utility/alloc/BumpPointer; > alloc(III)Lorg/vmmagic/unboxed/Address; at line 107 > Lorg/mmtk/plan/Generational; alloc(IIII)Lorg/vmmagic/unboxed/Address; > at line 180 > Lcom/ibm/JikesRVM/memoryManagers/mmInterface/MM_Interface; > allocateSpace(Lorg/mmtk/vm/Plan;IIIZILorg/vmmagic/unboxed/ObjectReference;)Lorg/vm magic/unboxed/Address; > at line 717 > Lcom/ibm/JikesRVM/memoryManagers/mmInterface/MM_Interface; > allocateSpace(Lorg/mmtk/vm/Plan;IIII)Lorg/vmmagic/unboxed/Address; at line > 669 > Lcom/ibm/JikesRVM/memoryManagers/mmInterface/MM_Interface; > allocateScalar(I[Ljava/lang/Object;III)Ljava/lang/Object; at line 613 > Lcom/ibm/JikesRVM/VM_Runtime; > resolvedNewScalar(I[Ljava/lang/Object;ZIII)Ljava/lang/Object; at line 342 > LMyBigFatTest; main([Ljava/lang/String;)V at line 32 > Lcom/ibm/JikesRVM/MainThread; run()V at line 119 > Lcom/ibm/JikesRVM/VM_Thread; run()V at line 196 > Lcom/ibm/JikesRVM/VM_Thread; startoff()V at line 742 > > > Any help is more than appreciated, > Ioana > > _______________________________________________ > Jikesrvm-researchers mailing list > Jik...@os... > http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jikesrvm-researchers > > > > Powered by UESTC SMG > SPAM, virus-free and secure email > https://smg.uestc.edu.cn > > Powered by UESTC SMG SPAM, virus-free and secure email https://smg.uestc.edu.cn |
From: Yuqiang X. <xi...@ue...> - 2005-01-25 05:03:37
|
Then where do you insert your static method that prints something, in your application or in the RVM? If latter, then at which point do you insert the method? Besides, would you like to attach the "MyBigFatTest" program as well? Thanks. In your mail: >From: Ioana Burcea <io...@ee...> >Reply-To: jik...@os... >To: jik...@os... >Subject: Re:[Jikesrvm-researchers] inserting MIR_Call instructions >Date:Mon, 24 Jan 2005 20:56:24 -0500 (EST) > >The "new" that I was refering to is in my small test application. It's not > in Jikes. > > I understand the idea of executing more advanced things before the VM is > fully booted, but this is not the case with my new here, right? > > Thank you, > Ioana > Powered by UESTC SMG SPAM, virus-free and secure email https://smg.uestc.edu.cn |
From: Ioana B. <io...@ee...> - 2005-01-25 05:13:19
|
This is the perform method of my phase that inserts the static method call in the application (not RVM) - somewhere in main function, it's not that important where (I just want _something_ to work). The insertion of the call instruction is based on the couple of examples that I found in RVM that use MIR_Call.create0. ======================================= public void perform (OPT_IR ir){ String methodName = ir.getMethod().getName().toString(); if (methodName.equals("main")){ // VM.sysWriteln("Ioana " + getName()); // OPT_Instruction lastInstr = ir.cfg.firstInCodeOrder().lastRealInstruction(); OPT_Instruction lastInstr = ir.cfg.entry().lastRealInstruction(); VM_Method meth = VM_Entrypoints.myFunctionEntryMethod; int offset = meth.getOffset(); OPT_RegisterOperand regOp = ir.regpool.makeTempInt(); OPT_Operand jtoc = OPT_MemoryOperand.BD(OPT_IRTools.I(ir.regpool.getPhysicalRegisterSet().getPR()), VM_Entrypoints.jtocField.getOffset(), (byte)4, null, OPT_IRTools.TG()); lastInstr.insertBefore(MIR_Move.create(IA32_MOV, regOp, jtoc)); OPT_Operand target = OPT_MemoryOperand.BD(regOp.copyD2U(), offset, (byte)4, new OPT_LocationOperand(offset), OPT_IRTools.TG()); OPT_Instruction callInstr = MIR_Call.create0(CALL_SAVE_VOLATILE, null, null, target, OPT_MethodOperand.STATIC(meth)); lastInstr.insertBefore(callInstr); } ======================================================== The main of my MyBigFatTest: ======================================================== public static void main(String a[]) throws Exception { System.out.println("This is MAIN"); int x = 3; float y = 5.0f; /* Integer i = new Integer(3); System.out.println(i);*/ System.out.println("this is also great!"); if (x >= 3) System.out.println("this is great!"); } ========================================================== With the comment above, everything works just fine. If I take out the comment, it crashes when it tries to allocate the Integer. Thank you, Ioana On Tue, 25 Jan 2005, Yuqiang Xian wrote: > > Then where do you insert your static method that prints something, > in your application or in the RVM? If latter, then at which point > do you insert the method? > > Besides, would you like to attach the "MyBigFatTest" program as well? > > Thanks. > > In your mail: > >From: Ioana Burcea <io...@ee...> > >Reply-To: jik...@os... > >To: jik...@os... > >Subject: Re:[Jikesrvm-researchers] inserting MIR_Call instructions > >Date:Mon, 24 Jan 2005 20:56:24 -0500 (EST) > > > >The "new" that I was refering to is in my small test application. It's not > > in Jikes. > > > > I understand the idea of executing more advanced things before the VM is > > fully booted, but this is not the case with my new here, right? > > > > Thank you, > > Ioana > > > > > > > > > Powered by UESTC SMG > SPAM, virus-free and secure email > https://smg.uestc.edu.cn > > _______________________________________________ > Jikesrvm-researchers mailing list > Jik...@os... > http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jikesrvm-researchers > |
From: Ioana B. <io...@ee...> - 2005-01-25 04:41:52
|
On Tue, 25 Jan 2005, Yuqiang Xian wrote: > > To the 3rd question: > What's the behavior of "MyBigFatTest"? Does it run correctly > on un-modified vm? And what's the behavior of "my_functionEntryMethod"? > my_functionEntryMethod is a static method: public static void my_functionEntryMethod(){ VM.sysWriteln("I'm executing my_functionEntryMethod"); } MyBigFatTest is my test class. After playing with it, I figured out that everything goes fine as long as I don't use the "new" operator to allocate a class. As soon as I allocate an object, it crashes with the vm error below. Thanks for your help, Ioana > > In your mail: > >From: Ioana Burcea <io...@ee...> > >Reply-To: jik...@os... > >To: jik...@os... > >Subject: [Jikesrvm-researchers] inserting MIR_Call instructions > >Date:Mon, 24 Jan 2005 15:59:24 -0500 (EST) > > > >Hi, > > I've started to work with jikes only recently, so bear with me. > > > > I'm trying to get some profile information about basic block execution. > > From this, several questions raised. > > > > 1. Does the register allocation pass ever change the control flow of a > > method? > > 2. If not, why are the peephole branch optimizations applied after > > register allocation? Is there a good reason for that? > > 3. I'm trying to insert a static method call at the beginning of the main > > function. It seems that the static method executes fine, but then I get an > > error in the vm... here it is the output: (The first line of the output is > > the output of the method that I'm inserting the call for). > > > > I'm executing my_functionEntryMethod > > vm internal error at: > > -- Stack -- > > Lcom/ibm/JikesRVM/VM; > > _assertionFailure(Ljava/lang/String;Ljava/lang/String;)V at line 553 > > Lcom/ibm/JikesRVM/VM; _assert(ZLjava/lang/String;Ljava/lang/String;)V > > at line 534 > > Lcom/ibm/JikesRVM/VM; _assert(Z)V at line 514 > > Lorg/mmtk/vm/Assert; _assert(Z)V at line 63 > > Lorg/mmtk/utility/alloc/Allocator; > > alignAllocation(Lorg/vmmagic/unboxed/Address;III)Lorg/vmmagic/unboxed/Address; > > at line 80 > > Lorg/mmtk/utility/alloc/Allocator; > > alignAllocation(Lorg/vmmagic/unboxed/Address;II)Lorg/vmmagic/unboxed/Address; > > at line 110 > > Lorg/mmtk/utility/alloc/BumpPointer; > > alloc(III)Lorg/vmmagic/unboxed/Address; at line 107 > > Lorg/mmtk/plan/Generational; alloc(IIII)Lorg/vmmagic/unboxed/Address; > > at line 180 > > Lcom/ibm/JikesRVM/memoryManagers/mmInterface/MM_Interface; > > > allocateSpace(Lorg/mmtk/vm/Plan;IIIZILorg/vmmagic/unboxed/ObjectReference;)Lorg/vm > magic/unboxed/Address; > > at line 717 > > Lcom/ibm/JikesRVM/memoryManagers/mmInterface/MM_Interface; > > allocateSpace(Lorg/mmtk/vm/Plan;IIII)Lorg/vmmagic/unboxed/Address; at line > > 669 > > Lcom/ibm/JikesRVM/memoryManagers/mmInterface/MM_Interface; > > allocateScalar(I[Ljava/lang/Object;III)Ljava/lang/Object; at line 613 > > Lcom/ibm/JikesRVM/VM_Runtime; > > resolvedNewScalar(I[Ljava/lang/Object;ZIII)Ljava/lang/Object; at line 342 > > LMyBigFatTest; main([Ljava/lang/String;)V at line 32 > > Lcom/ibm/JikesRVM/MainThread; run()V at line 119 > > Lcom/ibm/JikesRVM/VM_Thread; run()V at line 196 > > Lcom/ibm/JikesRVM/VM_Thread; startoff()V at line 742 > > > > > > Any help is more than appreciated, > > Ioana > > > > _______________________________________________ > > Jikesrvm-researchers mailing list > > Jik...@os... > > http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jikesrvm-researchers > > > > > > > > Powered by UESTC SMG > > SPAM, virus-free and secure email > > https://smg.uestc.edu.cn > > > > > > > > > > Powered by UESTC SMG > SPAM, virus-free and secure email > https://smg.uestc.edu.cn > > _______________________________________________ > Jikesrvm-researchers mailing list > Jik...@os... > http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jikesrvm-researchers > |
From: Ioana B. <io...@ee...> - 2005-01-25 04:45:36
|
Hi, I have another basic question. I'm modifying classes that go into the boot image. I need the optimizing compiler, so I'm using a 'development' configuration. Everytime I modify something, I need to execute jbuild again. On my machine, jbuild takes around 20 mins. Is there ANY way of doing things differently such that the building takes less time? Thank you, Ioana |
From: David P G. <gr...@us...> - 2005-01-25 16:03:37
|
use a "prototype-opt" configuration for faster edit/compile/debug. Performance will be bad but turnaround time is much better. --dave > I'm modifying classes that go into the boot image. I need the optimizing > compiler, so I'm using a 'development' configuration. Everytime I modify > something, I need to execute jbuild again. On my machine, jbuild takes > around 20 mins. |
From: Steven A. <au...@wa...> - 2005-01-25 17:08:19
|
David P Grove wrote: > > use a "prototype-opt" configuration for faster edit/compile/debug. > Performance will be bad but turnaround time is much better. > > I'm modifying classes that go into the boot image. I need the optimizing > > compiler, so I'm using a 'development' configuration. Everytime I modify > > something, I need to execute jbuild again. On my machine, jbuild takes > > around 20 mins. Ioana, If you use prototype-opt, the various classes that go into the boot image (java.lang.Class, com.ibm.JikesRVM.*, and so on) will all be initially compiled at the baseline level. Once you boot Jikes RVM, the adaptive optimiziation system (AOS) kicks in, unless you disable it. The AOS will affect not only your application, but also bits and pieces of Jikes RVM itself. So, once it decides that something like VM_CompiledMethods.createCompiledMethods is a "hot method", that gets recompiled too. If you are just interested in experimenting with the optimizing compiler, you may want to disable AOS and insist that your application's methods be initially compiled with the opt compiler, to cut down on the amount of opt compiler activity that isn't immediately relevant to your goals. Just a thought (I am not a compiler guru), --Steve Augart |
From: Ioana B. <io...@ee...> - 2005-01-25 18:47:44
|
Thank you all for your help. I'm using the base compiler to create the boot image and the opt one for running my application. At this moment in time, I'm just experimenting with the opt compiler, so the performance is not important to me. Ioana On Tue, 25 Jan 2005, Steven Augart wrote: > David P Grove wrote: > > > > use a "prototype-opt" configuration for faster edit/compile/debug. > > Performance will be bad but turnaround time is much better. > > > > I'm modifying classes that go into the boot image. I need the optimizing > > > compiler, so I'm using a 'development' configuration. Everytime I modify > > > something, I need to execute jbuild again. On my machine, jbuild takes > > > around 20 mins. > Ioana, > > If you use prototype-opt, the various classes that > go into the boot image (java.lang.Class, com.ibm.JikesRVM.*, and so on) > will all be initially compiled at the baseline level. Once you boot > Jikes RVM, the adaptive optimiziation system (AOS) kicks in, unless > you disable it. The AOS will affect not only your application, but > also bits and pieces of Jikes RVM itself. So, once it decides > that something like VM_CompiledMethods.createCompiledMethods is > a "hot method", that gets recompiled too. > > If you are just interested in experimenting with the optimizing compiler, > you may want to disable AOS and insist that your application's methods > be initially compiled with the opt compiler, to cut down on the amount > of opt compiler activity that isn't immediately relevant to your goals. > > Just a thought (I am not a compiler guru), > > --Steve Augart > _______________________________________________ > Jikesrvm-researchers mailing list > Jik...@os... > http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jikesrvm-researchers > |
From: Eliot M. <mo...@cs...> - 2005-01-25 04:57:55
|
>>>>> "Ioana" == Ioana Burcea <io...@ee...> writes: Ioana> I have another basic question. Ioana> I'm modifying classes that go into the boot image. I need the Ioana> optimizing compiler, so I'm using a 'development' Ioana> configuration. Everytime I modify something, I need to execute Ioana> jbuild again. On my machine, jbuild takes around 20 mins. Ioana> Is there ANY way of doing things differently such that the Ioana> building takes less time? You can build the Opt compiler with the baseline compiler. It won't run as fast at run time, but it will probably run plenty fast enough (average speedup from Opt compiling is something like 2x to 3x, if memory serves). Base builds that include the Opt compiler take around a couple of minutes on a typical recent x86 box, IIRC. -- Eliot |
From: Eliot M. <mo...@cs...> - 2005-01-25 04:52:40
|
Ioana -- Conceivably you are trying to allocate objects before the system is fully initialized. I'm not sure, but it's possible. You should not put in any "new" that will execute before the GC subsystem is fully initialized. This is one of the hazards of a system written in Java: things you add need to be carefully NOT applied to everything in the system. Maybe I'm off-base, but it's what occurred to me .... Eliot ============================================================================== J. Eliot B. Moss, Associate Professor http://www.cs.umass.edu/~moss www Director, Arch. and Lang. Impl. Lab. +1-413-545-4206 voice Department of Computer Science +1-413-695-4226 cell 140 Governor's Drive, Room 372 +1-413-545-1249 fax University of Massachusetts at Amherst mo...@cs... email Amherst, MA 01003-9264 USA +1-413-545-3733 Priscilla Coe sec'y ============================================================================== |
From: Ioana B. <io...@ee...> - 2005-01-25 04:56:31
|
The "new" that I was refering to is in my small test application. It's not in Jikes. I understand the idea of executing more advanced things before the VM is fully booted, but this is not the case with my new here, right? Thank you, Ioana On Mon, 24 Jan 2005, Eliot Moss wrote: > Ioana -- Conceivably you are trying to allocate objects before the system > is fully initialized. I'm not sure, but it's possible. You should not put > in any "new" that will execute before the GC subsystem is fully > initialized. This is one of the hazards of a system written in Java: things > you add need to be carefully NOT applied to everything in the system. > > Maybe I'm off-base, but it's what occurred to me .... Eliot > ============================================================================== > J. Eliot B. Moss, Associate Professor http://www.cs.umass.edu/~moss www > Director, Arch. and Lang. Impl. Lab. +1-413-545-4206 voice > Department of Computer Science +1-413-695-4226 cell > 140 Governor's Drive, Room 372 +1-413-545-1249 fax > University of Massachusetts at Amherst mo...@cs... email > Amherst, MA 01003-9264 USA +1-413-545-3733 Priscilla Coe sec'y > ============================================================================== > _______________________________________________ > Jikesrvm-researchers mailing list > Jik...@os... > http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jikesrvm-researchers > |
From: Eliot M. <mo...@cs...> - 2005-01-25 05:01:15
|
>>>>> "Ioana" == Ioana Burcea <io...@ee...> writes: Ioana> The "new" that I was refering to is in my small test application. It's not Ioana> in Jikes. Ioana> I understand the idea of executing more advanced things before the VM is Ioana> fully booted, but this is not the case with my new here, right? Ok -- I thought you were instrumenting some system classes, which would then call your routine (early in the boot up process), which would then fail because the system was not booted up enough. If that's not it, then you're breaking something else, but I'm not sure what. -- Eliot |