RFR: 8264109: Add vectorized implementation for VectorMask.andNot()
Xiaohong Gong
xgong at openjdk.java.net
Wed Mar 31 02:53:13 UTC 2021
On Fri, 26 Mar 2021 01:50:33 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;
> }
Hi there, could anyone please take a look at this PR? Thanks so much!
-------------
PR: https://git.openjdk.java.net/jdk/pull/3211
More information about the core-libs-dev
mailing list