RFR(S): 8248188: [PATCH] Add HotSpotIntrinsicCandidate and API for Base64 decoding

Corey Ashford cjashfor at linux.ibm.com
Mon Jun 29 16:44:29 UTC 2020


The webrev is located here:

http://cr.openjdk.java.net/~mhorie/8248188/webrev.00/

On 6/23/20 6:23 PM, Michihiro Horie wrote:
> Hi Corey,
> 
> Following is the issue I created.
> https://bugs.openjdk.java.net/browse/JDK-8248188
> 
> I will upload a webrev when you're ready as we talked in private.
> 
> Best regards,
> Michihiro
> 
> Inactive hide details for "Corey Ashford" ---2020/06/24 
> 09:40:10---Currently in java.util.Base64, there is a 
> HotSpotIntrinsicCa"Corey Ashford" ---2020/06/24 09:40:10---Currently in 
> java.util.Base64, there is a HotSpotIntrinsicCandidate and API for 
> encodeBlock, but no
> 
> From: "Corey Ashford" <cjashfor at linux.ibm.com>
> To: "hotspot-compiler-dev at openjdk.java.net" 
> <hotspot-compiler-dev at openjdk.java.net>, 
> "ppc-aix-port-dev at openjdk.java.net" <ppc-aix-port-dev at openjdk.java.net>
> Cc: Michihiro Horie/Japan/IBM at IBMJP, Kazunori Ogata/Japan/IBM at IBMJP, 
> joserz at br.ibm.com
> Date: 2020/06/24 09:40
> Subject: RFR(S): [PATCH] Add HotSpotIntrinsicCandidate and API for 
> Base64 decoding
> 
> ------------------------------------------------------------------------
> 
> 
> 
> Currently in java.util.Base64, there is a HotSpotIntrinsicCandidate and
> API for encodeBlock, but none for decoding.  This means that only
> encoding gets acceleration from the underlying CPU's vector hardware.
> 
> I'd like to propose adding a new intrinsic for decodeBlock.  The
> considerations I have for this new intrinsic's API:
> 
>   * Don't make any assumptions about the underlying capability of the
> hardware.  For example, do not impose any specific block size granularity.
> 
>   * Don't assume the underlying intrinsic can handle isMIME or isURL
> modes, but also let them decide if they will process the data regardless
> of the settings of the two booleans.
> 
>   * Any remaining data that is not processed by the intrinsic will be
> processed by the pure Java implementation.  This allows the intrinsic to
> process whatever block sizes it's good at without the complexity of
> handling the end fragments.
> 
>   * If any illegal character is discovered in the decoding process, the
> intrinsic will simply return -1, instead of requiring it to throw a
> proper exception from the context of the intrinsic.  In the event of
> getting a -1 returned from the intrinsic, the Java Base64 library code
> simply calls the pure Java implementation to have it find the error and
> properly throw an exception.  This is a performance trade-off in the
> case of an error (which I expect to be very rare).
> 
>   * One thought I have for a further optimization (not implemented in
> the current patch), is that when the intrinsic decides not to process a
> block because of some combination of isURL and isMIME settings it
> doesn't handle, it could return extra bits in the return code, encoded
> as a negative number.  For example:
> 
> Illegal_Base64_char   = 0b001;
> isMIME_unsupported    = 0b010;
> isURL_unsupported     = 0b100;
> 
> These can be OR'd together as needed and then negated (flip the sign).
> The Base64 library code could then cache these flags, so it will know
> not to call the intrinsic again when another decodeBlock is requested
> but with an unsupported mode.  This will save the performance hit of
> calling the intrinsic when it is guaranteed to fail.
> 
> I've tested the attached patch with an actual intrinsic coded up for
> Power9/Power10, but those runtime intrinsics and arch-specific patches
> aren't attached today.  I want to get some consensus on the
> library-level intrinsic API first.
> 
> Also attached is a simple test case to test that the new intrinsic API
> doesn't break anything.
> 
> I'm open to any comments about this.
> 
> Thanks for your consideration,
> 
> - Corey
> 
> 
> Corey Ashford
> IBM Systems, Linux Technology Center, OpenJDK team
> cjashfor at us dot ibm dot com
> [attachment "decodeBlock_api-20200623.patch" deleted by Michihiro 
> Horie/Japan/IBM] [attachment "TestBase64.java" deleted by Michihiro 
> Horie/Japan/IBM]
> 
> 



More information about the ppc-aix-port-dev mailing list