R and Partial Evaluation with Graal

Jeremie Miserez jeremie.miserez at oracle.com
Mon May 16 10:53:46 UTC 2016


Hi,,

The command-line I've been using is:

mx --dynamicimport=graal-core --jdk jvmci r

or rscript:

mx --dynamicimport=graal-core --jdk jvmci rscript <path-to-script>

If you add the -v flag you should see something
"jvmci/jdk1.8.0_91/product/bin/java -server -d64" on the first line
rather than "/usr/lib/jvm/java-8-oracle/bin/java -d64"

To actually check if functions are being compiled, add the
TraceTruffleCompilation option:

mx --dynamicimport=graal-core --jdk jvmci --J
"@-Dgraal.TraceTruffleCompilation=true" r

You should see something like this after running a function a few times:

[truffle] opt done         <promise>
<opt>                                             |ASTSize      33/   33
|Time  3335(2290+1045)ms |DirectCallNodes I    0/D    0 |GraalNodes  
536/  630 |CodeSize         2156 |Source            n/a

Regards,
Jeremie



------------------------------------------------------------------------

*From:* jaroslav.tulach at oracle.com
*Sent:* Monday, May 16, 2016 11:26AM
*To:* juan.fumero at ed.ac.uk
*Cc:* graal-dev at openjdk.java.net
*Subject:* Re: R and Partial Evaluation with Graal

> ### Monday 16 of May 2016, 09:57:16 @ Juan Fumero ###
>> Hi Jaroslav,
>>    Thanks a lot for the suggestion.  
>>    
>> I get the same error unless I use the suggested flag in the VM. I
>> understand this is the same that setting the JAVA_HOME to GraalVM. 
> But if you use the flag to suppress the error, what instance of 
> Truffle.getRuntime() do you get? The default one? That one is slow...
>
> I don't know what to advice. Looking at the history
> https://github.com/graalvm/truffle/commits/master/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java
>
> I don't see that many changes. I don't think the JDK9 related changes could 
> cause much harm.
> -jt
>
>> On Mon, 2016-05-16 at 09:06 +0200, Jaroslav Tulach wrote:
>>> Hello Juan,
>>> I think you can choose your JDK with:
>>>
>>> fastr$ mx --java-home /path/to/graalvm R
>>>
>>> -jt
>>>
>>>
>>> ### Sunday 15 of May 2016, 13:04:29 @ Juan Fumero ###
>>>
>>>> Hi all, 
>>>>   I am using the R version [1] in github. I saw there is no
>>>> dependency
>>>> now with Graal-core. Just Truffle instead. My question is how to
>>>> use
>>>> now the Graal JVMCI compiler. 
>>>>
>>>> I compile with the graal-core [2] compiler separately. But when I
>>>> execute R I get this error:
>>>>
>>>> <error>
>>>> $ mx R 
>>>> ..... 
>>>> Exception in thread "main" java.lang.InternalError
>>>>
>>>> 	at com.oracle.truffle.api.Truffle$1.run(Truffle.java:103)
>>>> 	at com.oracle.truffle.api.Truffle$1.run(Truffle.java:58)
>>>> 	at java.security.AccessController.doPrivileged(Native Method)
>>>> 	at com.oracle.truffle.api.Truffle.initRuntime(Truffle.java:58)
>>>> 	at com.oracle.truffle.api.Truffle.<clinit>(Truffle.java:46)
>>>> 	at
>>>>
>>>> com.oracle.truffle.api.impl.Accessor.<clinit>(Accessor.java:321)
>>>>
>>>> 	at
>>>>
>>>> com.oracle.truffle.api.vm.PolyglotEngine.<clinit>(PolyglotEngine.ja
>>>> va:1
>>>> 07)
>>>>
>>>> 	at
>>>>
>>>> com.oracle.truffle.r.engine.shell.RCommand.readEvalPrint(RCommand.j
>>>> ava:
>>>> 191)
>>>>
>>>> 	at
>>>>
>>>> com.oracle.truffle.r.engine.shell.RCommand.main(RCommand.java:85)
>>>> Caused by: java.lang.reflect.InvocationTargetException
>>>>
>>>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> 	at
>>>>
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImp
>>>> l.ja
>>>> va:62)
>>>>
>>>> 	at
>>>>
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcc
>>>> esso
>>>> rImpl.java:43)
>>>>
>>>> 	at java.lang.reflect.Method.invoke(Method.java:498)
>>>> 	at com.oracle.truffle.api.Truffle$1.run(Truffle.java:100)
>>>> 	... 8 more
>>>>
>>>> Caused by: java.lang.NoClassDefFoundError:
>>>> com/oracle/truffle/api/TruffleRuntimeAccess  (suppress with
>>>> -Djvmci.service.suppressNoClassDefFoundError=true)
>>>>
>>>> 	at jdk.vm.ci.services.Services$1.computeValue(Services.java:59)
>>>> 	
>>>> 	at jdk.vm.ci.services.Services$1.computeValue(Services.java:50)
>>>> 	
>>>> 	at java.lang.ClassValue.getFromHashMap(ClassValue.java:227)
>>>> 	at java.lang.ClassValue.getFromBackup(ClassValue.java:209)
>>>> 	at java.lang.ClassValue.get(ClassValue.java:115)
>>>> 	at jdk.vm.ci.services.Services.loadSingle(Services.java:120)
>>>> 	... 13 more
>>>>
>>>> Caused by: java.lang.ClassNotFoundException:
>>>> com.oracle.truffle.api.TruffleRuntimeAccess
>>>>
>>>> 	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
>>>> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>>>> 	at
>>>>
>>>> java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:814)
>>>>
>>>> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>>>> 	at java.lang.ClassLoader.defineClass1(Native Method)
>>>> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
>>>> 	at
>>>>
>>>> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
>>>> 142)
>>>>
>>>> 	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
>>>> 	
>>>> 	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
>>>> 	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
>>>> 	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
>>>> 	at java.security.AccessController.doPrivileged(Native Method)
>>>> 	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
>>>> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>>>> 	at
>>>>
>>>> java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:814)
>>>>
>>>> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>>>> 	at jdk.vm.ci.services.Services.getServiceImpls(Native Method)
>>>> 	at jdk.vm.ci.services.Services.access$000(Services.java:37)
>>>> 	at jdk.vm.ci.services.Services$1.computeValue(Services.java:54)
>>>> 	
>>>> 	... 18 more\
>>>>
>>>> </error>
>>>>
>>>> So I run with the option suggested in the error:
>>>>
>>>> $ mx -v R --J @'-Djvmci.service.suppressNoClassDefFoundError=true '
>>>> myScript.R 
>>>>
>>>> I can run FastR but,  is this the use of  the Partial Evaluator in
>>>> Graal through the OptimizedCallTarget? 
>>>>
>>>> [1] https://github.com/graalvm/fastr 
>>>> [2] https://github.com/graalvm/graal-core/commit/071173a4a61247df08
>>>> 26a0
>>>> 1db20bf7b381f1bbfe 
>>>>
>>>> Thanks
>>>> -juan



More information about the graal-dev mailing list