On Thu, 13 Jul 2023 09:27:03 GMT, Pavel Rappo <pra...@openjdk.org> wrote:

> > @pavelrappo Actually I look at the implementation of 
> > `ArraySupport.vectorizedHashCode` and it does branching and only uses 
> > vector instructions if the length is sufficiently large. Please do 
> > benchmarking if you are uncertain with performance characteristics of 
> > functions. Thanks.
> 
> Are you sure you are talking about `vectorizedHashCode` and not 
> `vectorizedMismatch`? While the latter indeed branches on array length, the 
> former consists of simple for-loops, which might not be the actual thing 
> anyway because the whole method is `@IntrinsicCandidate`.
> 
> Regardless of any performance characteristics, the call to something named 
> `vectorizedHashCode` might needlessly draw attention to something that does 
> not deserve it.
> 
> My mental model might be wrong, but let me give you a stream analogy. Would 
> you not pause and think if you unexpectedly saw this?
> 
> ```
> ...
> .stream()
> ...
> .parallel()
> ...
> ```

I don't think it's a good analogy. In my understanding, it is an obvious fact 
that `vectorizedHashCode` will not always vectorize, as vectorized code must 
always handle suffixes that cannot be vectorized.

I don't think judging outside `vectorizedHashCode` will make the code clear, 
unless `vectorizedHashCode` only handles the part that can be vectorized, and 
the processing of suffixes is also outside `vectorizedHashCode`.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/14831#issuecomment-1634378224

Reply via email to