Reduced MaxVectorSize and vector type initialization

Rohit Arul Raj rohitarulraj at gmail.com
Fri Oct 27 11:03:54 UTC 2017


Hello Vladimir,

We are fine with the current settings.

Thanks,
Rohit

On Thu, Oct 26, 2017 at 11:06 PM, Vladimir Kozlov <
vladimir.kozlov at oracle.com> wrote:

> Thank you, Rohit
>
> Do you plan to propose changes to increase vector size to 32 for 15h and
> 16h? Or AMD is fine with current settings?
>
> Thanks,
> Vladimir
>
> On 10/25/17 9:48 PM, Rohit Arul Raj wrote:
>
>> Hello Vladimir,
>>
>>
>> Please find the requested details:
>>
>>
>> AVX/AVX2 support availability on AMD Processors:
>>
>> Family 14h and earlier – No AVX support
>>
>> Family 15h -  (1^st -gen), (2nd-gen), (3rd-gen) AVX support available,
>> max vector width is 32 bytes (we limit the vector size to 16 bytes in
>> openJDK).
>>
>> Family 16h – AVX support available, max vector width is 32 bytes (we
>> limit the vector size to 16 bytes in openJDK).
>>
>> Family 15h -  (4^th -gen) AVX, AVX2 support available, max vector width
>> is 32 bytes (we limit the vector size to 16 bytes in openJDK).
>>
>> Family 17h – AVX, AVX2 support available, max vector width is 32 bytes
>> (our proposed changes have vector size set to 32 bytes in openJDK).
>>
>> AVX3 support is not available on AMD processors yet.
>>
>>
>>  From the comments below, Dean's suggestions seems reasonable.
>>
>> Regards,
>> Rohit
>>
>>
>> On Wed, Oct 25, 2017 at 3:32 AM, Vladimir Kozlov <
>> vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>> wrote:
>>
>>     We can't use platform specific UseAVX flag in shared code in type.cpp.
>>
>>     I would say we should not support AVX (set UseAVX to 0) on AMD < 17h.
>>     And we need to ask AMD which AMD cpus are supporting AVX, AVX2, AVX3
>> and corresponding vectors 32 and 64 bytes.
>>     If AMD's Instructions Set before 17h does not support whole 32 bytes
>> vectors we can't call it AVX.
>>
>>     Thanks,
>>     Vladimir
>>
>>     On 10/18/17 10:01 AM, dean.long at oracle.com <mailto:
>> dean.long at oracle.com> wrote:
>>
>>         How about initializing TypeVect::VECTY and friends
>> unconditionally?  I am nervous about exchanging one guarding
>>         condition for another.
>>
>>         dl
>>
>>
>>         On 10/18/17 1:03 AM, Nils Eliasson wrote:
>>
>>
>>             HI,
>>
>>             I ran into a problem with the interaction between
>> MaxVectorSize and the UseAVX. For some AMD CPUs we limit
>>             the vector size to 16 because it gives the best performance.
>>
>>                 +    if (cpu_family() < 0x17 && MaxVectorSize > 16) {
>>                 +      // Limit vectors size to 16 bytes on AMD cpus <
>> 17h.
>>                         FLAG_SET_DEFAULT(MaxVectorSize, 16);
>>                       }
>>
>>
>>             Whenf MaxVecorSize is set to 16 it has the sideeffect that
>> the TypeVect::VECTY and mreg2type[Op_VecY] won't
>>             be initalized even though the platform has the capability.
>>
>>             Type.cpp:~660
>>
>>             [...]
>>              >   if (Matcher::vector_size_supported(T_FLOAT,8)) {
>>              >     TypeVect::VECTY = TypeVect::make(T_FLOAT,8);
>>              >   }
>>             [...]
>>              >   mreg2type[Op_VecY] = TypeVect::VECTY;
>>
>>
>>             In the ad-files feature flags (UseAVX etc.) are used to
>> control what rules should be matched if it has
>>             effects on specific vector registers. Here we have a mismatch.
>>
>>             On a platform that supports AVX2 but have MaxVectorSize
>> limited to 16, the VM will fail when the
>>             TypeVect::VECTY/mreg2type[Op_VecY] is uninitialized. We will
>> also hit asserts in a few places like:
>>             assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecY),
>> "sanity");
>>
>>             Shouldn't the type initialization in type.cpp be dependent on
>> feature flag (UseAVX etc.) instead of
>>             MaxVectorSize? (The type for the vector registers are
>> initialized if the platform supports them, but they
>>             might not be used if MaxVectorSize is limited.)
>>
>>             This is a patch that solves the problem, but I have not
>> convinced myself that it is the right way:
>>             http://cr.openjdk.java.net/~neliasso/maxvectorsize/webrev/
>>             <http://cr.openjdk.java.net/~neliasso/maxvectorsize/webrev/>
>>
>>             Feedback appreciated,
>>
>>             Regards,
>>             Nils Eliasson
>>
>>
>>
>>
>>
>>             http://cr.openjdk.java.net/~neliasso/maxvectorsize/webrev/
>>             <http://cr.openjdk.java.net/~neliasso/maxvectorsize/webrev/>
>>
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20171027/09631087/attachment-0001.html>


More information about the hotspot-compiler-dev mailing list