RFR(S) JDK-8205528: Base64 Encode Algorithm using AVX512 Instructions

Xueming Shen xueming.shen at oracle.com
Mon Jun 25 16:13:40 UTC 2018


Hi Kamath,

Instead of throwing an aiobe, should the generateImplEncode() be like

void generateImplEncode(byte[] src, int sp, int sl, byte[] dst, int dp) {
     if (sp < sl) {
         implEncode(src, sp, sl, dst, dp, ...);
     }
}

Any benefit of separating it into its own method?

Thanks,
Sherman

On 6/22/18, 2:49 PM, Kamath, Smita wrote:
> Hi Vladimir,
>
> Please see my answers to your questions as below:
>
> 1) One question so: why you have own copy of base64 charsets and not using one in library:
> I am using vpgatherdd instruction to fetch multiple values from base64 array in a single instruction with a vector index. Vpgatherdd instruction works on 32 bit array and so I need to define base64 charset in a 32 bit array. I have given reference to gather instruction below.
>
> 2) Some indents in new and old Assembler::emit_operand() are off. In new Assembler::emit_operand() is better use } else { instead of 'return' in one branch.
> I'll make the necessary changes and send an updated webrev.
>
> 3) This is first time I see that XMM register can be used for index in address. Is it true? Can you point to Intel's document which describes it.
> I am using vpgatherdd instruction which requires index vector with scale. It uses VSIB addressing where the index register is a zmm register.
> Please refer to reference manual, volume 2c, page 2211: https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf
> Also see, section 2.3.12, page 524 for VSIB memory addressing information.
>
> 4)  Please, add tests to test/hotspot/jtreg/compiler/intrinsics/base64 (may be similar to sha or AES in compiler/codegen/aes) to make sure that all flags, intrinsic is used and it produces correct result.
> I will add test cases as per your suggestion.
>
> Please let me know if you have additional questions.
>
> Thanks,
> Smita
>
> -----Original Message-----
> From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
> Sent: Friday, June 22, 2018 12:29 PM
> To: Kamath, Smita<smita.kamath at intel.com>
> Cc: hotspot compiler<hotspot-compiler-dev at openjdk.java.net>
> Subject: Re: RFR(S) JDK-8205528: Base64 Encode Algorithm using AVX512 Instructions
>
> Hi Smita,
>
> I CCing to Libs to review code changes in Base64.java.
>
> Looks like you changed all need place to implement intrinsic.
> One question so: why you have own copy of base64 charsets and not using one in library:
>
>            private int encode0(byte[] src, int off, int end, byte[] dst) {
>                char[] base64 = isURL ? toBase64URL : toBase64;
>
> Some indents in new and old Assembler::emit_operand() are off.
>
> In new Assembler::emit_operand() is better use } else { instead of 'return' in one branch.
>
> This is first time I see that XMM register can be used for index in address. Is it true? Can you point to Intel's document which describes it.
>
> What testing you did?
>
> Please, add tests to test/hotspot/jtreg/compiler/intrinsics/base64 (may be similar to sha or AES in compiler/codegen/aes) to make sure that all flags, intrinsic is used and it produces correct result.
>
> I know there is test/jdk/java/util/Base64/ tests but they may not trigger intrinsic usage. But you can use them as starting point for new tests.
>
> Thanks,
> Vladimir
>
> On 6/22/18 11:47 AM, Kamath, Smita wrote:
>> Hi Vladimir,
>>
>> I'd like to contribute an optimization for Base64 Encoding Algorithm
>> using AVX512 Instructions. This optimization shows 1.5x improvement on
>> x86_64 platform(SKL).
>>
>> Link to Bug: https://bugs.openjdk.java.net/browse/JDK-8205528
>>
>> Link to webrev:
>> http://cr.openjdk.java.net/~vdeshpande/Base64/webrev.00/
>>
>> For testing the implementation, I have run tests under
>> test/jdk/java/util/Base64/ and also ran
>> test/jdk/com/sun/jndi/ldap/Base64Test.java
>>
>> I have also run jtreg.
>>
>> Please review and let me know if you have any comments.
>>
>> Thanks and Regards,
>>
>> Smita
>>



More information about the core-libs-dev mailing list