gsmiller commented on PR #12417:
URL: https://github.com/apache/lucene/pull/12417#issuecomment-1627487242
[Disclaimer: I'm pretty new to working with the incubator vector code, so
please excuse wonky terminology or silly ideas]
@ChrisHegarty have you experimented at all with narrower vector lanes for
lower bpv? I poked around your bitpacking repo a bit this morning and
experimented a bit with the 2bpv unpacking case. If I'm understanding
correctly, you essentially have four 32-bit lanes involved in the shift/mask
operations, so you're getting 4x parallelism right? (i.e., you're "generating"
four output ints in each vectorized op?). I wonder if there's any way to use
8bit lanes and get 16x parallelism in each shift/mask op? I messed about with
this a little bit, and—if I unpack into a byte[] instead of int[]—this produced
a pretty nice improvement in the benchmarks[1]. What I'm not sure of is how to
efficiently get into an int[] for output. Maybe that's the killer? Anyway,
wanted to just float this question out there as a newbie to the space but
curious and trying to learn more.
[1] here's what I experimented with:
```
private static final VectorSpecies<Byte> BYTE_SPECIES_128 =
ByteVector.SPECIES_128;
[...]
byte[] input = [...] // input is in bytes in this case, not int[]
byte[] byteOut = new byte[128];
ByteVector inVec = ByteVector.fromArray(BYTE_SPECIES_128, input, 0);
ByteVector outVec;
int outOff = 0;
final byte mask = (1 << 2) - 1;
outVec = inVec.and(mask);
outVec.intoArray(byteOut, outOff);
outVec = inVec.lanewise(VectorOperators.LSHR, 2).and(mask);
outVec.intoArray(byteOut, outOff+=16);
outVec = inVec.lanewise(VectorOperators.LSHR, 4).and(mask);
outVec.intoArray(byteOut, outOff+=16);
[... you get the idea ...]
```
```
Benchmark Mode Cnt Score Error Units
Benchmark.decode2SimdPack thrpt 5 58.689 ± 0.191 ops/us
Benchmark.decode2SimdPack2 thrpt 5 85.847 ± 1.800 ops/us
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]