Add vortex.is_nan expression with stats-based pruning - #9949
Conversation
3bd0e55 to
9ffe04a
Compare
Signed-off-by: Yuyun Zhang <1252232014@qq.com> Co-Authored-By: Kimi K3
9ffe04a to
ee39587
Compare
Merging this PR will degrade performance by 10.44%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | WallTime | mul_u64_nonnull_neon |
28.9 µs | 40 µs | -27.91% |
| ❌ | Simulation | take_fsl_u32_random[16, 100] |
125.9 µs | 164.7 µs | -23.51% |
| ❌ | Simulation | bench_compare_sliced_dict_primitive[(3333, 10000)] |
160.6 µs | 197.9 µs | -18.87% |
| ❌ | WallTime | dbp_assemble_kernel_avx2[(I128, 1024)] |
464 ns | 560 ns | -17.14% |
| ❌ | WallTime | mul_i64_nonnull_neon |
32.8 µs | 39 µs | -16.11% |
| ❌ | WallTime | multiply_shapes_neon[(32768, PerRowPerRow)] |
32.7 µs | 38.9 µs | -15.94% |
| ❌ | WallTime | dbp_assemble_kernel_avx512[(I128, 1024)] |
463 ns | 544 ns | -14.89% |
| ❌ | WallTime | dict_canonicalize_gt_u8_neon[1000000] |
489.7 µs | 570.9 µs | -14.22% |
| ❌ | WallTime | filtered_owned_i64_avx2[OneNullInEight] |
22.6 µs | 25.7 µs | -12.18% |
| ❌ | WallTime | dbp_assemble_kernel_narrow_msp_avx2[(I128, 1024)] |
629 ns | 709 ns | -11.28% |
| ⚡ | Simulation | take_fsl_f16_random[16, 100] |
179.5 µs | 118.2 µs | +51.81% |
| ⚡ | WallTime | filtered_sink_i64_avx512[OneNullInEight] |
26.5 µs | 22.5 µs | +17.91% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing Ecthlion:add-is-nan-expression (265eb6d) with develop (a542cbd)
Footnotes
-
293 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
Signed-off-by: Yuyun Zhang <1252232014@qq.com>
Summary
Adds the
IS NANexpression called out in #9913, implemented as a strictRowFnas suggested in the issue: null inputs propagate to null outputs (output nullability follows the input), and only primitive float inputs are accepted.Changes
vortex.is_nanscalar function invortex-arrayimplemented with theRowFnrow-wise kernel framework, registered in the scalar fn session and exposed asexpr::is_nan/expr::bound::is_nan.is_nullrules so the predicate prunes from zone maps:nan_count(x) = 0orall_non_nan(x)nan_count(x) = row_count()orall_nan(x)AI disclosure: this change was developed with assistance from Kimi K3.