Execution of a simple Lambda Method on GPU

Doug Simon doug.simon at oracle.com
Mon Jan 20 09:18:01 PST 2014


Tom,

You can now file bug reports for Graal via JBS: https://bugs.openjdk.java.net/browse/GRAAL

For smaller issues such as the one below, email is maybe still a better option.

-Doug

On Jan 20, 2014, at 5:45 PM, Deneau, Tom <tom.deneau at amd.com> wrote:

> Bharadwaj --
> 
> There is a bug in Method::is_lambda() in that it does not return false
> if methodPrefix == 0.  Actually I don't understand why the gcc
> compiler would not complain about this.
> 
> Also, I noticed the CompilationPolicy::must_be_compiled, is_lambda path
> is not hit in the debug build.  Is this by design?
> 
> -- Tom
> 
>> -----Original Message-----
>> From: sumatra-dev-bounces at openjdk.java.net [mailto:sumatra-dev-
>> bounces at openjdk.java.net] On Behalf Of S. Bharadwaj Yadavalli
>> Sent: Friday, January 17, 2014 4:26 PM
>> To: sumatra-dev at openjdk.java.net; graal-dev at openjdk.java.net
>> Subject: Execution of a simple Lambda Method on GPU
>> 
>> 
>> A quick update on reaching the next milestone in executing Lambda
>> methods on GPUs as a step towards the goals of Project Sumatra.
>> 
>> The JVM in Graal repo, now has the the ability to recognize a simple
>> Lambda method defined in main class method, schedule compilation of such
>> a method to target PTX backend, offload execution of the generated PTX
>> code on a supported nVidia GPU hardware and get back the result to the
>> VM.
>> 
>> This was made possible owing to recent enhancements and code
>> reorganization made in Graal compiler to enhance support for GPU
>> backends.
>> 
>> The current implementation is in experimental stage. For example,
>> executing the Java class [1] results in [2]. Additional refinements to
>> choose candidate Java methods for offloading to GPU are planned. We look
>> forward to any open source community involvement that will help as move
>> faster towards the next milestones of Project Sumatra.
>> 
>> Regards,
>> 
>> Bharadwaj
>> 
>> [1]
>> interface BinaryOperation {
>>     int apply(int a, int b);
>> }
>> 
>> class FindSumL {
>>    public static void main(String args[]) {
>>        BinaryOperation add = (x, y) -> x + y;
>>        int result = add.apply(8, 12);
>>        System.out.println("Sum is " + result);
>>    }
>> }
>> 
>> [2]
>> $ ./mx.sh vmg -XX:+TraceGPUInteraction -XX:-BootstrapGraal -G:Threads=1
>> FindSumL
>> Found supported nVidia GPU device vendor : 0x10de device 0x06dd
>> gpu_linux::probe_gpu(): 1
>> [CUDA] Success: library linkage
>> CUDA driver initialization: Success
>> [CUDA] Number of compute-capable devices found: 2
>> [CUDA] Got the handle of first compute-device
>> [CUDA] Unified addressing support on device 0: 1
>> [CUDA] Using GeForce GTX 780
>> Compiling Lambda method FindSumL::lambda$main$0 to PTX
>> [CUDA] Success: Created context for device: 0
>> [CUDA] Success: Set current context for device: 0
>> [CUDA] PTX Kernel
>>     .version 3.0
>>     .target sm_30
>> .entry lambda$main$0 (
>>     .param .s32 param1,
>>     .param .s32 param2,
>>     .param .u64 param0
>> ) {
>>     .reg .s32 %r3;
>>     .reg .s32 %r4;
>>     .reg .s32 %r5;
>>     .reg .u64 %r6;
>> L0:
>>     ld.param.s32 %r3, [param1 + 0];
>>     ld.param.s32 %r4, [param2 + 0];
>>     add.s32 %r5, %r4, %r3;
>>     ld.param.u64 %r6, [param0 + 0];
>>     st.global.s32 [%r6 + 0], %r5;
>>     ret;
>> }
>> 
>> [CUDA] Function name : lambda$main$0
>> [CUDA] Loaded data for PTX Kernel
>> [CUDA] Got function handle for lambda$main$0 kernel address
>> 0x7fba686bfd80
>> [CUDA] Generated kernel
>> External method:FindSumL.lambda$main$0(II)I
>> installCode0: ExternalCompilationResult
>> [CUDA] launching kernel
>> [CUDA] Success: Kernel Launch: X: 1 Y: 1 Z: 1
>> [CUDA] Success: Synchronized launch kernel
>> [CUDA] Success: Freed device memory of return value
>> [CUDA] Success: Destroy context
>> Sum is 20
>> 
>> 
>> 
> 
> 



More information about the graal-dev mailing list