Memory allocation in HSAIL

Christian Thalinger christian.thalinger at oracle.com
Tue May 13 22:01:07 UTC 2014


Thanks.  I will push this.

On May 13, 2014, at 2:49 PM, Deneau, Tom <tom.deneau at amd.com> wrote:

> Christian, Doug --
>  
> Attached is the small patch to take care of this…
>  
> -- Tom
>  
> From: Christian Thalinger [mailto:christian.thalinger at oracle.com] 
> Sent: Tuesday, May 13, 2014 3:46 PM
> To: Deneau, Tom
> Cc: Doug Simon; graal-dev at openjdk.java.net
> Subject: Re: Memory allocation in HSAIL
>  
> Oh.  I missed the push of these:
>      @HotSpotVMConstant(name = "sizeof(HSAILFrame)") @Stable public int hsailFrameHeaderSize;
>      @HotSpotVMConstant(name = "sizeof(Hsail::HSAILKernelDeoptimization)") @Stable public int hsailKernelDeoptimizationHeaderSize;
> -    @HotSpotVMField(name = "Hsail::HSAILDeoptimizationInfo::_deopt_save_states[0]", type = "Hsail::HSAILKernelDeoptimization", get = HotSpotVMField.Type.OFFSET) @Stable public int hsailSaveStatesOffset0;
> +    @HotSpotVMConstant(name = "sizeof(Hsail::HSAILDeoptimizationInfo)") @Stable public int hsailDeoptimizationInfoHeaderSize;
>  
> sizeof types should be handled differently with HotSpotVMType like:
>  
>     @HotSpotVMType(name = "vtableEntry", get = HotSpotVMType.Type.SIZE) @Stable public int vtableEntrySize;
>  
> Tom, can you change that?
>  
> On May 9, 2014, at 1:38 PM, Deneau, Tom <tom.deneau at amd.com> wrote:
> 
> 
> Doug --
> 
> I found a bug introduced in the recent hsail-deopt-windows-build-fixes webrev (which won't show up in the junits, it requires the maximum # of concurrent workitems to actually deopt ).
> 
> http://cr.openjdk.java.net/~tdeneau/graal-webrevs/webrev-hsail-deopt-savearea-cleanup
> 
> In addition, I tried implementing a few more of your suggestions.
> 
>   * I didn't see a good way to get rid of the operator new for the outer HSAILDeoptimizationInfo.
>     I guess I could have hidden it behind a new_HSAILDeoptimizationInfo static routine.
>     (I noticed that new_nmethod eventually called operator new for nmethod)
> 
>   * I did remove the ResourceObj declaration for HSAILDeoptimizationInfo since as you said it didn't
>     make sense when we were allocating from the heap.
> 
>   * cleaned up some NPEs when UseHSAILDeoptimization was turned off.  Also marked some junit tests not
>     to run in that case.  We still get some failures if we run the junits with UseHSAILDeoptimization
>     off.  I understand these, they are based on the wide net we cast to decide if allocation is being
>     used for a particular graph.  See HSAILHotSpotBackend.java line 491. 
>     Couldn't think of a quick way to fix this but we should.
> 
>   * some other small cleanups
> 
>   * I didn't see how to use the CodeBlob::allocation_size() so I didn't stick that in.  I did make
>     the HSAILDeoptimizationInfo end in a pointer so that the end of the header/ start of the save
>     area was 8-byte aligned.
> 
> -- Tom
> 
> 
> 
> -----Original Message-----
> From: Doug Simon [mailto:doug.simon at oracle.com]
> Sent: Wednesday, May 07, 2014 6:27 AM
> To: Deneau, Tom
> Cc: Gilles Duboscq; Christian Wirth
> Subject: Re: Memory allocation in HSAIL
> 
> I'm pushing these changes now...
> 
> On May 7, 2014, at 12:22 AM, Deneau, Tom <tom.deneau at amd.com> wrote:
> 
> 
> OK --
> 
> http://cr.openjdk.java.net/~tdeneau/graal-webrevs/webrev-hsail-deopt-w
> indows-build-fixes/webrev/
> 
> is a small step in the direction below, mainly to solve the windows
> build issue.
> 
> It still passes the junits on linux.
> 
> I actually started going a little beyond the specific windows build
> issue but decided to postpone those fixes until later.
> 
> -- Tom
> 
> 
> 
> -----Original Message-----
> From: Doug Simon [mailto:doug.simon at oracle.com]
> Sent: Tuesday, May 06, 2014 12:56 AM
> To: Deneau, Tom
> Cc: Gilles Duboscq; Christian Wirth
> Subject: Re: Memory allocation in HSAIL
> 
> 
> On May 6, 2014, at 1:15 AM, Deneau, Tom <tom.deneau at amd.com> wrote:
> 
> 
> Doug --
> 
> I've been tied up in meetings today...
> Not sure what your timeframe is, but I can send you a solution that
> builds on windows.
> 
> That would be great.
> 
> 
> But it doesn't address some of the other issues below, including how
> the HSAILDeoptimizationInfo is allocated.
> 
> Ok - that is not urgent.
> 
> 
> I don't currently have a way to actually run the hsail backend on
> windows but I can test building there and running elsewhere.
> 
> That's fine. The main thing is to have the build work on Windows.
> 
> Thanks.
> 
> -Doug
> 
> 
> -----Original Message-----
> From: Doug Simon [mailto:doug.simon at oracle.com]
> Sent: Monday, May 05, 2014 3:52 PM
> To: Deneau, Tom
> Cc: Gilles Duboscq; Christian Wirth
> Subject: Re: Memory allocation in HSAIL
> 
> Something like the pattern in nmethod::new_nmethod should work.
> 
> -Doug
> 
> On May 5, 2014, at 10:42 PM, Deneau, Tom <tom.deneau at amd.com>
> wrote:
> 
> 
> 
> Doug --
> 
> Can you point me to an example of how you want the
> HSAILDeoptimizationInfo allocation to be structured?
> 
> In particular, for invoking the new operator for ResourceObj.
> 
> -- Tom
> 
> 
> 
> -----Original Message-----
> From: Doug Simon [mailto:doug.simon at oracle.com]
> Sent: Monday, May 05, 2014 5:51 AM
> To: Deneau, Tom
> Cc: Gilles Duboscq; Christian Wirth
> Subject: Memory allocation in HSAIL
> 
> Hi Tom,
> 
> The way memory is currently allocated for HSAIL deoptimization
> info departs somewhat from the way HotSpot manages variable
> size/embedded data structures. One immediate side effect of this
> is that your recent changes broke the Windows build with the
> following compiler
> warnings:
> 
> 
> \src\gpu\hsail\vm\gpu_hsail_Frame.hpp(15): error C2220: warning
> treated as error - no 'object' file generated [c:\oracl
> \src\gpu\hsail\vm\gpu_hsail_Frame.hpp(15): warning C4200:
> nonstandard extension used : zero-sized array in struct/union
> 
> Gilles and I have looked at the code and have the following
> recommendations:
> 
> Since HSAILDeoptimizationInfo subclasses ResourceObj, it should
> not override the new operator. Instead, at the allocation site it
> should do whatever size computation is necessary (probably in a
> static method of
> HSAILDeoptimizationInfo) and call one of the existing new
> operators defined by ResourceObj. At is currently stands, it's
> strange to have a ResourceObj subclass that allocates directly
> from the C
> heap.
> 
> 
> The bytesPerSaveArea is computed information that does not need
> to be stored in a _bytesPerSaveArea. Same goes for _deopt_span.
> 
> Since both HSAILKernelDeoptimization and HSAILFrame are really
> overlays on a HSAILDeoptimizationInfo, they should both use
> VALUE_OBJ_CLASS_SPEC.
> 
> For example:
> 
> class HSAILKernelDeoptimization VALUE_OBJ_CLASS_SPEC { ... }
> 
> The _num_s_regs, _num_d_regs and _num_stack_slots value are fixed
> for a given HSAILDeoptimizationInfo and do not need to be stored
> in each HSAILFrame (I can't even see where they are currently
> initialized).
> 
> 
> You should probably think about alignment for the objects
> embedded in a HSAILDeoptimizationInfo. See
> CodeBlob::allocation_size() for inspiration.
> 
> The HSAILFrame::_save_area and
> HSAILDeoptimizationInfo::_deopt_save_states fields should go
> away.
> 
> Accessing them should be done like the access to the objects
> embedded in an nmethod (e.g. nmethod::scopes_pcs_begin()).
> 
> The highest priority is to fix the Windows build.
> 
> -Doug
>  
>  
>  
>  
> <hotspotvmtype-for-sizeof.patch>



More information about the graal-dev mailing list