ChrisHegarty commented on PR #12703:
URL: https://github.com/apache/lucene/pull/12703#issuecomment-1773365569

   Well... as simple wrapping of float[] into MemorySegment is not going to 
work out, the Vector API does not like it due to alignment constraints (which 
seems overly pedantic since it can operate fine when accessing a float[] 
directly! )
   
   ```
   FloatVector fromMemorySegment(...)
   
   throws IllegalArgumentException - if the memory segment is a heap segment 
that is not backed by a byte[] array.
   ```
   
   This approach would of course work fine for the binary computations, since 
they are byte[] backed.
   
   The current approach has three variants:
    1. `dotProduct(float[] a, float[] b)`
    2. `dotProduct(float[] a, RandomAccessVectorValues<float[]> b, int bOffset)`
    3. `dotProduct(RandomAccessVectorValues<float[]> a, int aOffset, 
RandomAccessVectorValues<float[]> b, int bOffset)`
   
   .. no.1 is used as a fallback when we span segments.
   
   I suspect that no.1 and no.2 are not as perf sensitive as no.3?  In fact, we 
could try to trace the float[] back to where it originates, maybe read and 
store it as bytes but access it as a float.
   
   Maybe there are other ways to invert things? I'll need to sleep on it!! 


-- 
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: issues-unsubscr...@lucene.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to