• Jordan Lewis's avatar
    colexec: use Get methods on native type slices · 49780f3f
    Jordan Lewis authored
    Also, add //gcassert:inline assertions on all Get methods but the
    DatumVec ones and the gcassert linter, to prove that all of these Get
    methods are inlined.
    
    Here are some benchmarks. I didn't run them all, because I believe that
    the guaranteed inlining proven by gcassert implies that any benchmark
    differences must be due to "binary layout" or other ghosts.
    
    ```
    Distinct/Ordered/hasNulls=false/newTupleProbability=0.010/rows=65536/cols=2/ordCols=2-24     468µs ± 0%     462µs ± 0%  -1.26%  (p=0.000 n=10+10)
    
    name                                                                                      old speed      new speed      delta
    Distinct/Ordered/hasNulls=false/newTupleProbability=0.010/rows=65536/cols=2/ordCols=2-24  2.24GB/s ± 0%  2.27GB/s ± 0%  +1.28%  (p=0.000 n=10+10)
    
    CastOp/useSel=true/hasNulls=true/int_to_float-24      5.18µs ± 2%    4.60µs ± 1%  -11.21%  (p=0.000 n=9+9)
    CastOp/useSel=true/hasNulls=false/int_to_float-24     1.06µs ± 7%    1.03µs ± 5%     ~     (p=0.101 n=10+10)
    CastOp/useSel=false/hasNulls=true/int_to_float-24     5.33µs ± 1%    5.47µs ± 2%   +2.53%  (p=0.000 n=9+10)
    CastOp/useSel=false/hasNulls=false/int_to_float-24    1.08µs ± 0%    1.08µs ± 0%     ~     (p=0.136 n=10+10)
    
    name                                                old speed      new speed      delta
    CastOp/useSel=true/hasNulls=true/int_to_float-24    1.58GB/s ± 2%  1.78GB/s ± 1%  +12.62%  (p=0.000 n=9+9)
    CastOp/useSel=true/hasNulls=false/int_to_float-24   7.73GB/s ± 7%  7.93GB/s ± 5%     ~     (p=0.089 n=10+10)
    CastOp/useSel=false/hasNulls=true/int_to_float-24   1.54GB/s ± 1%  1.50GB/s ± 2%   -2.46%  (p=0.000 n=9+10)
    CastOp/useSel=false/hasNulls=false/int_to_float-24  7.60GB/s ± 0%  7.59GB/s ± 0%     ~     (p=0.143 n=10+10)
    ```
    
    Release note: None
    49780f3f
selection_ops.eg.go 1.17 MB
The source could not be displayed because it is larger than 1 MB. You can load it anyway or download it instead.