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.koz...@oracle.com]
Sent: Friday, June 22, 2018 12:29 PM
To: Kamath, Smita<smita.kam...@intel.com>
Cc: hotspot compiler<hotspot-compiler-...@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


Reply via email to