[Jprogramming] char indexof performance

Elijah Stone elronnd at elronnd.net
Fri Mar 18 09:41:07 UTC 2022


What was I thinking? i. is much more prestigious than /:

    x=: ?1e8$65536
    y=: 0+x          NB. avoid selfie optimizations.  The effect is still present, but less pronounced
    x4=: 10 u:x
    y4=: 10 u:y
    x2=: 2 u:x4
    y2=: 2 u:y4
    timex'x i.y'
0.728156
    timex'x4 i.y4'
3.8804
    timex'x2 i.y2'
0.651964

Probably an oversight when 4-byte chars were added, on the theory that 
2-byte chars would always get small-range optimization.  (Which is, as a 
matter of fact, not the case.)

Attached is a patch fixing the problem.  This also helps with 4-column 
matrices of 1-byte chars etc.  (I think there may be reasonably cheap 
gains to be made across the board for i. on matrices of few columns, but 
at the very least small POT deserves to be fast.)  This should also 
improve performance for smaller 2-byte arrays that do not make the 
small-range cut.  With the patch:

    timex'x4 i.y4'
0.613455

  -E


More information about the Programming mailing list