From: Nachshon C. O <nac...@gm...> - 2013-06-10 18:35:32
|
Thanks, The solution works for me. Nachshon Cohen Technion Institute of Technology, Israel On Jun 9, 2013, at 5:53 PM, Michael Bond <mik...@cs...> wrote: > Hi Nachshon, > > I'm not sure what the exact issue is here but this kind of thing can happen with magic/unboxed types. An alternative approach: > > ObjectReference.fromObject(wordArray).toAddress().attempt(oldValue, newValue, offset); > > Instead of using Magic.attemptWord(), which requires an Object, it uses Address.attempt(). It should lead to the same optimized IA-32 code. > > Cheers, > Mike > > On 06/09/2013 10:20 AM, Nachshon Cohen O wrote: >> Hi, >> >> I'm trying to use CAS on a WordArray entry. The problem is that Magic.attemptWord expects an Object. >> I was suggested to send the WordArray instance as an object, and it works great for the baseline compiler. >> However, for the opt compiler I get the error listed below (which closely relates to http://jira.codehaus.org/browse/RVM-175). >> It seems that the opt compiler fails casting WordArray instance to an Object instance. >> Attaching minimal code that create the failure, and the failure trace. >> >> Thanks for any help, >> Nachshon Cohen >> Technion Institute of Technology, Israel, >> >> Minimal failing code: >> protected WordArray localBfrs = WordArray.create(numThreads); >> @Inline boolean casPtr(final int id, final Word ptr, final Word word){ >> return CompareAndSwapWord(localBfrs, ofst(id), ptr, word); >> } >> boolean CompareAndSwapWord(final Object obj, final Offset ofst, final Word oldVal, final Word newVal){ >> return false; //Magic.attemptsWord(obj, ofst, oldVal, newVal); Commented for minimal failed code. >> } >> >> ****** bin/buildit failure: >> >> >> build-bootimage: >> [echo] Building bootimage. Output redirected to : /Users/nachshonc/Documents/Programs/jikesrvm-3.1.3/target/FTGCopt_x86_64-osx/BootImageWriterOutput.txt >> [echo] MMTk properties = /Users/nachshonc/Documents/Programs/jikesrvm-3.1.3/build/mmtk/default.properties >> [java] BootImageWriter: compiler arg: O2 >> [java] Java Result: 101 >> [echo] BootImageCompiler: init (opt compiler) >> [echo] Compiler failure during compilation of < BootstrapCL, Lorg/mmtk/utility/WFMS/WFQueue; >.casPtr (ILorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Word;)Z >> [echo] java.lang.Error: Illegal upcast creating call to < BootstrapCL, Lorg/mmtk/utility/WFMS/WFQueue;, CompareAndSwapWord, (Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Word;)Z > from < BootstrapCL, Lorg/mmtk/utility/WFMS/WFQueue; >.casPtr (ILorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Word;)Z argument 0 >> [echo] at org.jikesrvm.compilers.opt.bc2ir.BC2IR._callHelper(BC2IR.java:2822) >> [echo] at org.jikesrvm.compilers.opt.bc2ir.BC2IR.generateFrom(BC2IR.java:1852) >> [echo] at org.jikesrvm.compilers.opt.bc2ir.BC2IR.generateHIR(BC2IR.java:371) >> [echo] at org.jikesrvm.compilers.opt.bc2ir.BC2IR.generateHIR(BC2IR.java:169) >> [echo] at org.jikesrvm.compilers.opt.bc2ir.ConvertBCtoHIR.perform(ConvertBCtoHIR.java:38) >> [echo] at org.jikesrvm.compilers.opt.driver.CompilerPhase.performPhase(CompilerPhase.java:205) >> [echo] at org.jikesrvm.compilers.opt.driver.OptimizationPlanAtomicElement.perform(OptimizationPlanAtomicElement.java:78) >> [echo] at org.jikesrvm.compilers.opt.driver.OptimizationPlanCompositeElement.perform(OptimizationPlanCompositeElement.java:129) >> [echo] at org.jikesrvm.compilers.opt.driver.CompilationPlan.execute(CompilationPlan.java:128) >> [echo] at org.jikesrvm.compilers.opt.driver.OptimizingCompiler.compile(OptimizingCompiler.java:170) >> [echo] at org.jikesrvm.compilers.opt.driver.OptimizingBootImageCompiler.compileMethod(OptimizingBootImageCompiler.java:113) >> [echo] at org.jikesrvm.compilers.common.BootImageCompiler.compile(BootImageCompiler.java:75) >> [echo] at org.jikesrvm.compilers.common.BootImageCompiler.compile(BootImageCompiler.java:80) >> [echo] at org.jikesrvm.classloader.NormalMethod.genCode(NormalMethod.java:178) >> [echo] at org.jikesrvm.classloader.RVMMethod.compile(RVMMethod.java:728) >> [echo] at org.jikesrvm.classloader.RVMMethod.getCurrentEntryCodeArray(RVMMethod.java:713) >> [echo] at org.jikesrvm.classloader.RVMClass.instantiate(RVMClass.java:1436) >> [echo] at org.jikesrvm.tools.bootImageWriter.BootImageWorker.run(BootImageWorker.java:45) >> [echo] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) >> [echo] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) >> [echo] at java.lang.Thread.run(Thread.java:680) >> [echo] Caused by: org.jikesrvm.compilers.opt.OptimizingCompilerException$IllegalUpcast: Illegal upcast from < BootstrapCL, Lorg/vmmagic/unboxed/WordArray; > to java.lang.Object >> [echo] at org.jikesrvm.compilers.opt.bc2ir.BC2IR.pop(BC2IR.java:3391) >> [echo] at org.jikesrvm.compilers.opt.bc2ir.BC2IR._callHelper(BC2IR.java:2820) >> [echo] ... 20 more >> [echo] Error compiling method: < BootstrapCL, Lorg/mmtk/utility/WFMS/WFQueue; >.casPtr (ILorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Word;)Z >> [echo] org.jikesrvm.compilers.opt.OptimizingCompilerException: ERROR produced in module:Compiler >> [echo] failure during compilation of < BootstrapCL, Lorg/mmtk/utility/WFMS/WFQueue; >.casPtr (ILorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Word;)Z >> [echo] >> [echo] at org.jikesrvm.compilers.opt.driver.OptimizingCompiler.fail(OptimizingCompiler.java:265) >> [echo] at org.jikesrvm.compilers.opt.driver.OptimizingCompiler.compile(OptimizingCompiler.java:184) >> [echo] at org.jikesrvm.compilers.opt.driver.OptimizingBootImageCompiler.compileMethod(OptimizingBootImageCompiler.java:113) >> [echo] at org.jikesrvm.compilers.common.BootImageCompiler.compile(BootImageCompiler.java:75) >> [echo] at org.jikesrvm.compilers.common.BootImageCompiler.compile(BootImageCompiler.java:80) >> [echo] at org.jikesrvm.classloader.NormalMethod.genCode(NormalMethod.java:178) >> [echo] at org.jikesrvm.classloader.RVMMethod.compile(RVMMethod.java:728) >> [echo] at org.jikesrvm.classloader.RVMMethod.getCurrentEntryCodeArray(RVMMethod.java:713) >> [echo] at org.jikesrvm.classloader.RVMClass.instantiate(RVMClass.java:1436) >> [echo] at org.jikesrvm.tools.bootImageWriter.BootImageWorker.run(BootImageWorker.java:45) >> [echo] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) >> [echo] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) >> [echo] at java.lang.Thread.run(Thread.java:680) >> >> BUILD FAILED >> /Users/nachshonc/Documents/Programs/jikesrvm-3.1.3/build.xml:1619: The following error occurred while executing this line: >> /Users/nachshonc/Documents/Programs/jikesrvm-3.1.3/build.xml:1628: Failed to write bootimage. >> >> Total time: 2 minutes 59 seconds >> Sun Jun 9 17:13:20 IDT 2013 >> ===================== Summary ===================== >> Local : /Users/nachshonc/Documents/Programs/jikesrvm-3.1.3 >> Build : admins-MacBook-Pro-2.local:/Users/nachshonc/Documents/Programs/jikesrvm-3.1.3 >> Target : admins-MacBook-Pro-2.local:/Users/nachshonc/Documents/Programs/jikesrvm-3.1.3 >> Start : Sun Jun 9 17:10:17 IDT 2013 >> Config : FTGCopt [FAILED Sun Jun 9 17:13:20 IDT 2013] >> =================================================== >> >> >> On May 29, 2013, at 6:36 PM, Eliot Moss <mo...@cs...> wrote: >> >>> On 5/29/2013 11:01 AM, Nachshon Cohen O wrote: >>>> Hi >>>> >>>> I'm trying to use a wait free queue implementation in the Jikes RVM. >>>> The implementation holds an array of addresses, and I'd like to apply CAS (compareAndSet) to these addresses. >>>> For example: >>>> AddressArray arr = AddressArray.create(10); >>>> arr[ 3 ].compareAndSet(oldValue, newValue); >>>> >>>> It seems that unboxed.AddressArray does not have an option of CAS. >>>> A normal CAS is implemented only for objects: i.e. Magic.attemptAddress(object, offset, oldValue, newValue); >>>> However, I don't know how to convert the AddressArray to an object. >>>> >>>> Is there a way to use CAS on a specific array element? >>> >>> An AddressArray is a perfectly good object. The offset of element >>> 0 is 0 (by design, so that we do not need to add an extra constant >>> value in for every array access). You need to know the size of an >>> Address, but I think there are operations for converting an array >>> index into an offset, etc. You also need to be careful not to >>> access outside the bounds of the actual array, of course. >>> >>> Regards -- Eliot Moss >> >> >> >> ------------------------------------------------------------------------------ >> How ServiceNow helps IT people transform IT departments: >> 1. A cloud service to automate IT design, transition and operations >> 2. Dashboards that offer high-level views of enterprise services >> 3. A single system of record for all IT processes >> http://p.sf.net/sfu/servicenow-d2d-j >> >> >> _______________________________________________ >> Jikesrvm-researchers mailing list >> Jik...@li... >> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers > > ------------------------------------------------------------------------------ > How ServiceNow helps IT people transform IT departments: > 1. A cloud service to automate IT design, transition and operations > 2. Dashboards that offer high-level views of enterprise services > 3. A single system of record for all IT processes > http://p.sf.net/sfu/servicenow-d2d-j_______________________________________________ > Jikesrvm-researchers mailing list > Jik...@li... > https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers |