RFR: 8264109: Add vectorized implementation for VectorMask.andNot() [v2]

Ningsheng Jian njian at openjdk.java.net
Fri Apr 2 10:04:17 UTC 2021


On Thu, 1 Apr 2021 03:39:43 GMT, Xiaohong Gong <xgong at openjdk.org> wrote:

>> Currently "VectorMask.andNot()" is not vectorized:
>>     public VectorMask<E> andNot(VectorMask<E> m) {
>>         // FIXME: Generate good code here.
>>         return bOp(m, (i, a, b) -> a && !b);
>>     }
>> This can be implemented with` "and(m.not())" `directly. Since `"VectorMask.and()/not()" `have been vectorized in hotspot, `"andNot"`
>> can be vectorized as well by calling them.
>> 
>> The performance gain is >100% for such a simple JMH:
>>   @Benchmark
>>   public Object andNot(Blackhole bh) {
>>     boolean[] mask = fm.apply(SPECIES.length());
>>     boolean[] r = fmt.apply(SPECIES.length());
>>     VectorMask<Byte> rm = VectorMask.fromArray(SPECIES, r, 0);
>> 
>>     for (int ic = 0; ic < INVOC_COUNT; ic++) {
>>       for (int i = 0; i < mask.length; i += SPECIES.length()) {
>>         VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, i);
>>           rm = rm.andNot(vmask);
>>         }
>>     }
>>     return rm;
>>   }
>
> Xiaohong Gong has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Move the changing to AbstractMask.andNot and revert changes in VectorMask
>   
>   Change-Id: Ie3ec8f53cb24526c8e1ccc68038355d024910818
>   CustomizedGitHooks: yes

LGTM

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

Marked as reviewed by njian (Committer).

PR: https://git.openjdk.java.net/jdk/pull/3211


More information about the hotspot-compiler-dev mailing list