Re: [rvm-research] AddressArray with CAS

Nachshon Cohen O <[email protected]>
Newsgroups gmane.comp.java.jikes.rvm.devel
Message-ID <[email protected]>
Thanks,
The solution works for me.

Nachshon Cohen
Technion Institute of Technology, Israel

On Jun 9, 2013, at 5:53 PM, Michael Bond <[email protected]> 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 <[email protected]> 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
>> [email protected]
>> 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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev

_______________________________________________
Jikesrvm-researchers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.