Yes, this looks good to me. Let me test it.

Thanks,
Vladimir

On 6/25/18 10:25 PM, Kamath, Smita wrote:
Hi Vladimir,

Please find the updated webrev link.

Webrev Link: http://cr.openjdk.java.net/~srukmannagar/Base64/webrev.00/
Bug link: https://bugs.openjdk.java.net/browse/JDK-8205528

Please let me know if you have additional questions.

Thanks and Regards,
Smita

-----Original Message-----
From: Vladimir Kozlov [mailto:vladimir.koz...@oracle.com]
Sent: Monday, June 25, 2018 10:48 AM
To: Kamath, Smita <smita.kam...@intel.com>
Cc: hotspot compiler <hotspot-compiler-...@openjdk.java.net>; 
core-libs-dev@openjdk.java.net; Paul Sandoz <paul.san...@oracle.com>
Subject: Re: RFR(S) JDK-8205528: Base64 Encode Algorithm using AVX512 
Instructions

I forgot to reply to your answers.

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.

As was discussed in an other e-mail lets keep your copy.


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-sd
m-vol-1-2abcd-3abcd.pdf Also see, section 2.3.12, page 524 for VSIB
memory addressing information.

Got it. Thanks for document reference.


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.

Thanks,
Vladimir


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