msokolov commented on PR #12311:
URL: https://github.com/apache/lucene/pull/12311#issuecomment-1563317504

   I'm seeing very strange results after testing with 768-dim vectors. 
   
   ```
                               TaskQPS baseline      StdDevQPS candidate      
StdDev                Pct diff p-value                                          
               
                     HighTermVector      139.27      (6.7%)       57.21      
(0.8%)  -58.9% ( -62% -  -55%) 0.000                                            
                
                  AndHighHighVector      139.15      (6.4%)       57.15      
(0.7%)  -58.9% ( -62% -  -55%) 0.000                                            
                
                      LowTermVector      138.54      (6.2%)       57.00      
(0.8%)  -58.9% ( -62% -  -55%) 0.000                                            
                
                      MedTermVector      138.67      (6.9%)       57.23      
(0.9%)  -58.7% ( -62% -  -54%) 0.000                                            
                
                   AndHighMedVector      137.95      (6.1%)       57.10      
(0.8%)  -58.6% ( -61% -  -55%) 0.000                                            
                
                   AndHighLowVector      137.86      (6.4%)       57.21      
(0.8%)  -58.5% ( -61% -  -54%) 0.000                                            
                
                           PKLookup      199.30      (2.3%)      198.44      
(2.5%)   -0.4% (  -5% -    4%) 0.565  
   ```
   I have double-checked that candidate has  
609fc9b63f61954a7408faa1669e807a6bbf1da9 and baseline is 
c9c49bc5539d83979360e65b39a536c2d452ba2a. Both conditions are run using the 
same index, tasks, etc. The JFR output is sort of a head-scratcher too. They 
clearly show that the JDK vector API is being called (I think?) but also show a 
lot of noisy things (Objects.requireNonNull). Is ` 
jdk.incubator.vector.FloatVector#reduceLanesTemplate()` really what we want to 
see there? Another mystery is why 
`org.apache.lucene.util.hnsw.HnswGraphSearcher#searchLevel()  ` would have more 
samples in the candidate given that it has nothing to do with the vector api.  
In looking at these you should ignore things related to `VectorDictionary` - 
these are loading a word->vector dictionary that is used to look up query 
vectors; the loading takes a while but happens prior to the index being opened 
and the  queries being executed.
   
   ## candidate
   
   ```
   PERCENT       CPU SAMPLES   STACK                                            
                                                                                
                 
   9.00%         2721          
jdk.incubator.vector.FloatVector#reduceLanesTemplate()                          
                                                                  
   5.44%         1645          
org.apache.lucene.util.hnsw.HnswGraphSearcher#searchLevel()                     
                                                                  
   3.89%         1177          
org.apache.lucene.util.packed.DirectReader$DirectPackedReader12#get()           
                                                                  
   3.03%         917           
org.apache.lucene.util.packed.DirectReader$DirectPackedReader16#get()           
                                                                  
   2.99%         904           java.lang.invoke.VarHandleGuards#guard_LJ_I()    
                                                                                
                 
   2.70%         816           jdk.internal.misc.Unsafe#copyMemoryChecks()      
                                                                                
                 
   2.52%         761           perf.VectorDictionary#vectorDiv()                
                                                                                
                 
   2.45%         741           org.apache.lucene.store.DataInput#readVInt()     
                                                                                
                 
   2.43%         734           
org.apache.lucene.util.packed.DirectMonotonicReader#get()                       
                                                                  
   2.17%         655           java.util.Objects#requireNonNull()               
                                                                                
                 
   1.92%         580           jdk.jfr.internal.JVM#emitEvent()                 
                                                                                
                 
   1.70%         513           java.util.Arrays#binarySearch0()                 
                                                                                
                 
   1.40%         423           
org.apache.lucene.codecs.lucene95.Lucene95HnswVectorsReader$OffHeapHnswGraph#seek()
                                                               
   1.35%         407           java.util.HashMap#resize()                       
                                                                                
                 
   1.29%         391           
org.apache.lucene.codecs.lucene95.OffHeapFloatVectorValues#vectorValue()        
                                                                  
   1.29%         389           sun.nio.ch.UnixFileDispatcherImpl#unmap0()       
                                                                                
                 
   1.27%         385           
org.apache.lucene.util.VectorUtilPanamaProvider#dotProduct()                    
                                                                  
   1.26%         380           
jdk.internal.foreign.AbstractMemorySegmentImpl#checkBounds()                    
                                                                  
   1.23%         373           org.apache.lucene.util.LongHeap#downHeap()       
                                                                                
                 
   1.22%         370           
jdk.incubator.vector.FloatVector#fromArray0Template()                           
                                                                  
   1.19%         361           java.util.zip.Inflater#inflateBytesBytes()       
                                                                                
                 
   1.15%         348           
org.apache.lucene.util.hnsw.NeighborQueue#decodeScore()                         
                                                                  
   1.13%         341           
org.apache.lucene.util.SparseFixedBitSet#getAndSet()                            
                                                                  
   1.12%         338           
org.apache.lucene.util.SparseFixedBitSet#insertLong()                           
                                                                  
   1.02%         308           jdk.internal.misc.Unsafe#copyMemory()            
                                                                                
                 
   0.96%         289           
jdk.internal.foreign.AbstractMemorySegmentImpl#copy()                           
                                                                  
   0.95%         286           perf.VectorDictionary#<init>()                   
                                                                                
                 
   0.94%         283           java.util.Objects#checkIndex()                   
                                                                                
                 
   0.88%         267           
jdk.internal.foreign.AbstractMemorySegmentImpl#getBaseAndScale()                
                                                                  
   0.85%         257           
org.apache.lucene.store.MemorySegmentIndexInput#readByte()
   ```
   
   ## baseline
   
   ```
   PERCENT       CPU SAMPLES   STACK
   24.69%        7386          perf.VectorDictionary#vectorDiv()
   20.49%        6127          org.apache.lucene.util.VectorUtil#dotProduct()
   3.42%         1022          java.nio.FloatBuffer#getArray()
   2.65%         792           
org.apache.lucene.util.hnsw.HnswGraphSearcher#searchLevel()
   2.50%         748           perf.VectorDictionary#<init>()
   2.34%         699           jdk.internal.misc.Unsafe#checkPrimitivePointer()
   1.95%         583           jdk.jfr.internal.JVM#emitEvent()
   1.62%         485           java.util.HashMap#getNode()
   1.61%         481           
org.apache.lucene.util.SparseFixedBitSet#insertLong()
   1.50%         450           java.nio.Buffer#position()
   1.32%         395           java.util.HashMap#resize()
   1.03%         309           java.io.BufferedReader#readLine()
   0.98%         292           jdk.internal.misc.Unsafe#checkOffset()
   0.91%         272           perf.PKLookupTask#go()
   0.90%         270           java.util.zip.Inflater#inflateBytesBytes()
   0.85%         253           java.util.HashMap#containsKey()
   0.79%         236           org.apache.lucene.util.LongHeap#downHeap()
   0.67%         200           
org.apache.lucene.codecs.lucene90.blocktree.SegmentTermsEnum#seekExact()
   0.65%         194           sun.nio.ch.FileChannelImpl#unmap0()
   0.57%         170           
org.apache.lucene.util.SparseFixedBitSet#getAndSet()
   0.53%         159           jdk.internal.util.ArraysSupport#mismatch()
   0.51%         154           
org.apache.lucene.util.hnsw.HnswGraphSearcher#graphNextNeighbor()
   0.48%         145           sun.nio.cs.UTF_8$Decoder#decodeArrayLoop()
   0.48%         143           java.io.FileOutputStream#writeBytes()
   0.46%         137           org.apache.lucene.store.ByteBufferGuard#getByte()
   0.44%         131           
org.apache.lucene.codecs.lucene95.Lucene95HnswVectorsReader$OffHeapHnswGraph#seek()
   0.41%         123           java.nio.Buffer#checkIndex()
   0.40%         120           org.apache.lucene.store.DataInput#readVInt()
   0.38%         113           perf.VectorDictionary#vectorNorm()
   0.35%         104           org.apache.lucene.util.LongHeap#upHeap()
   ```
   
   
   


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