JEP draft: Improve performance of String and Array operations on AArch64

OwnerDmitrij Pochepko
Created2017/10/10 12:22
Updated2017/10/17 18:32
TypeFeature
StatusSubmitted
Componenthotspot / compiler
ScopeImplementation
Discussionhotspot dash compiler dash dev at openjdk dot java dot net
EffortM
DurationM
Priority3
Reviewed byVladimir Kozlov
Release10
Issue8189100

Summary

Improve the performance of AArch64 OpenJDK port intrinsics for operations with lots of load/store operations, such as String and Array intrinsics.

Non-Goals

Motivation

Specialized CPU architecture-specific code patterns improve the performance of user applications and benchmarks.

Description

Intrinsics are designed to create CPU architecture-specific machine code which gets executed instead of generic Java code for a given method to improve performance. While most of the intrinsics are already implemented in AArch64 OpenJDK port, current implementation of some intrinsics may not be optimal. Specifically, some intrinsics for AArch64 architectures may benefit from software prefetching, addresses alignment, instructions placement more suitable for pipelining, replacement of certain instruction patterns with faster ones or using SIMD instructions.

This includes (but is not limited to) such typical operations as String::compareTo, String::indexOf, StringCoding::hasNegatives, Arrays::equals, StringUTF16::compress, StringLatin1::inflate.

Depending on the intrinsic algorithm, most common intrinsic use case and CPU specifics the following changes may be considered:

Testing

Risks and Assumptions