Request for reviews (M): 7079329: Adjust allocation prefetching for T4

Vladimir Kozlov vladimir.kozlov at oracle.com
Tue Aug 16 10:05:15 PDT 2011


Thank you, Christian, Paul and Igor

I updated webrev with suggestions:

http://cr.openjdk.java.net/~kvn/7079329/webrev

- AllocateInstPrefetchLines renamed to AllocateInstancePrefetchLines.
- Prefetch instructions in x86 .ad use MacroAssembler instructions.
- Added Abstract_VM_Version::reserve_for_allocation_prefetch() method used in 
ThreadLocalAllocBuffer::end_reserve().
- I have to use FLAG_SET_ERGO() for AllocatePrefetchLines*2 setting since 
VM_Version::initialize() is called twice on Sparc (long story which I don't want 
to discuss here).

Vladimir

Vladimir Kozlov wrote:
> I will think about it.
> 
> Thanks,
> Vladimir
> 
> On 8/16/11 6:11 AM, Paul Hohensee wrote:
>> Also, is there a way to avoid using #ifdef SPARC in 
>> threadLocalAllocBuffer.hpp?
>> Maybe add a predicate to vm_version that says whether or not to play 
>> the tlab
>> reserve game.
>>
>> Paul
>>
>> On 8/16/11 9:01 AM, Paul Hohensee wrote:
>>> You're changing the meaning of an existing flag, 
>>> AllocatePrefetchLines, to
>>> apply only to arrays, right?
>>>
>>> If so, I'd add another flag for arrays, maybe call it 
>>> AllocateArrayPrefetchLines,
>>> and change the code so AllocatePrefetchLines becomes an optional 
>>> parameter.
>>> E.g., default it to -1 in globals.hpp, and if it's specified on the 
>>> command line,
>>> set both AllocateArrayPrefetchLines and AllocateInstPrefetchLines to the
>>> command line value. That would retain backward compatibility: I remember
>>> seeing AllocatePrefetchLines used in a few jbb submissions.
>>>
>>> Also, I'd rename AllocateInstPrefetchLines to 
>>> AllocateInstancePrefetchLines. 'Inst"
>>> is a bit confusing to me and perhaps to others: the first thing I 
>>> think of is 'instruction'.
>>>
>>> Paul
>>>
>>> On 8/15/11 9:12 PM, Vladimir Kozlov wrote:
>>>> http://cr.openjdk.java.net/~kvn/7079329/webrev
>>>>
>>>> 7079329: Adjust allocation prefetching for T4
>>>>
>>>> L2 cache line size is 32 bytes on T4 instead of 64 bytes on T series 
>>>> before. As result BIS instruction prefetches
>>>> only 32 bytes. Jbb2005 runs show that prefetching 64 bytes is still 
>>>> better on T4 so 2 BIS instructions should be issued.
>>>>
>>>> BIS can't be use for general prefetching since it may fault. New 
>>>> PrefetchAllocation node was added for allocation
>>>> prefetching.
>>>>
>>>> Changed prefetchAlloc_bis parameter from memory to regP.
>>>>
>>>> Use AllocatePrefetchInstr on Sparc to allow specify what instruction 
>>>> to use for allocation prefetching (0: prefetch
>>>> write, 1: BIS).
>>>>
>>>> Added new instructions on Sparc cacheLineAdrX to reduce number of 
>>>> instructions generated for finding next cache line
>>>> address.
>>>>
>>>> Added new flag AllocateInstPrefetchLines to specify number of lines 
>>>> to prefetch for instance allocation.
>>>>
>>>> L1_data_cache_line_size() renamed to prefetch_data_size().


More information about the hotspot-compiler-dev mailing list