Superword - Aligning arrays

John Rose John.Rose at Sun.COM
Tue Feb 3 15:47:37 PST 2009


On Feb 3, 2009, at 11:19 AM, James Walsh wrote:

> I must not be looking in the right files for the array reallocation  
> code.  Can you dumb it down and give me a file name and line number?

Look in space.hpp at Space::allocate and par_allocate.  Those virtuals  
are both defined and called in very many places.  At a minimum, each  
implementation would have to insert the alignment correction before  
affected objects.

You know, it would probably simplify matters (deep down in the GC) to  
strongly align *all* objects bigger than a certain threshold, not just  
arrays.  Then your alignment logic would simply compare the requested  
size against the threshold, rather than ask potentially expensive  
questions about exactly which kind of object were being allocated.  Or  
(thinking out loud) the alignment request could be passed in as an  
additional boolean argument to [par_]allocate.

> I'm guessing that option 1 is a no go since it will explode memory  
> usage with dead space and only doing SIMD on longs/doubles isn't  
> going to work for me so I guess I'm going to give option 3 a try.   
> Is the C2 arraycopy intrinsic you refer to  
> LibraryCallKit::inline_arraycopy()?

Yes.  Look for this comment in generate_block_arraycopy:
   // One more chance:  Pick off an initial 32-bit word.

There's similar logic in ClearArrayNode::clear_memory, too.

You're making progress, I think, but it's not an easy problem.  Good  
luck!

-- John



More information about the hotspot-dev mailing list