RowFn binary numeric ScalarFn rewrite - #9320
Conversation
Route primitive numeric kernels through RowFn while retaining Binary as the public scalar function identity. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Merging this PR will degrade performance by 16.05%
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing Footnotes
|
51098ea to
37eb039
Compare
|
Local wall-time results do not reproduce the broad CodSpeed simulation regressions. Ratios below are For example, locally (on my machine) the comparison commit improves the Measurement types
Primitive comparison resultsBase is the numeric-only commit
Ten cases are at or below Comparison controlsBase is
The process medians ranged from 180.0 to 195.3 µs for the base Primitive numeric resultsBase is the RowFn API commit
The numeric port is mixed. Two cases are below Numeric controlsBase is
The base and candidate ranges for Cross-benchmark sensitivityThe eight-run full matrix gave This is also why the tables separate isolated measurements from controls and unstable controls. Method
These are local wall-time measurements. They are not CodSpeed CPU-simulation measurements and do not explain CodSpeed cache or instruction-cost changes. ObservationsThere are only a few numeric arithmetic regressions of at most 10%, and they all are related to 64-bit operations being harder for the compiler to optimize. If I can't find a way to undo this regression via the But in general, everything else is at parity or obviously better. |
Use RowFn for primitive comparisons while retaining fused x86 bit-packing for the measured wide ordered cases where LLVM generates faster code. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
37eb039 to
32ad0bf
Compare
RowFn Binary Numeric Implementations
RowFn Binary Numeric ImplementationsRowFn binary numeric ScalarFn rewrite
|
To help with the regressions, we could have support a mode that gives you constant size blocks of data instead of just row. But that can come later! |
|
@joseph-isaacs I already have batch execution built in to the machinery driving the RowFn framework, and also if we did that it would make it harder to define constant handling and null propagation semantics. I am pretty certain that the regressions come from 1) initialization costs that might not need to be paid (this is why we have the |
Tracking Issue: #9130
Moves primitive numeric arithmetic and comparisons to
RowFn. Selected measured comparison cases retain their columnar paths.TODO