Re: [rvm-research] AddressArray with CAS

Michael Bond <[email protected]>
Newsgroups gmane.comp.java.jikes.rvm.devel
Message-ID <[email protected]>
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);
> @Inlineboolean casPtr(finalint 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] 
> <mailto:[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
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.