kaivalnp commented on code in PR #15341:
URL: https://github.com/apache/lucene/pull/15341#discussion_r2535599738


##########
lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99FlatVectorsWriter.java:
##########
@@ -153,10 +153,19 @@ public long ramBytesUsed() {
     return total;
   }
 
+  private static long alignOutput(IndexOutput output, VectorEncoding encoding) 
throws IOException {
+    return output.alignFilePointer(
+        switch (encoding) {
+          case BYTE -> Float.BYTES;
+          case FLOAT32 -> 64; // optimal alignment for Arm Neoverse machines.
+        });
+  }
+
   private void writeField(FieldWriter<?> fieldData, int maxDoc) throws 
IOException {
     // write vector values
-    long vectorDataOffset = vectorData.alignFilePointer(Float.BYTES);
-    switch (fieldData.fieldInfo.getVectorEncoding()) {
+    VectorEncoding encoding = fieldData.fieldInfo.getVectorEncoding();
+    long vectorDataOffset = alignOutput(vectorData, encoding);

Review Comment:
   I've added a commit to apply 64 byte alignment when `dimension % 16 == 0`, 
and 4 byte alignment otherwise.
   
   Looking back, I wonder if we can just keep it to 64 in all cases, for code 
simplicity? (vectors with arbitrary dimensions will implicitly be 4 byte 
aligned in this case).
   
   No strong opinions though..



-- 
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]

Reply via email to