Skip to content

perf(arrow-arith): vectorize checked integer add, sub and mul - #12058

Open
mbutrovich wants to merge 6 commits into
apache:mainfrom
mbutrovich:vectorize-checked-arithmetic
Open

mbutrovich wants to merge 6 commits into
apache:mainfrom
mbutrovich:vectorize-checked-arithmetic

Conversation

@mbutrovich

@mbutrovich mbutrovich commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

N/A.

Rationale for this change

Checked add, sub and mul on integers call try_binary or try_unary, which return at the first overflow, so LLVM doesn't vectorize them. DataFusion calls them when fail_on_overflow is set (binary.rs), and Comet calls them for Spark's ANSI mode (checked_arithmetic.rs).

What changes are included in this PR?

  • Integer add, sub and mul compute the wrapping result and an overflow flag for every slot in one pass.
  • If a slot overflowed and the result has nulls, they recompute the overflow of every row into a bitmap and mask it with the validity bits. They rerun the existing checked kernel only if a valid row overflowed, so errors don't change. An overflow in a null slot, such as unsigned 0 - 1 in a slot that a builder filled with 0, doesn't rerun the batch.
  • Signed add and sub test sign bits, because the signed overflowing_add and overflowing_sub don't vectorize.
  • Signed i64 mul uses overflowing_mul, while the narrower signed types multiply in the next wider type. Widened to i128, the i64 multiply stayed a scalar imul while LLVM packed each row's overflow flag into vector registers, and it measured 0.65x with x86-64-v3.
  • The pass writes into the Vec's spare capacity and calls set_len with the number of slots it wrote. With collect, LLVM sometimes left the loop inside collect out of line, where it loaded and stored the overflow flag on every row. perf(arrow-arith): vectorize checked decimal add, sub and mul #12062 measured that at 0.83x for rescaled Decimal128 add on Neoverse-V2. perf(arrow-arith): vectorize checked decimal add, sub and mul #12062 has the same helper.
  • The output is reserved with Vec::try_reserve_exact, so an allocation failure returns ArrowError::MemoryError.
  • Null slots of the result hold the wrapping result instead of zero, as they already do for add_wrapping.
  • 48ca288 adds the benchmark cases, so the benchmark bot can compare against it.

Are these changes tested?

New tests in arrow-arith/src/numeric.rs compare the kernels with the scalar checked operations at the edge values of every integer type. They run as arrays with and without nulls, as one-row slices, and with a scalar on either side. Another test moves one overflowing row through a 300-row batch, so that each lane of the vector loop and the scalar remainder hold it once.

checked-arith-bot-6035cda

The overflow cases are expected to be slower, because they pay for the new pass, the null-slot check, and then the checked kernel. With fail_on_overflow or ANSI mode, an overflow fails the query, so that cost is paid at most once per partition. A batch that overflows only in null slots pays for the pass and the null-slot check, and still beats main in the default-layout runs: int32_add_checked_null_slot_overflow measured 2.67x on Neoverse-V2, 1.36x on Xeon 8581C, and 2.76x with x86-64-v3. The lowest is uint64_add_checked_null_slot_overflow on Xeon 8581C, at 1.03x default and 0.86x aligned.

The extra pass also costs code size: 135 KiB for integer_op and the new helpers across the eight integer types, against 18.5 KiB before, in the thin-LTO bench binary on aarch64. The checked kernels that the fallback calls are unchanged.

Bot runs: Neoverse-V2 default and aligned, Xeon 8581C default and aligned, and Xeon 8581C with -C target-cpu=x86-64-v3 default and aligned. Those runs measured 8aa2750. 6035cda changes only the i64 multiply, and its Int64 runs are: Neoverse-V2 default and aligned, Xeon 8581C default and aligned, and x86-64-v3 default and aligned.

Are there any significant user-facing changes?

No.

AI Disclosure

I wrote this PR with help from Claude but understand and support the core approach, implementation, and test coverage.

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: "^int(32|64)_"

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: "^int(32|64)_"
  RUSTFLAGS: "-C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (9aed4ff) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (9aed4ff) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: "^int(32|64)_"
resources:
  arch: amd64

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (9aed4ff) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
resources:
  arch: amd64
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: "^int(32|64)_"
  RUSTFLAGS: "-C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6"
resources:
  arch: amd64

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (9aed4ff) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (9aed4ff) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int32_add(0)                            1.00    762.1±3.98ns        ? ?/sec    1.00    763.1±3.11ns        ? ?/sec
int32_add(0.1)                          1.00    882.7±2.66ns        ? ?/sec    1.01    895.6±3.19ns        ? ?/sec
int32_add_checked(0)                    6.53      8.4±0.01µs        ? ?/sec    1.00   1292.5±1.33ns        ? ?/sec
int32_add_checked(0.1)                  8.30     11.6±3.55µs        ? ?/sec    1.00   1397.2±1.83ns        ? ?/sec
int32_add_checked_null_slot_overflow    1.00     11.5±3.58µs        ? ?/sec    1.09     12.5±3.42µs        ? ?/sec
int32_add_checked_overflow              1.00      8.5±0.00µs        ? ?/sec    1.14      9.7±0.01µs        ? ?/sec
int32_add_checked_scalar(0)             6.67      8.6±0.00µs        ? ?/sec    1.00   1285.7±1.26ns        ? ?/sec
int32_add_checked_scalar(0.1)           11.05    14.3±0.03µs        ? ?/sec    1.00   1294.0±1.39ns        ? ?/sec
int32_multiply(0)                       1.00    763.2±3.61ns        ? ?/sec    1.00    762.8±3.16ns        ? ?/sec
int32_multiply(0.1)                     1.00    884.2±5.14ns        ? ?/sec    1.01    896.0±4.05ns        ? ?/sec
int32_multiply_checked(0)               3.35      8.4±0.01µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int32_multiply_checked(0.1)             4.42     11.6±3.56µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int32_subtract(0)                       1.07    819.5±4.16ns        ? ?/sec    1.00    762.5±2.89ns        ? ?/sec
int32_subtract(0.1)                     1.04    927.6±3.83ns        ? ?/sec    1.00    892.7±3.86ns        ? ?/sec
int32_subtract_checked(0)               6.56      8.4±0.00µs        ? ?/sec    1.00   1285.8±1.22ns        ? ?/sec
int32_subtract_checked(0.1)             8.50     11.8±3.36µs        ? ?/sec    1.00   1390.3±2.27ns        ? ?/sec
int64_add(0)                            1.01   1737.0±1.85ns        ? ?/sec    1.00   1720.8±2.02ns        ? ?/sec
int64_add(0.1)                          1.01   1868.8±2.03ns        ? ?/sec    1.00   1854.7±2.54ns        ? ?/sec
int64_add_checked(0)                    3.31      8.5±0.01µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int64_add_checked(0.1)                  5.71     15.3±0.10µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.00     15.1±0.09µs        ? ?/sec    1.13     17.0±0.64µs        ? ?/sec
int64_add_checked_overflow              1.00      8.7±0.00µs        ? ?/sec    1.27     11.1±0.00µs        ? ?/sec
int64_add_checked_scalar(0)             3.58      8.7±0.00µs        ? ?/sec    1.00      2.4±0.00µs        ? ?/sec
int64_add_checked_scalar(0.1)           5.39     13.2±0.10µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_multiply(0)                       1.01      4.3±0.00µs        ? ?/sec    1.00      4.3±0.00µs        ? ?/sec
int64_multiply(0.1)                     1.00      4.4±0.00µs        ? ?/sec    1.00      4.4±0.00µs        ? ?/sec
int64_multiply_checked(0)               1.20      8.5±0.00µs        ? ?/sec    1.00      7.0±0.11µs        ? ?/sec
int64_multiply_checked(0.1)             2.22     15.2±0.06µs        ? ?/sec    1.00      6.9±0.04µs        ? ?/sec
int64_subtract(0)                       1.01   1736.6±1.65ns        ? ?/sec    1.00   1722.4±1.78ns        ? ?/sec
int64_subtract(0.1)                     1.01   1877.4±2.39ns        ? ?/sec    1.00   1854.9±2.92ns        ? ?/sec
int64_subtract_checked(0)               3.29      8.5±0.01µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int64_subtract_checked(0.1)             5.72     15.2±0.06µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-r578ggp2-e53cf964-fxr7

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6612232713-4327-7rz94 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 295.1s
Peak memory 13.2 MiB
Avg memory 12.4 MiB
CPU user 292.1s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 320.1s
Peak memory 13.1 MiB
Avg memory 12.1 MiB
CPU user 313.4s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (9aed4ff) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int32_add(0)                            1.00    759.8±2.88ns        ? ?/sec    1.01    765.4±3.28ns        ? ?/sec
int32_add(0.1)                          1.00    890.0±7.72ns        ? ?/sec    1.01    896.2±3.64ns        ? ?/sec
int32_add_checked(0)                    6.51      8.4±0.01µs        ? ?/sec    1.00   1297.9±5.97ns        ? ?/sec
int32_add_checked(0.1)                  8.42     11.7±3.56µs        ? ?/sec    1.00   1395.4±1.98ns        ? ?/sec
int32_add_checked_null_slot_overflow    1.00     11.6±3.58µs        ? ?/sec    1.09     12.7±3.48µs        ? ?/sec
int32_add_checked_overflow              1.00      8.5±0.00µs        ? ?/sec    1.14      9.7±0.01µs        ? ?/sec
int32_add_checked_scalar(0)             6.67      8.6±0.01µs        ? ?/sec    1.00   1288.7±1.82ns        ? ?/sec
int32_add_checked_scalar(0.1)           11.11    14.4±0.15µs        ? ?/sec    1.00   1296.4±0.90ns        ? ?/sec
int32_multiply(0)                       1.00    759.1±3.72ns        ? ?/sec    1.00    761.5±3.59ns        ? ?/sec
int32_multiply(0.1)                     1.01    905.0±9.25ns        ? ?/sec    1.00    894.3±4.09ns        ? ?/sec
int32_multiply_checked(0)               3.35      8.5±0.00µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int32_multiply_checked(0.1)             4.54     11.9±3.36µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int32_subtract(0)                       1.00    759.8±3.14ns        ? ?/sec    1.02    775.8±2.19ns        ? ?/sec
int32_subtract(0.1)                     1.01    901.8±9.60ns        ? ?/sec    1.00    893.3±4.23ns        ? ?/sec
int32_subtract_checked(0)               6.53      8.4±0.01µs        ? ?/sec    1.00   1292.2±5.54ns        ? ?/sec
int32_subtract_checked(0.1)             8.46     11.8±3.57µs        ? ?/sec    1.00   1389.9±2.20ns        ? ?/sec
int64_add(0)                            1.00   1721.8±1.78ns        ? ?/sec    1.00   1721.3±2.23ns        ? ?/sec
int64_add(0.1)                          1.00   1857.0±3.46ns        ? ?/sec    1.00   1854.1±2.68ns        ? ?/sec
int64_add_checked(0)                    3.32      8.5±0.00µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int64_add_checked(0.1)                  5.70     15.3±0.12µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.00     15.2±0.07µs        ? ?/sec    1.13     17.2±0.61µs        ? ?/sec
int64_add_checked_overflow              1.00      8.7±0.03µs        ? ?/sec    1.27     11.1±0.02µs        ? ?/sec
int64_add_checked_scalar(0)             3.58      8.8±0.00µs        ? ?/sec    1.00      2.4±0.00µs        ? ?/sec
int64_add_checked_scalar(0.1)           5.35     13.2±0.12µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_multiply(0)                       1.00      4.3±0.00µs        ? ?/sec    1.00      4.3±0.00µs        ? ?/sec
int64_multiply(0.1)                     1.00      4.4±0.00µs        ? ?/sec    1.00      4.4±0.00µs        ? ?/sec
int64_multiply_checked(0)               1.22      8.5±0.01µs        ? ?/sec    1.00      7.0±0.00µs        ? ?/sec
int64_multiply_checked(0.1)             2.16     15.2±0.05µs        ? ?/sec    1.00      7.1±0.00µs        ? ?/sec
int64_subtract(0)                       1.00   1719.2±1.79ns        ? ?/sec    1.00   1722.6±2.46ns        ? ?/sec
int64_subtract(0.1)                     1.00   1862.1±2.79ns        ? ?/sec    1.00   1854.4±2.63ns        ? ?/sec
int64_subtract_checked(0)               3.28      8.5±0.00µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int64_subtract_checked(0.1)             5.71     15.2±0.07µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-c569p8q0-736ab66c-rp2l

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6612234014-4328-c7xxx 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 310.1s
Peak memory 14.4 MiB
Avg memory 13.4 MiB
CPU user 305.1s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 320.1s
Peak memory 14.4 MiB
Avg memory 13.5 MiB
CPU user 317.4s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (9aed4ff) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
resources:
  arch: amd64
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int32_add(0)                            1.02   934.8±52.29ns        ? ?/sec    1.00   912.4±18.60ns        ? ?/sec
int32_add(0.1)                          1.03  1091.8±29.49ns        ? ?/sec    1.00  1058.4±30.44ns        ? ?/sec
int32_add_checked(0)                    6.34      8.1±0.20µs        ? ?/sec    1.00  1271.3±39.02ns        ? ?/sec
int32_add_checked(0.1)                  6.65      9.1±0.88µs        ? ?/sec    1.00  1368.5±47.37ns        ? ?/sec
int32_add_checked_null_slot_overflow    1.00      9.0±1.02µs        ? ?/sec    1.11     10.0±0.97µs        ? ?/sec
int32_add_checked_overflow              1.00      6.6±1.00µs        ? ?/sec    1.12      7.4±1.10µs        ? ?/sec
int32_add_checked_scalar(0)             5.59      6.6±0.99µs        ? ?/sec    1.00  1187.4±29.75ns        ? ?/sec
int32_add_checked_scalar(0.1)           7.68      9.0±0.33µs        ? ?/sec    1.00  1167.4±20.43ns        ? ?/sec
int32_multiply(0)                       1.02  1461.7±65.73ns        ? ?/sec    1.00  1438.2±72.99ns        ? ?/sec
int32_multiply(0.1)                     1.03  1623.5±51.40ns        ? ?/sec    1.00  1583.3±44.14ns        ? ?/sec
int32_multiply_checked(0)               2.44      8.1±0.28µs        ? ?/sec    1.00      3.3±0.05µs        ? ?/sec
int32_multiply_checked(0.1)             2.67      9.1±0.92µs        ? ?/sec    1.00      3.4±0.08µs        ? ?/sec
int32_subtract(0)                       1.00   902.2±21.33ns        ? ?/sec    1.03   931.9±39.86ns        ? ?/sec
int32_subtract(0.1)                     1.03  1085.0±31.85ns        ? ?/sec    1.00  1048.3±20.01ns        ? ?/sec
int32_subtract_checked(0)               6.39      8.1±0.19µs        ? ?/sec    1.00  1271.8±24.37ns        ? ?/sec
int32_subtract_checked(0.1)             6.87      9.2±0.96µs        ? ?/sec    1.00  1340.5±36.09ns        ? ?/sec
int64_add(0)                            1.00  1667.5±44.89ns        ? ?/sec    1.00  1659.7±48.94ns        ? ?/sec
int64_add(0.1)                          1.00  1851.8±73.99ns        ? ?/sec    1.00  1849.2±59.33ns        ? ?/sec
int64_add_checked(0)                    3.40      9.0±0.25µs        ? ?/sec    1.00      2.7±0.12µs        ? ?/sec
int64_add_checked(0.1)                  3.69     10.3±0.90µs        ? ?/sec    1.00      2.8±0.06µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.00     10.4±0.93µs        ? ?/sec    1.25     13.0±0.98µs        ? ?/sec
int64_add_checked_overflow              1.00      8.3±1.17µs        ? ?/sec    1.32     10.9±1.04µs        ? ?/sec
int64_add_checked_scalar(0)             3.20      8.3±1.19µs        ? ?/sec    1.00      2.6±0.06µs        ? ?/sec
int64_add_checked_scalar(0.1)           4.06     10.7±0.53µs        ? ?/sec    1.00      2.6±0.08µs        ? ?/sec
int64_multiply(0)                       1.01      3.3±0.09µs        ? ?/sec    1.00      3.3±0.05µs        ? ?/sec
int64_multiply(0.1)                     1.00      3.4±0.10µs        ? ?/sec    1.00      3.4±0.11µs        ? ?/sec
int64_multiply_checked(0)               1.40      9.0±0.49µs        ? ?/sec    1.00      6.4±0.18µs        ? ?/sec
int64_multiply_checked(0.1)             1.24     10.2±0.94µs        ? ?/sec    1.00      8.2±0.25µs        ? ?/sec
int64_subtract(0)                       1.00  1650.9±31.92ns        ? ?/sec    1.01  1662.1±32.65ns        ? ?/sec
int64_subtract(0.1)                     1.02  1858.7±71.60ns        ? ?/sec    1.00  1824.9±53.76ns        ? ?/sec
int64_subtract_checked(0)               3.41      8.9±0.22µs        ? ?/sec    1.00      2.6±0.13µs        ? ?/sec
int64_subtract_checked(0.1)             3.71     10.2±1.04µs        ? ?/sec    1.00      2.7±0.11µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1bfdro2s-3785b8c4-c2s7

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6612236329-4329-hg7l4 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 315.1s
Peak memory 14.0 MiB
Avg memory 13.5 MiB
CPU user 312.2s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 315.1s
Peak memory 14.6 MiB
Avg memory 14.0 MiB
CPU user 309.4s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: "^int(32|64)_"
  RUSTFLAGS: "-C target-cpu=x86-64-v3"
resources:
  arch: amd64

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (e8dc19e) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
  RUSTFLAGS: -C target-cpu=x86-64-v3
resources:
  arch: amd64
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: "^int(32|64)_"
  RUSTFLAGS: "-C target-cpu=x86-64-v3 -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6"
resources:
  arch: amd64

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (e8dc19e) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
  RUSTFLAGS: -C target-cpu=x86-64-v3 -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (9aed4ff) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int32_add(0)                            1.00  1048.2±46.55ns        ? ?/sec    1.04  1092.7±17.84ns        ? ?/sec
int32_add(0.1)                          1.00  1232.9±45.99ns        ? ?/sec    1.02  1252.5±26.29ns        ? ?/sec
int32_add_checked(0)                    6.22      9.4±0.13µs        ? ?/sec    1.00  1506.9±30.86ns        ? ?/sec
int32_add_checked(0.1)                  6.36     10.4±0.84µs        ? ?/sec    1.00  1639.9±23.85ns        ? ?/sec
int32_add_checked_null_slot_overflow    1.00     10.3±0.87µs        ? ?/sec    1.18     12.1±0.80µs        ? ?/sec
int32_add_checked_overflow              1.00      7.1±1.28µs        ? ?/sec    1.23      8.7±1.27µs        ? ?/sec
int32_add_checked_scalar(0)             5.30      7.4±1.18µs        ? ?/sec    1.00  1403.6±33.90ns        ? ?/sec
int32_add_checked_scalar(0.1)           6.92      9.7±0.50µs        ? ?/sec    1.00  1399.4±28.38ns        ? ?/sec
int32_multiply(0)                       1.00  1633.6±68.55ns        ? ?/sec    1.04  1705.5±33.35ns        ? ?/sec
int32_multiply(0.1)                     1.00  1834.9±74.16ns        ? ?/sec    1.03  1895.0±25.40ns        ? ?/sec
int32_multiply_checked(0)               2.24      8.8±0.40µs        ? ?/sec    1.00      3.9±0.07µs        ? ?/sec
int32_multiply_checked(0.1)             2.77     11.3±1.46µs        ? ?/sec    1.00      4.1±0.13µs        ? ?/sec
int32_subtract(0)                       1.00  1065.4±22.65ns        ? ?/sec    1.00  1070.7±27.31ns        ? ?/sec
int32_subtract(0.1)                     1.00  1243.2±46.67ns        ? ?/sec    1.01  1253.7±17.63ns        ? ?/sec
int32_subtract_checked(0)               6.00      9.1±0.41µs        ? ?/sec    1.00  1524.2±38.73ns        ? ?/sec
int32_subtract_checked(0.1)             6.63     10.7±0.85µs        ? ?/sec    1.00  1607.5±50.89ns        ? ?/sec
int64_add(0)                            1.00  1908.2±60.57ns        ? ?/sec    1.04  1984.7±23.34ns        ? ?/sec
int64_add(0.1)                          1.00      2.1±0.08µs        ? ?/sec    1.06      2.2±0.04µs        ? ?/sec
int64_add_checked(0)                    3.33     10.4±0.22µs        ? ?/sec    1.00      3.1±0.04µs        ? ?/sec
int64_add_checked(0.1)                  3.60     11.9±1.01µs        ? ?/sec    1.00      3.3±0.07µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.00     12.8±1.12µs        ? ?/sec    1.10     14.2±1.17µs        ? ?/sec
int64_add_checked_overflow              1.00      9.5±1.38µs        ? ?/sec    1.20     11.4±1.39µs        ? ?/sec
int64_add_checked_scalar(0)             2.94      9.2±1.31µs        ? ?/sec    1.00      3.1±0.05µs        ? ?/sec
int64_add_checked_scalar(0.1)           3.87     12.0±0.57µs        ? ?/sec    1.00      3.1±0.05µs        ? ?/sec
int64_multiply(0)                       1.00      3.8±0.14µs        ? ?/sec    1.02      3.9±0.05µs        ? ?/sec
int64_multiply(0.1)                     1.02      4.1±0.05µs        ? ?/sec    1.00      4.1±0.07µs        ? ?/sec
int64_multiply_checked(0)               1.28      9.8±0.51µs        ? ?/sec    1.00      7.7±0.20µs        ? ?/sec
int64_multiply_checked(0.1)             1.31     12.3±1.10µs        ? ?/sec    1.00      9.4±0.45µs        ? ?/sec
int64_subtract(0)                       1.00  1933.9±66.68ns        ? ?/sec    1.04      2.0±0.04µs        ? ?/sec
int64_subtract(0.1)                     1.00      2.1±0.07µs        ? ?/sec    1.03      2.2±0.04µs        ? ?/sec
int64_subtract_checked(0)               3.44     10.5±0.27µs        ? ?/sec    1.00      3.1±0.06µs        ? ?/sec
int64_subtract_checked(0.1)             3.65     11.9±1.21µs        ? ?/sec    1.00      3.3±0.06µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1bfdro2s-44db1d15-szrn

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6612238064-4330-2hwfx 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 330.1s
Peak memory 15.4 MiB
Avg memory 14.6 MiB
CPU user 323.0s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 305.1s
Peak memory 15.6 MiB
Avg memory 14.9 MiB
CPU user 299.3s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (e8dc19e) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
  RUSTFLAGS: -C target-cpu=x86-64-v3
resources:
  arch: amd64
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int32_add(0)                            1.00   869.7±24.21ns        ? ?/sec    1.00   866.7±14.92ns        ? ?/sec
int32_add(0.1)                          1.00   995.8±27.79ns        ? ?/sec    1.10  1090.6±25.64ns        ? ?/sec
int32_add_checked(0)                    6.97      8.1±0.26µs        ? ?/sec    1.00  1162.2±44.36ns        ? ?/sec
int32_add_checked(0.1)                  7.60      9.3±0.69µs        ? ?/sec    1.00  1223.4±30.50ns        ? ?/sec
int32_add_checked_null_slot_overflow    1.08     10.5±1.10µs        ? ?/sec    1.00      9.7±0.85µs        ? ?/sec
int32_add_checked_overflow              1.05      8.5±0.80µs        ? ?/sec    1.00      8.1±0.15µs        ? ?/sec
int32_add_checked_scalar(0)             8.43      7.3±0.14µs        ? ?/sec    1.00   867.5±18.98ns        ? ?/sec
int32_add_checked_scalar(0.1)           10.33     9.1±0.30µs        ? ?/sec    1.00   878.2±17.87ns        ? ?/sec
int32_multiply(0)                       1.03   908.2±24.62ns        ? ?/sec    1.00   878.4±14.43ns        ? ?/sec
int32_multiply(0.1)                     1.07  1188.0±36.81ns        ? ?/sec    1.00  1115.1±41.15ns        ? ?/sec
int32_multiply_checked(0)               3.03      8.2±0.25µs        ? ?/sec    1.00      2.7±0.05µs        ? ?/sec
int32_multiply_checked(0.1)             3.88     10.9±0.86µs        ? ?/sec    1.00      2.8±0.06µs        ? ?/sec
int32_subtract(0)                       1.00   850.5±15.76ns        ? ?/sec    1.02   867.0±13.89ns        ? ?/sec
int32_subtract(0.1)                     1.00  1013.8±45.85ns        ? ?/sec    1.08  1091.6±25.01ns        ? ?/sec
int32_subtract_checked(0)               7.28      8.2±0.29µs        ? ?/sec    1.00  1124.2±19.12ns        ? ?/sec
int32_subtract_checked(0.1)             7.96      9.6±0.90µs        ? ?/sec    1.00  1210.8±28.36ns        ? ?/sec
int64_add(0)                            1.22  1903.2±57.75ns        ? ?/sec    1.00  1557.0±38.82ns        ? ?/sec
int64_add(0.1)                          1.03  1993.3±46.97ns        ? ?/sec    1.00  1932.4±61.03ns        ? ?/sec
int64_add_checked(0)                    4.24      9.0±0.29µs        ? ?/sec    1.00      2.1±0.06µs        ? ?/sec
int64_add_checked(0.1)                  4.56     10.2±0.94µs        ? ?/sec    1.00      2.2±0.06µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.00     10.4±0.88µs        ? ?/sec    1.21     12.6±0.87µs        ? ?/sec
int64_add_checked_overflow              1.00      9.2±0.26µs        ? ?/sec    1.17     10.7±0.22µs        ? ?/sec
int64_add_checked_scalar(0)             5.57      9.3±0.41µs        ? ?/sec    1.00  1674.2±33.72ns        ? ?/sec
int64_add_checked_scalar(0.1)           5.74     10.4±0.32µs        ? ?/sec    1.00  1818.9±56.93ns        ? ?/sec
int64_multiply(0)                       1.02  1978.6±43.61ns        ? ?/sec    1.00  1947.4±69.27ns        ? ?/sec
int64_multiply(0.1)                     1.05      2.2±0.16µs        ? ?/sec    1.00      2.1±0.06µs        ? ?/sec
int64_multiply_checked(0)               1.01      8.9±0.42µs        ? ?/sec    1.00      8.8±0.21µs        ? ?/sec
int64_multiply_checked(0.1)             1.20     10.2±0.99µs        ? ?/sec    1.00      8.5±0.23µs        ? ?/sec
int64_subtract(0)                       1.19  1864.5±44.48ns        ? ?/sec    1.00  1563.1±36.84ns        ? ?/sec
int64_subtract(0.1)                     1.04      2.0±0.06µs        ? ?/sec    1.00  1927.0±49.87ns        ? ?/sec
int64_subtract_checked(0)               4.15      8.8±0.24µs        ? ?/sec    1.00      2.1±0.07µs        ? ?/sec
int64_subtract_checked(0.1)             4.52     10.2±1.01µs        ? ?/sec    1.00      2.3±0.07µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1bfdro2s-3785b8c4-c2s7

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6612593396-4334-qmkb4 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 320.1s
Peak memory 14.2 MiB
Avg memory 13.6 MiB
CPU user 314.1s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 310.1s
Peak memory 14.7 MiB
Avg memory 14.1 MiB
CPU user 305.3s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (e8dc19e) to af931c5 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: af931c5b0b
env:
  BENCH_FILTER: ^int(32|64)_
  RUSTFLAGS: -C target-cpu=x86-64-v3 -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int32_add(0)                            1.01   878.0±42.15ns        ? ?/sec    1.00   870.5±19.42ns        ? ?/sec
int32_add(0.1)                          1.00   983.1±27.03ns        ? ?/sec    1.14  1118.4±48.48ns        ? ?/sec
int32_add_checked(0)                    6.82      7.8±0.18µs        ? ?/sec    1.00  1149.2±34.59ns        ? ?/sec
int32_add_checked(0.1)                  7.49      9.0±0.85µs        ? ?/sec    1.00  1197.7±29.95ns        ? ?/sec
int32_add_checked_null_slot_overflow    1.00      9.3±1.32µs        ? ?/sec    1.05      9.8±0.88µs        ? ?/sec
int32_add_checked_overflow              1.00      7.3±0.24µs        ? ?/sec    1.11      8.1±0.18µs        ? ?/sec
int32_add_checked_scalar(0)             8.42      7.3±0.25µs        ? ?/sec    1.00   868.1±20.56ns        ? ?/sec
int32_add_checked_scalar(0.1)           10.05     8.9±0.21µs        ? ?/sec    1.00   882.6±31.18ns        ? ?/sec
int32_multiply(0)                       1.00   892.3±25.46ns        ? ?/sec    1.01   902.0±24.93ns        ? ?/sec
int32_multiply(0.1)                     1.00  1001.9±23.95ns        ? ?/sec    1.11  1107.3±32.21ns        ? ?/sec
int32_multiply_checked(0)               2.89      7.9±0.11µs        ? ?/sec    1.00      2.7±0.08µs        ? ?/sec
int32_multiply_checked(0.1)             3.21      9.0±0.88µs        ? ?/sec    1.00      2.8±0.05µs        ? ?/sec
int32_subtract(0)                       1.00   853.8±24.79ns        ? ?/sec    1.03   882.2±24.93ns        ? ?/sec
int32_subtract(0.1)                     1.00   989.0±19.42ns        ? ?/sec    1.11  1100.9±33.46ns        ? ?/sec
int32_subtract_checked(0)               7.01      8.0±0.17µs        ? ?/sec    1.00  1134.3±25.27ns        ? ?/sec
int32_subtract_checked(0.1)             7.44      9.0±0.90µs        ? ?/sec    1.00  1204.9±26.93ns        ? ?/sec
int64_add(0)                            1.20  1879.8±31.84ns        ? ?/sec    1.00  1568.9±31.58ns        ? ?/sec
int64_add(0.1)                          1.05      2.0±0.06µs        ? ?/sec    1.00  1932.5±56.33ns        ? ?/sec
int64_add_checked(0)                    4.07      8.8±0.37µs        ? ?/sec    1.00      2.2±0.11µs        ? ?/sec
int64_add_checked(0.1)                  4.58     10.2±1.02µs        ? ?/sec    1.00      2.2±0.06µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.00     10.3±0.89µs        ? ?/sec    1.21     12.5±0.90µs        ? ?/sec
int64_add_checked_overflow              1.00      9.1±0.25µs        ? ?/sec    1.18     10.7±0.40µs        ? ?/sec
int64_add_checked_scalar(0)             5.42      9.2±0.31µs        ? ?/sec    1.00  1692.5±43.24ns        ? ?/sec
int64_add_checked_scalar(0.1)           5.81     10.6±0.49µs        ? ?/sec    1.00  1816.8±33.96ns        ? ?/sec
int64_multiply(0)                       1.03  1984.2±67.18ns        ? ?/sec    1.00  1934.6±48.92ns        ? ?/sec
int64_multiply(0.1)                     1.00      2.1±0.10µs        ? ?/sec    1.00      2.1±0.06µs        ? ?/sec
int64_multiply_checked(0)               1.02      8.9±0.35µs        ? ?/sec    1.00      8.8±0.20µs        ? ?/sec
int64_multiply_checked(0.1)             1.19     10.1±0.92µs        ? ?/sec    1.00      8.5±0.25µs        ? ?/sec
int64_subtract(0)                       1.21  1889.5±85.12ns        ? ?/sec    1.00  1561.5±35.03ns        ? ?/sec
int64_subtract(0.1)                     1.05      2.0±0.07µs        ? ?/sec    1.00  1929.1±50.41ns        ? ?/sec
int64_subtract_checked(0)               4.15      8.8±0.22µs        ? ?/sec    1.00      2.1±0.07µs        ? ?/sec
int64_subtract_checked(0.1)             4.91     11.1±1.05µs        ? ?/sec    1.00      2.3±0.07µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1bfdro2s-44db1d15-szrn

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6612595306-4335-sl29k 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 315.1s
Peak memory 15.3 MiB
Avg memory 14.7 MiB
CPU user 310.1s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 310.1s
Peak memory 15.5 MiB
Avg memory 14.9 MiB
CPU user 306.3s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@github-actions github-actions Bot added arrow-core Core crates related to representing arrow data arrow-kernels Crates that transform arrow data (e.g. compute, cast) labels Nov 3, 2026
@mbutrovich
mbutrovich marked this pull request as ready for review November 3, 2026 19:32
@mbutrovich
mbutrovich marked this pull request as draft November 3, 2026 19:37
@mbutrovich
mbutrovich marked this pull request as ready for review November 4, 2026 00:30
@mbutrovich
mbutrovich marked this pull request as draft November 7, 2026 15:11
@mbutrovich
mbutrovich marked this pull request as ready for review November 12, 2026 23:24

@sunchao sunchao left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 9a685cfe. The fork passed the arrow-arith debug and release tests. I left inline comments on fallible output allocation, replay for nullable unsigned subtraction, and coverage of the overflow reduction.

Comment thread arrow-arith/src/numeric.rs Outdated
overflow |= overflowed;
value
})
.collect();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this reserve the output buffer fallibly? For two nonempty arrays with no nulls, the current checked kernel maps allocation failure to ArrowError::MemoryError as part of #11912. If the allocator rejects the output allocation here, the infallible Vec collection can abort the process before the checked fallback runs. A fallible reservation in the fast path would preserve the caller's ability to handle that error.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this reserve the output buffer fallibly?

Yes. collect_overflowing now reserves with Vec::try_reserve_exact and returns ArrowError::MemoryError on failure, as try_binary_no_nulls does. That also makes the nullable and scalar paths fallible. The checked kernel still aborts there, through BufferBuilder::new in try_binary and vec! in PrimitiveArray::try_unary. The null-slot check that runs after a flagged pass allocates two bitmaps through BooleanBuffer::collect_bool, which aborts on failure. It runs only when the result has nulls, where try_binary allocates infallibly too.

Comment thread arrow-arith/src/numeric.rs Outdated
},
Op::SubWrapping => op!(l, l_s, r, r_s, l.sub_wrapping(r)),
Op::Sub => try_op!(l, l_s, r, r_s, l.sub_checked(r)),
Op::Sub => match overflowing_op(l, l_s, r, r_s, T::Native::sub_overflowing) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This forces a second pass for ordinary nullable unsigned subtraction. For example, UInt64 [10, null, 20] - 1 has a zero payload at the null row when built through PrimitiveBuilder. The first pass sees 0u64 - 1, fills and discards its output, and the checked kernel allocates again to return [9, null, 19]. This repeats on every batch with a null even when all valid rows succeed. Could you add a nullable UInt32 or UInt64 array-minus-scalar benchmark and avoid replay on this case? The current benchmark only exercises signed types.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add a nullable UInt32 or UInt64 array-minus-scalar benchmark and avoid replay on this case?

Both done. When a slot overflowed and the result has nulls, overflowing_op now recomputes the overflow of every row into a bitmap with BooleanBuffer::collect_bool and masks it with the validity bits. If no valid row overflowed, it returns the values from the first pass and doesn't call the checked kernel. test_checked_integer_slice_null_scalar_and_lengths checks your example, including that the builder wrote 0 into the null slot.

uint32_subtract_checked_scalar(0.1) and uint64_subtract_checked_scalar(0.1) measure it. uint32_subtract_checked(0.1) and uint64_subtract_checked(0.1) take the same path, because the left array's null slots hold 0 too. The uint32 and uint64 cases take their left operands from a higher range than their right operands, so valid rows never underflow. Against the bench commit, uint32_subtract_checked_scalar(0.1) measured 5.92x on Neoverse-V2, 1.17x on Xeon 8581C, and 2.20x with x86-64-v3. uint64_subtract_checked_scalar(0.1) measured 4.59x, 1.13x, and 2.31x.

Comment thread arrow-arith/src/numeric.rs Outdated
// for strides up to 64 rows.
for len in 1..=130 {
let mut values = vec![1; len];
values[len - 1] = i32::MAX;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could the overflow position vary independently of the batch length? With a full-vector loop followed by a scalar tail, len - 1 lands in the last lane of a full vector or in the tail. A missing overflow flag in an interior lane can pass this test. A fixed batch above the vectorization threshold with one overflowing row moved through the batch would cover that case, including the separate array–array loop. For the one-row edge checks, the current null mask also hides every signed RHS MAX because the signed edge list has 12 entries and MAX is at index 11. Sweeping the pairs without the mask would cover those cases.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could the overflow position vary independently of the batch length?

Yes. test_checked_integer_overflow_positions now moves one overflowing row through a 300-row batch for every integer type. It covers add, sub, and mul with the batch against an array and against a scalar, on either side, with that row valid and with it null. 300 rows cover two iterations of a 128-row loop (32 i8 lanes of AVX2, unrolled four times) plus a remainder. It's skipped under Miri, which doesn't run the vectorized code. With collect_overflowing changed to drop the flag on odd rows, it fails at row 1.

For the one-row edge checks, the current null mask also hides every signed RHS MAX because the signed edge list has 12 entries and MAX is at index 11.

Right. With 12 edges, row 12x + y is null exactly when y % 3 == 2. So the array-array and one-row checks never paired a valid left value with a right value of MIN / 2, 0, MAX / 2, or MAX. test_checked_integer_op now runs those checks with the mask and without it.

@andygrove andygrove left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this. Making the no-overflow path fast at the cost of a slower error path seems like the right trade-off to me. I checked the signed overflow detection, the widening multiply, slicing, scalar and null-scalar handling, and the length-mismatch fallback against the existing try_binary/try_unary behaviour, and they all look correct.

A few things to address:

1. Null slots now hold wrapped values instead of zero (numeric.rs:420)
try_unary/try_binary zero-fill null slots, while checked add/sub/mul now leave the wrapped result there. Nobody should be reading null slots, so this is fine, but please mention the behaviour change in the PR description.

2. Overflow in a null slot makes successful queries slower (numeric.rs:405)
Any overflow flag forces the fallback, including one from a null slot, even though the checked kernel would succeed. When inputs have extreme values in null slots, for example output from add_wrapping, every batch does the wrapping pass, allocates and drops the Vec, and reruns try_binary. That is slower than before this PR, as the null_slot_overflow benchmark shows. Could the overflow flag be masked with the validity bitmap before deciding to fall back? If that hurts vectorization, please at least list this case in the PR description as an input that gets slower.

3. Unsigned and Int64 mul (numeric.rs:376)
The comments say unsigned mul_overflowing stays scalar either way, and I'd expect the i64→i128 widening multiply not to vectorize either. If so, these types get the extra code size (97 KB vs 19 KB) and a second pass on overflow with little gain. Could you share benchmark numbers for them, or leave them on try_op!?

Smaller points / follow-ups

  • overflowing_op (numeric.rs:403) is a third copy of the scalar/array dispatch from op!/try_op!, and it already differs from try_binary: it uses nulls() rather than logical_nulls(), and there's no empty-array early return. Can it reuse the existing dispatch, or at least match it?
  • The fast path only covers integer_op (numeric.rs:579). Checked arithmetic on durations and timestamps, and direct try_binary(.., add_checked) callers, don't benefit. A generic helper in arity.rs could be a follow-up.
  • The speedup depends on #[inline(never)] on collect_overflowing keeping the overflow flag in a register (numeric.rs:450). A short comment explaining that, and pointing to the benchmark that would catch a regression, would help future readers.

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (8aa2750) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^u?int
shards: 1
Details
group                                    base                                   changed
-----                                    ----                                   -------
int32_add(0)                             1.00    755.2±5.31ns        ? ?/sec    1.08    817.1±1.71ns        ? ?/sec
int32_add(0.1)                           1.00    907.9±4.89ns        ? ?/sec    1.04    942.7±3.10ns        ? ?/sec
int32_add_checked(0)                     6.41      8.5±0.01µs        ? ?/sec    1.00   1320.1±2.95ns        ? ?/sec
int32_add_checked(0.1)                   7.29     10.4±3.17µs        ? ?/sec    1.00   1431.2±2.58ns        ? ?/sec
int32_add_checked_null_slot_overflow     2.68     11.5±3.58µs        ? ?/sec    1.00      4.3±0.01µs        ? ?/sec
int32_add_checked_overflow               1.00      8.5±0.01µs        ? ?/sec    1.14      9.7±0.01µs        ? ?/sec
int32_add_checked_scalar(0)              6.48      8.6±0.01µs        ? ?/sec    1.00   1324.5±1.37ns        ? ?/sec
int32_add_checked_scalar(0.1)            10.66    14.3±0.04µs        ? ?/sec    1.00   1337.3±2.49ns        ? ?/sec
int32_multiply(0)                        1.01    758.6±4.35ns        ? ?/sec    1.00    754.6±3.33ns        ? ?/sec
int32_multiply(0.1)                      1.00    900.7±4.05ns        ? ?/sec    1.00    898.2±5.79ns        ? ?/sec
int32_multiply_checked(0)                3.29      8.5±0.01µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int32_multiply_checked(0.1)              3.98     10.6±2.98µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec
int32_subtract(0)                        1.01    757.1±4.83ns        ? ?/sec    1.00    753.0±3.36ns        ? ?/sec
int32_subtract(0.1)                      1.00    896.8±4.88ns        ? ?/sec    1.00    897.1±3.54ns        ? ?/sec
int32_subtract_checked(0)                6.42      8.5±0.01µs        ? ?/sec    1.00   1321.4±2.09ns        ? ?/sec
int32_subtract_checked(0.1)              7.30     10.4±3.16µs        ? ?/sec    1.00   1431.7±2.76ns        ? ?/sec
int32_subtract_checked_scalar(0)         6.55      8.6±0.01µs        ? ?/sec    1.00   1310.3±0.73ns        ? ?/sec
int32_subtract_checked_scalar(0.1)       10.79    14.3±0.04µs        ? ?/sec    1.00   1324.7±1.45ns        ? ?/sec
int64_add(0)                             1.00   1736.7±1.62ns        ? ?/sec    1.00   1733.5±2.20ns        ? ?/sec
int64_add(0.1)                           1.00   1867.2±3.65ns        ? ?/sec    1.00  1871.8±12.92ns        ? ?/sec
int64_add_checked(0)                     3.25      8.5±0.01µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int64_add_checked(0.1)                   5.00     13.6±0.09µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec
int64_add_checked_null_slot_overflow     2.28     14.9±0.24µs        ? ?/sec    1.00      6.5±0.00µs        ? ?/sec
int64_add_checked_overflow               1.00      8.7±0.01µs        ? ?/sec    1.27     11.1±0.01µs        ? ?/sec
int64_add_checked_scalar(0)              3.53      8.8±0.01µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_add_checked_scalar(0.1)            5.32     13.2±0.13µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_multiply(0)                        1.00      4.3±0.00µs        ? ?/sec    1.00      4.3±0.00µs        ? ?/sec
int64_multiply(0.1)                      1.00      4.4±0.00µs        ? ?/sec    1.00      4.4±0.00µs        ? ?/sec
int64_multiply_checked(0)                1.21      8.5±0.00µs        ? ?/sec    1.00      7.0±0.01µs        ? ?/sec
int64_multiply_checked(0.1)              1.92     13.7±0.09µs        ? ?/sec    1.00      7.1±0.00µs        ? ?/sec
int64_subtract(0)                        1.01   1744.7±1.40ns        ? ?/sec    1.00   1734.4±2.15ns        ? ?/sec
int64_subtract(0.1)                      1.00   1865.0±2.21ns        ? ?/sec    1.00   1868.4±1.64ns        ? ?/sec
int64_subtract_checked(0)                3.21      8.5±0.01µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int64_subtract_checked(0.1)              5.00     13.6±0.12µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec
int64_subtract_checked_scalar(0)         3.56      8.8±0.01µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_subtract_checked_scalar(0.1)       5.35     13.2±0.08µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
uint32_add(0)                            1.00    771.3±8.64ns        ? ?/sec    1.00    768.2±6.51ns        ? ?/sec
uint32_add(0.1)                          1.00    905.1±3.37ns        ? ?/sec    1.01    917.3±3.80ns        ? ?/sec
uint32_add_checked(0)                    9.91      8.5±0.01µs        ? ?/sec    1.00    853.0±3.13ns        ? ?/sec
uint32_add_checked(0.1)                  10.68    10.4±3.16µs        ? ?/sec    1.00    975.6±2.60ns        ? ?/sec
uint32_add_checked_null_slot_overflow    3.87     11.5±3.59µs        ? ?/sec    1.00      3.0±0.00µs        ? ?/sec
uint32_add_checked_overflow              1.00      8.5±0.01µs        ? ?/sec    1.08      9.2±0.01µs        ? ?/sec
uint32_add_checked_scalar(0)             11.03     8.6±0.01µs        ? ?/sec    1.00    777.6±2.21ns        ? ?/sec
uint32_add_checked_scalar(0.1)           18.17    14.4±0.16µs        ? ?/sec    1.00    793.0±1.76ns        ? ?/sec
uint32_multiply(0)                       1.00    771.6±5.14ns        ? ?/sec    1.07    824.6±3.11ns        ? ?/sec
uint32_multiply(0.1)                     1.00    897.1±3.54ns        ? ?/sec    1.07    955.5±2.92ns        ? ?/sec
uint32_multiply_checked(0)               1.51      8.5±0.01µs        ? ?/sec    1.00      5.6±0.19µs        ? ?/sec
uint32_multiply_checked(0.1)             1.80     10.6±2.98µs        ? ?/sec    1.00      5.9±0.01µs        ? ?/sec
uint32_subtract(0)                       1.00    771.9±3.26ns        ? ?/sec    1.01    780.2±5.00ns        ? ?/sec
uint32_subtract(0.1)                     1.00    900.6±3.39ns        ? ?/sec    1.01    906.7±4.26ns        ? ?/sec
uint32_subtract_checked(0)               9.97      8.5±0.01µs        ? ?/sec    1.00    849.5±2.66ns        ? ?/sec
uint32_subtract_checked(0.1)             3.70     10.4±3.17µs        ? ?/sec    1.00      2.8±0.00µs        ? ?/sec
uint32_subtract_checked_scalar(0)        11.21     8.6±0.00µs        ? ?/sec    1.00    765.5±0.95ns        ? ?/sec
uint32_subtract_checked_scalar(0.1)      5.88     14.2±0.04µs        ? ?/sec    1.00      2.4±0.01µs        ? ?/sec
uint64_add(0)                            1.00   1559.0±1.54ns        ? ?/sec    1.11   1724.5±2.21ns        ? ?/sec
uint64_add(0.1)                          1.00   1718.8±1.91ns        ? ?/sec    1.08   1859.5±1.53ns        ? ?/sec
uint64_add_checked(0)                    4.55      8.5±0.01µs        ? ?/sec    1.00   1861.0±2.40ns        ? ?/sec
uint64_add_checked(0.1)                  6.75     13.4±0.46µs        ? ?/sec    1.00   1987.5±3.08ns        ? ?/sec
uint64_add_checked_null_slot_overflow    2.98     14.9±0.40µs        ? ?/sec    1.00      5.0±0.00µs        ? ?/sec
uint64_add_checked_overflow              1.00      8.7±0.01µs        ? ?/sec    1.15     10.0±0.01µs        ? ?/sec
uint64_add_checked_scalar(0)             6.24      8.7±0.01µs        ? ?/sec    1.00   1400.9±3.19ns        ? ?/sec
uint64_add_checked_scalar(0.1)           9.39     13.3±0.10µs        ? ?/sec    1.00   1412.5±4.12ns        ? ?/sec
uint64_multiply(0)                       1.00      4.3±0.00µs        ? ?/sec    1.00      4.3±0.00µs        ? ?/sec
uint64_multiply(0.1)                     1.00      4.4±0.01µs        ? ?/sec    1.00      4.4±0.00µs        ? ?/sec
uint64_multiply_checked(0)               1.26      8.5±0.01µs        ? ?/sec    1.00      6.7±0.01µs        ? ?/sec
uint64_multiply_checked(0.1)             1.96     13.4±0.57µs        ? ?/sec    1.00      6.8±0.00µs        ? ?/sec
uint64_subtract(0)                       1.00   1562.8±1.82ns        ? ?/sec    1.10   1725.1±1.54ns        ? ?/sec
uint64_subtract(0.1)                     1.00   1711.1±1.79ns        ? ?/sec    1.09   1859.6±1.75ns        ? ?/sec
uint64_subtract_checked(0)               4.61      8.5±0.01µs        ? ?/sec    1.00   1837.6±2.13ns        ? ?/sec
uint64_subtract_checked(0.1)             2.65     13.6±0.19µs        ? ?/sec    1.00      5.1±0.01µs        ? ?/sec
uint64_subtract_checked_scalar(0)        6.15      8.8±0.01µs        ? ?/sec    1.00   1424.1±2.04ns        ? ?/sec
uint64_subtract_checked_scalar(0.1)      4.54     13.3±0.13µs        ? ?/sec    1.00      2.9±0.00µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-ez8gwx9u-593cc0f5-qcgr

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6863047652-5027-qjj6v 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 660.1s
Peak memory 14.1 MiB
Avg memory 13.7 MiB
CPU user 653.4s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 690.1s
Peak memory 14.2 MiB
Avg memory 13.8 MiB
CPU user 688.8s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (8aa2750) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^u?int
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
shards: 1
Details
group                                    base                                   changed
-----                                    ----                                   -------
int32_add(0)                             1.00    749.6±4.03ns        ? ?/sec    1.00    750.9±4.79ns        ? ?/sec
int32_add(0.1)                           1.02    919.6±5.84ns        ? ?/sec    1.00    903.4±3.94ns        ? ?/sec
int32_add_checked(0)                     6.37      8.5±0.01µs        ? ?/sec    1.00   1327.4±4.94ns        ? ?/sec
int32_add_checked(0.1)                   7.34     10.6±3.17µs        ? ?/sec    1.00   1441.7±4.25ns        ? ?/sec
int32_add_checked_null_slot_overflow     2.71     11.6±3.56µs        ? ?/sec    1.00      4.3±0.01µs        ? ?/sec
int32_add_checked_overflow               1.00      8.5±0.01µs        ? ?/sec    1.14      9.7±0.01µs        ? ?/sec
int32_add_checked_scalar(0)              6.51      8.6±0.01µs        ? ?/sec    1.00   1318.8±1.40ns        ? ?/sec
int32_add_checked_scalar(0.1)            10.71    14.2±0.04µs        ? ?/sec    1.00   1329.9±1.85ns        ? ?/sec
int32_multiply(0)                        1.01    763.4±8.21ns        ? ?/sec    1.00    756.0±3.70ns        ? ?/sec
int32_multiply(0.1)                      1.01    912.3±9.14ns        ? ?/sec    1.00    907.0±3.78ns        ? ?/sec
int32_multiply_checked(0)                3.29      8.5±0.03µs        ? ?/sec    1.00      2.6±0.01µs        ? ?/sec
int32_multiply_checked(0.1)              4.01     10.8±2.98µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec
int32_subtract(0)                        1.01    761.9±6.43ns        ? ?/sec    1.00    754.8±4.32ns        ? ?/sec
int32_subtract(0.1)                      1.01    914.5±7.04ns        ? ?/sec    1.00    905.8±3.18ns        ? ?/sec
int32_subtract_checked(0)                6.40      8.5±0.01µs        ? ?/sec    1.00   1324.7±3.02ns        ? ?/sec
int32_subtract_checked(0.1)              7.35     10.6±3.18µs        ? ?/sec    1.00   1441.6±4.52ns        ? ?/sec
int32_subtract_checked_scalar(0)         6.54      8.6±0.01µs        ? ?/sec    1.00   1313.5±1.80ns        ? ?/sec
int32_subtract_checked_scalar(0.1)       10.90    14.3±0.05µs        ? ?/sec    1.00   1314.3±1.55ns        ? ?/sec
int64_add(0)                             1.00   1742.6±4.89ns        ? ?/sec    1.00   1736.9±2.33ns        ? ?/sec
int64_add(0.1)                           1.00   1871.8±3.80ns        ? ?/sec    1.00   1871.5±1.62ns        ? ?/sec
int64_add_checked(0)                     3.24      8.5±0.01µs        ? ?/sec    1.00      2.6±0.01µs        ? ?/sec
int64_add_checked(0.1)                   4.96     13.6±0.08µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec
int64_add_checked_null_slot_overflow     2.27     14.9±0.27µs        ? ?/sec    1.00      6.5±0.01µs        ? ?/sec
int64_add_checked_overflow               1.00      8.7±0.02µs        ? ?/sec    1.27     11.1±0.01µs        ? ?/sec
int64_add_checked_scalar(0)              3.54      8.8±0.01µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_add_checked_scalar(0.1)            5.28     13.1±0.07µs        ? ?/sec    1.00      2.5±0.01µs        ? ?/sec
int64_multiply(0)                        1.00      4.3±0.01µs        ? ?/sec    1.00      4.3±0.00µs        ? ?/sec
int64_multiply(0.1)                      1.00      4.4±0.00µs        ? ?/sec    1.01      4.4±0.01µs        ? ?/sec
int64_multiply_checked(0)                1.21      8.5±0.01µs        ? ?/sec    1.00      7.0±0.01µs        ? ?/sec
int64_multiply_checked(0.1)              1.90     13.6±0.07µs        ? ?/sec    1.00      7.1±0.01µs        ? ?/sec
int64_subtract(0)                        1.01   1751.3±5.05ns        ? ?/sec    1.00   1738.3±4.68ns        ? ?/sec
int64_subtract(0.1)                      1.00   1873.1±4.13ns        ? ?/sec    1.00   1871.5±3.83ns        ? ?/sec
int64_subtract_checked(0)                3.21      8.5±0.01µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int64_subtract_checked(0.1)              4.98     13.6±0.06µs        ? ?/sec    1.00      2.7±0.01µs        ? ?/sec
int64_subtract_checked_scalar(0)         3.56      8.8±0.01µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_subtract_checked_scalar(0.1)       5.36     13.3±0.11µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
uint32_add(0)                            1.01    776.8±8.75ns        ? ?/sec    1.00   770.7±10.62ns        ? ?/sec
uint32_add(0.1)                          1.00    910.2±5.98ns        ? ?/sec    1.01    917.2±3.08ns        ? ?/sec
uint32_add_checked(0)                    9.92      8.5±0.01µs        ? ?/sec    1.00    854.1±2.56ns        ? ?/sec
uint32_add_checked(0.1)                  10.77    10.6±3.16µs        ? ?/sec    1.00    979.7±3.35ns        ? ?/sec
uint32_add_checked_null_slot_overflow    3.88     11.6±3.57µs        ? ?/sec    1.00      3.0±0.01µs        ? ?/sec
uint32_add_checked_overflow              1.00      8.5±0.03µs        ? ?/sec    1.08      9.2±0.00µs        ? ?/sec
uint32_add_checked_scalar(0)             11.06     8.6±0.01µs        ? ?/sec    1.00    777.1±2.29ns        ? ?/sec
uint32_add_checked_scalar(0.1)           18.21    14.4±0.12µs        ? ?/sec    1.00    788.7±1.24ns        ? ?/sec
uint32_multiply(0)                       1.01    776.2±8.88ns        ? ?/sec    1.00    768.6±5.56ns        ? ?/sec
uint32_multiply(0.1)                     1.00    906.7±5.82ns        ? ?/sec    1.00    907.6±4.45ns        ? ?/sec
uint32_multiply_checked(0)               1.47      8.5±0.01µs        ? ?/sec    1.00      5.8±0.01µs        ? ?/sec
uint32_multiply_checked(0.1)             1.83     10.8±2.98µs        ? ?/sec    1.00      5.9±0.00µs        ? ?/sec
uint32_subtract(0)                       1.00    781.3±8.31ns        ? ?/sec    1.00    777.6±8.53ns        ? ?/sec
uint32_subtract(0.1)                     1.00    908.0±5.71ns        ? ?/sec    1.00    906.0±3.55ns        ? ?/sec
uint32_subtract_checked(0)               9.99      8.5±0.01µs        ? ?/sec    1.00    852.7±2.67ns        ? ?/sec
uint32_subtract_checked(0.1)             3.73     10.6±3.18µs        ? ?/sec    1.00      2.8±0.01µs        ? ?/sec
uint32_subtract_checked_scalar(0)        11.22     8.6±0.01µs        ? ?/sec    1.00    764.9±1.71ns        ? ?/sec
uint32_subtract_checked_scalar(0.1)      5.88     14.3±0.04µs        ? ?/sec    1.00      2.4±0.01µs        ? ?/sec
uint64_add(0)                            1.00   1566.4±7.72ns        ? ?/sec    1.10   1726.5±2.50ns        ? ?/sec
uint64_add(0.1)                          1.00   1723.8±3.37ns        ? ?/sec    1.08   1858.9±1.77ns        ? ?/sec
uint64_add_checked(0)                    4.55      8.5±0.02µs        ? ?/sec    1.00   1864.7±3.74ns        ? ?/sec
uint64_add_checked(0.1)                  6.65     13.2±0.52µs        ? ?/sec    1.00   1988.1±3.57ns        ? ?/sec
uint64_add_checked_null_slot_overflow    2.93     14.6±0.52µs        ? ?/sec    1.00      5.0±0.01µs        ? ?/sec
uint64_add_checked_overflow              1.00      8.7±0.02µs        ? ?/sec    1.15     10.0±0.01µs        ? ?/sec
uint64_add_checked_scalar(0)             6.25      8.8±0.02µs        ? ?/sec    1.00   1402.3±3.97ns        ? ?/sec
uint64_add_checked_scalar(0.1)           9.44     13.4±0.13µs        ? ?/sec    1.00   1414.9±4.09ns        ? ?/sec
uint64_multiply(0)                       1.00      4.3±0.01µs        ? ?/sec    1.00      4.3±0.00µs        ? ?/sec
uint64_multiply(0.1)                     1.00      4.4±0.00µs        ? ?/sec    1.00      4.4±0.00µs        ? ?/sec
uint64_multiply_checked(0)               1.27      8.5±0.01µs        ? ?/sec    1.00      6.7±0.00µs        ? ?/sec
uint64_multiply_checked(0.1)             1.99     13.6±0.24µs        ? ?/sec    1.00      6.8±0.01µs        ? ?/sec
uint64_subtract(0)                       1.00   1570.5±4.35ns        ? ?/sec    1.10   1728.1±2.64ns        ? ?/sec
uint64_subtract(0.1)                     1.00   1717.5±6.11ns        ? ?/sec    1.09   1866.4±5.69ns        ? ?/sec
uint64_subtract_checked(0)               4.59      8.5±0.01µs        ? ?/sec    1.00   1841.5±5.27ns        ? ?/sec
uint64_subtract_checked(0.1)             2.65     13.6±0.22µs        ? ?/sec    1.00      5.1±0.01µs        ? ?/sec
uint64_subtract_checked_scalar(0)        6.14      8.8±0.01µs        ? ?/sec    1.00   1425.4±7.63ns        ? ?/sec
uint64_subtract_checked_scalar(0.1)      4.55     13.3±0.12µs        ? ?/sec    1.00      2.9±0.00µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-efwz0fox-c189fe9c-8jv9

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6863049072-5028-rhzj9 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 685.2s
Peak memory 15.4 MiB
Avg memory 14.9 MiB
CPU user 680.5s
CPU sys 0.1s
Peak spill 0 B

branch

Metric Value
Wall time 690.2s
Peak memory 15.4 MiB
Avg memory 14.9 MiB
CPU user 687.8s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (8aa2750) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^u?int
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1
Details
group                                    base                                   changed
-----                                    ----                                   -------
int32_add(0)                             1.00   901.5±12.51ns        ? ?/sec    1.01   913.1±12.50ns        ? ?/sec
int32_add(0.1)                           1.00   1037.8±7.70ns        ? ?/sec    1.03  1067.9±18.53ns        ? ?/sec
int32_add_checked(0)                     4.60      5.7±1.01µs        ? ?/sec    1.00  1233.0±15.76ns        ? ?/sec
int32_add_checked(0.1)                   5.18      7.1±0.74µs        ? ?/sec    1.00  1377.2±16.97ns        ? ?/sec
int32_add_checked_null_slot_overflow     1.23      7.5±0.85µs        ? ?/sec    1.00      6.1±0.08µs        ? ?/sec
int32_add_checked_overflow               1.00      6.5±0.04µs        ? ?/sec    1.19      7.8±0.10µs        ? ?/sec
int32_add_checked_scalar(0)              5.73      6.7±0.10µs        ? ?/sec    1.00  1176.9±17.99ns        ? ?/sec
int32_add_checked_scalar(0.1)            5.48      6.4±0.70µs        ? ?/sec    1.00  1176.4±17.66ns        ? ?/sec
int32_multiply(0)                        1.00   1373.3±9.30ns        ? ?/sec    1.04  1426.8±22.54ns        ? ?/sec
int32_multiply(0.1)                      1.00  1541.9±12.40ns        ? ?/sec    1.03  1584.7±22.73ns        ? ?/sec
int32_multiply_checked(0)                1.73      5.7±1.02µs        ? ?/sec    1.00      3.3±0.08µs        ? ?/sec
int32_multiply_checked(0.1)              2.07      7.0±0.73µs        ? ?/sec    1.00      3.4±0.05µs        ? ?/sec
int32_subtract(0)                        1.00   884.8±13.86ns        ? ?/sec    1.04   916.2±19.21ns        ? ?/sec
int32_subtract(0.1)                      1.00   1036.8±3.17ns        ? ?/sec    1.04  1078.2±17.35ns        ? ?/sec
int32_subtract_checked(0)                4.74      5.8±1.04µs        ? ?/sec    1.00  1225.1±19.61ns        ? ?/sec
int32_subtract_checked(0.1)              5.09      7.1±0.73µs        ? ?/sec    1.00  1389.2±22.09ns        ? ?/sec
int32_subtract_checked_scalar(0)         5.82      6.8±0.19µs        ? ?/sec    1.00  1172.0±20.04ns        ? ?/sec
int32_subtract_checked_scalar(0.1)       5.39      6.4±0.71µs        ? ?/sec    1.00  1196.2±30.25ns        ? ?/sec
int64_add(0)                             1.00  1603.0±22.54ns        ? ?/sec    1.07  1714.5±25.35ns        ? ?/sec
int64_add(0.1)                           1.00  1743.8±21.06ns        ? ?/sec    1.07  1870.0±31.41ns        ? ?/sec
int64_add_checked(0)                     2.42      6.4±0.87µs        ? ?/sec    1.00      2.6±0.03µs        ? ?/sec
int64_add_checked(0.1)                   2.76      7.8±0.80µs        ? ?/sec    1.00      2.8±0.03µs        ? ?/sec
int64_add_checked_null_slot_overflow     1.17      8.5±0.94µs        ? ?/sec    1.00      7.2±0.11µs        ? ?/sec
int64_add_checked_overflow               1.00      7.4±0.03µs        ? ?/sec    1.37     10.2±0.17µs        ? ?/sec
int64_add_checked_scalar(0)              2.92      7.4±0.02µs        ? ?/sec    1.00      2.5±0.04µs        ? ?/sec
int64_add_checked_scalar(0.1)            3.42      8.8±0.04µs        ? ?/sec    1.00      2.6±0.03µs        ? ?/sec
int64_multiply(0)                        1.00      3.1±0.02µs        ? ?/sec    1.03      3.2±0.06µs        ? ?/sec
int64_multiply(0.1)                      1.00      3.3±0.04µs        ? ?/sec    1.01      3.4±0.04µs        ? ?/sec
int64_multiply_checked(0)                1.00      6.3±0.81µs        ? ?/sec    1.27      8.0±0.11µs        ? ?/sec
int64_multiply_checked(0.1)              1.00      7.6±0.81µs        ? ?/sec    1.07      8.2±0.06µs        ? ?/sec
int64_subtract(0)                        1.00  1597.1±15.66ns        ? ?/sec    1.07  1704.0±20.51ns        ? ?/sec
int64_subtract(0.1)                      1.00  1746.6±12.91ns        ? ?/sec    1.07  1876.9±23.41ns        ? ?/sec
int64_subtract_checked(0)                2.46      6.3±0.92µs        ? ?/sec    1.00      2.6±0.03µs        ? ?/sec
int64_subtract_checked(0.1)              2.82      7.8±0.84µs        ? ?/sec    1.00      2.7±0.04µs        ? ?/sec
int64_subtract_checked_scalar(0)         2.90      7.4±0.07µs        ? ?/sec    1.00      2.6±0.03µs        ? ?/sec
int64_subtract_checked_scalar(0.1)       3.42      8.8±0.09µs        ? ?/sec    1.00      2.6±0.04µs        ? ?/sec
uint32_add(0)                            1.00    870.7±3.20ns        ? ?/sec    1.06   922.0±12.02ns        ? ?/sec
uint32_add(0.1)                          1.00  1061.2±19.39ns        ? ?/sec    1.01  1071.7±14.00ns        ? ?/sec
uint32_add_checked(0)                    4.94      5.7±1.00µs        ? ?/sec    1.00  1155.5±20.17ns        ? ?/sec
uint32_add_checked(0.1)                  5.35      7.2±0.78µs        ? ?/sec    1.00  1347.0±30.42ns        ? ?/sec
uint32_add_checked_null_slot_overflow    1.38      7.7±0.81µs        ? ?/sec    1.00      5.6±0.09µs        ? ?/sec
uint32_add_checked_overflow              1.00      6.7±0.06µs        ? ?/sec    1.15      7.7±0.10µs        ? ?/sec
uint32_add_checked_scalar(0)             6.68      6.8±0.09µs        ? ?/sec    1.00  1020.6±85.32ns        ? ?/sec
uint32_add_checked_scalar(0.1)           6.46      6.5±0.68µs        ? ?/sec    1.00  1011.7±16.08ns        ? ?/sec
uint32_multiply(0)                       1.00  1428.6±21.82ns        ? ?/sec    1.00  1428.0±27.42ns        ? ?/sec
uint32_multiply(0.1)                     1.00  1562.5±22.05ns        ? ?/sec    1.01  1570.6±20.33ns        ? ?/sec
uint32_multiply_checked(0)               1.66      5.7±1.03µs        ? ?/sec    1.00      3.5±0.06µs        ? ?/sec
uint32_multiply_checked(0.1)             1.95      7.2±0.63µs        ? ?/sec    1.00      3.7±0.20µs        ? ?/sec
uint32_subtract(0)                       1.00   906.5±15.46ns        ? ?/sec    1.02   920.7±19.71ns        ? ?/sec
uint32_subtract(0.1)                     1.00  1056.0±13.00ns        ? ?/sec    1.02  1073.6±12.65ns        ? ?/sec
uint32_subtract_checked(0)               5.02      5.8±1.01µs        ? ?/sec    1.00  1150.2±24.72ns        ? ?/sec
uint32_subtract_checked(0.1)             1.26      7.2±0.79µs        ? ?/sec    1.00      5.7±0.11µs        ? ?/sec
uint32_subtract_checked_scalar(0)        7.37      6.7±0.09µs        ? ?/sec    1.00   914.1±16.49ns        ? ?/sec
uint32_subtract_checked_scalar(0.1)      1.01      6.5±0.66µs        ? ?/sec    1.00      6.5±0.14µs        ? ?/sec
uint64_add(0)                            1.00  1609.3±14.36ns        ? ?/sec    1.03  1658.3±38.25ns        ? ?/sec
uint64_add(0.1)                          1.00  1814.0±40.95ns        ? ?/sec    1.00  1816.4±22.16ns        ? ?/sec
uint64_add_checked(0)                    1.60      6.4±0.97µs        ? ?/sec    1.00      4.0±0.06µs        ? ?/sec
uint64_add_checked(0.1)                  1.93      8.0±0.82µs        ? ?/sec    1.00      4.1±0.15µs        ? ?/sec
uint64_add_checked_null_slot_overflow    1.00      8.4±0.94µs        ? ?/sec    1.17      9.8±0.16µs        ? ?/sec
uint64_add_checked_overflow              1.00      7.6±0.10µs        ? ?/sec    1.51     11.5±0.15µs        ? ?/sec
uint64_add_checked_scalar(0)             1.90      7.4±0.01µs        ? ?/sec    1.00      3.9±0.06µs        ? ?/sec
uint64_add_checked_scalar(0.1)           2.31      9.0±0.12µs        ? ?/sec    1.00      3.9±0.07µs        ? ?/sec
uint64_multiply(0)                       1.00      3.2±0.04µs        ? ?/sec    1.01      3.2±0.05µs        ? ?/sec
uint64_multiply(0.1)                     1.00      3.4±0.05µs        ? ?/sec    1.00      3.4±0.05µs        ? ?/sec
uint64_multiply_checked(0)               1.73      6.4±0.98µs        ? ?/sec    1.00      3.7±0.06µs        ? ?/sec
uint64_multiply_checked(0.1)             2.12      7.9±0.79µs        ? ?/sec    1.00      3.7±0.05µs        ? ?/sec
uint64_subtract(0)                       1.00  1606.1±19.73ns        ? ?/sec    1.04  1664.6±26.55ns        ? ?/sec
uint64_subtract(0.1)                     1.00  1794.2±25.72ns        ? ?/sec    1.01  1810.9±29.86ns        ? ?/sec
uint64_subtract_checked(0)               1.60      6.3±1.01µs        ? ?/sec    1.00      3.9±0.05µs        ? ?/sec
uint64_subtract_checked(0.1)             1.00      7.9±0.80µs        ? ?/sec    1.01      7.9±0.13µs        ? ?/sec
uint64_subtract_checked_scalar(0)        2.10      7.5±0.10µs        ? ?/sec    1.00      3.6±0.04µs        ? ?/sec
uint64_subtract_checked_scalar(0.1)      1.00      9.0±0.13µs        ? ?/sec    1.00      9.0±0.24µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1x7drz99-4b7c01e4-ppq8

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6863051744-5030-d7fxh 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 690.2s
Peak memory 16.5 MiB
Avg memory 15.9 MiB
CPU user 685.6s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 690.2s
Peak memory 16.3 MiB
Avg memory 15.7 MiB
CPU user 684.8s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (8aa2750) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^u?int
resources:
  arch: amd64
shards: 1
Details
group                                    base                                   changed
-----                                    ----                                   -------
int32_add(0)                             2.68      3.0±0.01µs        ? ?/sec    1.00  1110.9±17.45ns        ? ?/sec
int32_add(0.1)                           1.00  1302.9±12.95ns        ? ?/sec    1.01  1317.0±21.04ns        ? ?/sec
int32_add_checked(0)                     4.94      7.8±1.14µs        ? ?/sec    1.00  1571.9±54.00ns        ? ?/sec
int32_add_checked(0.1)                   5.66      9.8±0.91µs        ? ?/sec    1.00  1738.9±21.90ns        ? ?/sec
int32_add_checked_null_slot_overflow     1.36     10.3±1.01µs        ? ?/sec    1.00      7.6±0.07µs        ? ?/sec
int32_add_checked_overflow               1.00      8.7±0.05µs        ? ?/sec    1.17     10.1±0.13µs        ? ?/sec
int32_add_checked_scalar(0)              5.94      8.7±0.09µs        ? ?/sec    1.00  1457.7±22.09ns        ? ?/sec
int32_add_checked_scalar(0.1)            5.94      8.7±0.83µs        ? ?/sec    1.00  1464.1±15.72ns        ? ?/sec
int32_multiply(0)                        1.00  1703.7±15.91ns        ? ?/sec    1.03  1758.2±36.56ns        ? ?/sec
int32_multiply(0.1)                      1.00  1927.7±13.52ns        ? ?/sec    1.01  1939.0±26.98ns        ? ?/sec
int32_multiply_checked(0)                1.86      7.8±1.14µs        ? ?/sec    1.00      4.2±0.06µs        ? ?/sec
int32_multiply_checked(0.1)              2.28      9.9±0.91µs        ? ?/sec    1.00      4.3±0.06µs        ? ?/sec
int32_subtract(0)                        1.00   1074.9±5.06ns        ? ?/sec    1.04  1113.8±18.70ns        ? ?/sec
int32_subtract(0.1)                      1.00  1306.6±12.89ns        ? ?/sec    1.01  1314.0±25.69ns        ? ?/sec
int32_subtract_checked(0)                4.90      7.8±1.15µs        ? ?/sec    1.00  1586.3±36.41ns        ? ?/sec
int32_subtract_checked(0.1)              5.62      9.9±0.92µs        ? ?/sec    1.00  1758.5±21.08ns        ? ?/sec
int32_subtract_checked_scalar(0)         5.89      8.7±0.04µs        ? ?/sec    1.00  1471.8±55.56ns        ? ?/sec
int32_subtract_checked_scalar(0.1)       5.97      8.7±0.82µs        ? ?/sec    1.00  1463.9±25.54ns        ? ?/sec
int64_add(0)                             1.00  1980.8±14.43ns        ? ?/sec    1.04      2.1±0.03µs        ? ?/sec
int64_add(0.1)                           1.00      2.2±0.01µs        ? ?/sec    1.04      2.3±0.03µs        ? ?/sec
int64_add_checked(0)                     2.89      9.5±1.34µs        ? ?/sec    1.00      3.3±0.20µs        ? ?/sec
int64_add_checked(0.1)                   3.28     11.3±1.02µs        ? ?/sec    1.00      3.5±0.06µs        ? ?/sec
int64_add_checked_null_slot_overflow     1.33     11.8±1.09µs        ? ?/sec    1.00      8.9±0.12µs        ? ?/sec
int64_add_checked_overflow               1.00     10.9±0.09µs        ? ?/sec    1.29     14.1±0.21µs        ? ?/sec
int64_add_checked_scalar(0)              3.38     10.9±0.21µs        ? ?/sec    1.00      3.2±0.04µs        ? ?/sec
int64_add_checked_scalar(0.1)            3.81     12.4±0.19µs        ? ?/sec    1.00      3.2±0.04µs        ? ?/sec
int64_multiply(0)                        1.00      3.9±0.01µs        ? ?/sec    1.01      4.0±0.06µs        ? ?/sec
int64_multiply(0.1)                      1.00      4.2±0.26µs        ? ?/sec    1.00      4.2±0.07µs        ? ?/sec
int64_multiply_checked(0)                1.00      9.3±1.37µs        ? ?/sec    1.06      9.8±0.33µs        ? ?/sec
int64_multiply_checked(0.1)              1.13     11.2±1.01µs        ? ?/sec    1.00     10.0±0.14µs        ? ?/sec
int64_subtract(0)                        1.00   1980.6±7.07ns        ? ?/sec    1.04      2.1±0.04µs        ? ?/sec
int64_subtract(0.1)                      1.00      2.2±0.01µs        ? ?/sec    1.04      2.3±0.03µs        ? ?/sec
int64_subtract_checked(0)                2.91      9.3±1.35µs        ? ?/sec    1.00      3.2±0.05µs        ? ?/sec
int64_subtract_checked(0.1)              3.31     11.2±0.99µs        ? ?/sec    1.00      3.4±0.05µs        ? ?/sec
int64_subtract_checked_scalar(0)         3.41     10.9±0.04µs        ? ?/sec    1.00      3.2±0.08µs        ? ?/sec
int64_subtract_checked_scalar(0.1)       3.86     12.3±0.07µs        ? ?/sec    1.00      3.2±0.06µs        ? ?/sec
uint32_add(0)                            1.00   1077.6±7.76ns        ? ?/sec    1.03  1109.7±16.18ns        ? ?/sec
uint32_add(0.1)                          1.01  1320.3±20.30ns        ? ?/sec    1.00  1311.3±16.83ns        ? ?/sec
uint32_add_checked(0)                    5.42      7.8±1.17µs        ? ?/sec    1.00  1433.8±22.61ns        ? ?/sec
uint32_add_checked(0.1)                  6.17     10.0±0.95µs        ? ?/sec    1.00  1625.4±55.84ns        ? ?/sec
uint32_add_checked_null_slot_overflow    1.51     10.5±0.95µs        ? ?/sec    1.00      6.9±0.15µs        ? ?/sec
uint32_add_checked_overflow              1.00      8.7±0.12µs        ? ?/sec    1.13      9.9±0.11µs        ? ?/sec
uint32_add_checked_scalar(0)             6.93      8.7±0.11µs        ? ?/sec    1.00  1253.0±23.73ns        ? ?/sec
uint32_add_checked_scalar(0.1)           6.89      8.6±0.86µs        ? ?/sec    1.00  1256.0±20.39ns        ? ?/sec
uint32_multiply(0)                       1.00  1719.3±16.45ns        ? ?/sec    1.01  1736.0±27.40ns        ? ?/sec
uint32_multiply(0.1)                     1.01  1949.9±29.70ns        ? ?/sec    1.00  1938.7±32.47ns        ? ?/sec
uint32_multiply_checked(0)               1.87      7.8±1.20µs        ? ?/sec    1.00      4.2±0.14µs        ? ?/sec
uint32_multiply_checked(0.1)             2.31     10.0±0.89µs        ? ?/sec    1.00      4.3±0.07µs        ? ?/sec
uint32_subtract(0)                       1.00  1093.4±10.37ns        ? ?/sec    1.02  1110.8±15.52ns        ? ?/sec
uint32_subtract(0.1)                     1.00  1289.6±20.52ns        ? ?/sec    1.01  1304.5±14.77ns        ? ?/sec
uint32_subtract_checked(0)               5.33      7.8±1.19µs        ? ?/sec    1.00  1455.1±51.91ns        ? ?/sec
uint32_subtract_checked(0.1)             1.42     10.0±0.90µs        ? ?/sec    1.00      7.1±0.08µs        ? ?/sec
uint32_subtract_checked_scalar(0)        7.35      8.6±0.06µs        ? ?/sec    1.00  1176.8±20.06ns        ? ?/sec
uint32_subtract_checked_scalar(0.1)      1.16      9.0±1.05µs        ? ?/sec    1.00      7.7±0.08µs        ? ?/sec
uint64_add(0)                            1.00      2.0±0.04µs        ? ?/sec    1.00      2.0±0.02µs        ? ?/sec
uint64_add(0.1)                          1.00      2.2±0.04µs        ? ?/sec    1.00      2.2±0.03µs        ? ?/sec
uint64_add_checked(0)                    1.97      9.5±1.38µs        ? ?/sec    1.00      4.8±0.07µs        ? ?/sec
uint64_add_checked(0.1)                  2.32     11.6±1.01µs        ? ?/sec    1.00      5.0±0.15µs        ? ?/sec
uint64_add_checked_null_slot_overflow    1.03     12.2±1.06µs        ? ?/sec    1.00     11.9±0.13µs        ? ?/sec
uint64_add_checked_overflow              1.00     11.0±0.28µs        ? ?/sec    1.40     15.4±0.12µs        ? ?/sec
uint64_add_checked_scalar(0)             2.29     11.0±0.19µs        ? ?/sec    1.00      4.8±0.05µs        ? ?/sec
uint64_add_checked_scalar(0.1)           2.58     12.4±0.17µs        ? ?/sec    1.00      4.8±0.06µs        ? ?/sec
uint64_multiply(0)                       1.00      4.0±0.06µs        ? ?/sec    1.00      3.9±0.05µs        ? ?/sec
uint64_multiply(0.1)                     1.01      4.2±0.05µs        ? ?/sec    1.00      4.1±0.03µs        ? ?/sec
uint64_multiply_checked(0)               1.85      9.4±1.29µs        ? ?/sec    1.00      5.1±0.09µs        ? ?/sec
uint64_multiply_checked(0.1)             2.31     11.5±1.12µs        ? ?/sec    1.00      5.0±0.05µs        ? ?/sec
uint64_subtract(0)                       1.00      2.0±0.05µs        ? ?/sec    1.00      2.0±0.02µs        ? ?/sec
uint64_subtract(0.1)                     1.00      2.2±0.03µs        ? ?/sec    1.00      2.2±0.03µs        ? ?/sec
uint64_subtract_checked(0)               1.92      9.2±1.38µs        ? ?/sec    1.00      4.8±0.05µs        ? ?/sec
uint64_subtract_checked(0.1)             1.19     11.5±0.94µs        ? ?/sec    1.00      9.6±0.13µs        ? ?/sec
uint64_subtract_checked_scalar(0)        2.51     11.0±0.29µs        ? ?/sec    1.00      4.4±0.06µs        ? ?/sec
uint64_subtract_checked_scalar(0.1)      1.13     12.4±0.12µs        ? ?/sec    1.00     11.0±0.12µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1x7drz99-4b7c01e4-sn47

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6863050315-5029-grz2c 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 705.2s
Peak memory 15.1 MiB
Avg memory 14.7 MiB
CPU user 698.4s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 695.2s
Peak memory 15.0 MiB
Avg memory 14.5 MiB
CPU user 688.8s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (8aa2750) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^u?int
  RUSTFLAGS: -C target-cpu=x86-64-v3
resources:
  arch: amd64
shards: 1
Details
group                                    base                                   changed
-----                                    ----                                   -------
int32_add(0)                             1.02   890.8±15.02ns        ? ?/sec    1.00    872.2±9.71ns        ? ?/sec
int32_add(0.1)                           1.00   975.3±18.15ns        ? ?/sec    1.03  1003.5±15.55ns        ? ?/sec
int32_add_checked(0)                     5.50      6.0±0.98µs        ? ?/sec    1.00  1100.2±39.80ns        ? ?/sec
int32_add_checked(0.1)                   5.92      7.4±0.64µs        ? ?/sec    1.00  1249.7±20.35ns        ? ?/sec
int32_add_checked_null_slot_overflow     2.76      8.0±0.74µs        ? ?/sec    1.00      2.9±0.06µs        ? ?/sec
int32_add_checked_overflow               1.00      6.6±0.08µs        ? ?/sec    1.13      7.5±0.14µs        ? ?/sec
int32_add_checked_scalar(0)              8.02      6.8±0.10µs        ? ?/sec    1.00    845.8±9.29ns        ? ?/sec
int32_add_checked_scalar(0.1)            7.86      6.8±0.87µs        ? ?/sec    1.00   867.2±13.04ns        ? ?/sec
int32_multiply(0)                        1.00   854.1±19.37ns        ? ?/sec    1.01   866.4±12.16ns        ? ?/sec
int32_multiply(0.1)                      1.00   979.0±14.57ns        ? ?/sec    1.01   985.4±13.86ns        ? ?/sec
int32_multiply_checked(0)                2.22      6.0±1.00µs        ? ?/sec    1.00      2.7±0.04µs        ? ?/sec
int32_multiply_checked(0.1)              2.59      7.3±0.60µs        ? ?/sec    1.00      2.8±0.05µs        ? ?/sec
int32_subtract(0)                        1.00   858.8±20.11ns        ? ?/sec    1.02   873.3±12.02ns        ? ?/sec
int32_subtract(0.1)                      1.00   962.1±15.88ns        ? ?/sec    1.04  1004.1±16.33ns        ? ?/sec
int32_subtract_checked(0)                5.34      6.1±1.01µs        ? ?/sec    1.00  1138.9±31.19ns        ? ?/sec
int32_subtract_checked(0.1)              5.85      7.3±0.62µs        ? ?/sec    1.00  1253.7±25.13ns        ? ?/sec
int32_subtract_checked_scalar(0)         7.98      6.8±0.13µs        ? ?/sec    1.00   845.7±12.80ns        ? ?/sec
int32_subtract_checked_scalar(0.1)       7.81      6.8±0.85µs        ? ?/sec    1.00   866.3±13.88ns        ? ?/sec
int64_add(0)                             1.23  1983.1±84.55ns        ? ?/sec    1.00  1610.1±30.39ns        ? ?/sec
int64_add(0.1)                           1.20      2.1±0.04µs        ? ?/sec    1.00  1752.2±30.29ns        ? ?/sec
int64_add_checked(0)                     2.95      6.2±0.91µs        ? ?/sec    1.00      2.1±0.06µs        ? ?/sec
int64_add_checked(0.1)                   3.72      8.2±0.79µs        ? ?/sec    1.00      2.2±0.04µs        ? ?/sec
int64_add_checked_null_slot_overflow     2.07      8.7±0.96µs        ? ?/sec    1.00      4.2±0.14µs        ? ?/sec
int64_add_checked_overflow               1.00      7.5±0.08µs        ? ?/sec    1.24      9.3±0.24µs        ? ?/sec
int64_add_checked_scalar(0)              4.44      7.5±0.06µs        ? ?/sec    1.00  1684.7±27.00ns        ? ?/sec
int64_add_checked_scalar(0.1)            5.32      9.0±0.12µs        ? ?/sec    1.00  1697.5±22.39ns        ? ?/sec
int64_multiply(0)                        1.02      2.3±0.03µs        ? ?/sec    1.00      2.2±0.04µs        ? ?/sec
int64_multiply(0.1)                      1.03      2.4±0.05µs        ? ?/sec    1.00      2.4±0.04µs        ? ?/sec
int64_multiply_checked(0)                1.00      6.2±0.94µs        ? ?/sec    1.52      9.5±0.15µs        ? ?/sec
int64_multiply_checked(0.1)              1.00      8.1±0.81µs        ? ?/sec    1.19      9.7±0.19µs        ? ?/sec
int64_subtract(0)                        1.23  1977.3±32.55ns        ? ?/sec    1.00  1607.9±25.10ns        ? ?/sec
int64_subtract(0.1)                      1.21      2.1±0.02µs        ? ?/sec    1.00  1762.9±56.12ns        ? ?/sec
int64_subtract_checked(0)                2.97      6.1±0.88µs        ? ?/sec    1.00      2.1±0.04µs        ? ?/sec
int64_subtract_checked(0.1)              3.72      8.2±0.82µs        ? ?/sec    1.00      2.2±0.06µs        ? ?/sec
int64_subtract_checked_scalar(0)         4.42      7.5±0.10µs        ? ?/sec    1.00  1697.1±27.00ns        ? ?/sec
int64_subtract_checked_scalar(0.1)       5.33      9.0±0.15µs        ? ?/sec    1.00  1697.1±37.02ns        ? ?/sec
uint32_add(0)                            1.00   857.7±14.15ns        ? ?/sec    1.03   881.0±17.69ns        ? ?/sec
uint32_add(0.1)                          1.15  1153.2±25.44ns        ? ?/sec    1.00  1006.5±15.81ns        ? ?/sec
uint32_add_checked(0)                    5.75      6.1±1.01µs        ? ?/sec    1.00  1058.9±26.36ns        ? ?/sec
uint32_add_checked(0.1)                  6.28      7.4±0.59µs        ? ?/sec    1.00  1178.8±21.74ns        ? ?/sec
uint32_add_checked_null_slot_overflow    2.99      8.1±0.66µs        ? ?/sec    1.00      2.7±0.06µs        ? ?/sec
uint32_add_checked_overflow              1.00      6.7±0.11µs        ? ?/sec    1.12      7.5±0.18µs        ? ?/sec
uint32_add_checked_scalar(0)             8.53      6.8±0.13µs        ? ?/sec    1.00   795.1±15.17ns        ? ?/sec
uint32_add_checked_scalar(0.1)           8.42      6.8±0.84µs        ? ?/sec    1.00   807.8±13.83ns        ? ?/sec
uint32_multiply(0)                       1.17  1029.5±15.11ns        ? ?/sec    1.00   880.4±15.59ns        ? ?/sec
uint32_multiply(0.1)                     1.17  1146.5±25.16ns        ? ?/sec    1.00   983.5±15.48ns        ? ?/sec
uint32_multiply_checked(0)               1.65      6.1±0.98µs        ? ?/sec    1.00      3.7±0.04µs        ? ?/sec
uint32_multiply_checked(0.1)             1.93      7.4±0.56µs        ? ?/sec    1.00      3.9±0.06µs        ? ?/sec
uint32_subtract(0)                       1.17  1028.9±12.85ns        ? ?/sec    1.00   881.1±14.15ns        ? ?/sec
uint32_subtract(0.1)                     1.16  1147.1±23.01ns        ? ?/sec    1.00   988.9±17.54ns        ? ?/sec
uint32_subtract_checked(0)               5.66      6.0±0.97µs        ? ?/sec    1.00  1068.2±17.62ns        ? ?/sec
uint32_subtract_checked(0.1)             2.79      7.4±0.67µs        ? ?/sec    1.00      2.7±0.06µs        ? ?/sec
uint32_subtract_checked_scalar(0)        8.35      6.7±0.11µs        ? ?/sec    1.00   800.7±13.76ns        ? ?/sec
uint32_subtract_checked_scalar(0.1)      2.18      6.6±0.72µs        ? ?/sec    1.00      3.0±0.04µs        ? ?/sec
uint64_add(0)                            1.00  1969.8±29.77ns        ? ?/sec    1.01  1994.1±28.54ns        ? ?/sec
uint64_add(0.1)                          1.04      2.1±0.04µs        ? ?/sec    1.00      2.0±0.03µs        ? ?/sec
uint64_add_checked(0)                    2.76      6.1±1.06µs        ? ?/sec    1.00      2.2±0.04µs        ? ?/sec
uint64_add_checked(0.1)                  3.70      8.1±0.80µs        ? ?/sec    1.00      2.2±0.03µs        ? ?/sec
uint64_add_checked_null_slot_overflow    2.20      8.4±0.88µs        ? ?/sec    1.00      3.8±0.07µs        ? ?/sec
uint64_add_checked_overflow              1.00      7.5±0.07µs        ? ?/sec    1.23      9.2±0.18µs        ? ?/sec
uint64_add_checked_scalar(0)             4.48      7.6±0.10µs        ? ?/sec    1.00  1694.2±20.14ns        ? ?/sec
uint64_add_checked_scalar(0.1)           5.17      8.9±0.13µs        ? ?/sec    1.00  1721.5±29.22ns        ? ?/sec
uint64_multiply(0)                       1.00      2.3±0.04µs        ? ?/sec    1.03      2.3±0.04µs        ? ?/sec
uint64_multiply(0.1)                     1.00      2.4±0.04µs        ? ?/sec    1.03      2.5±0.05µs        ? ?/sec
uint64_multiply_checked(0)               1.47      6.1±1.06µs        ? ?/sec    1.00      4.2±0.07µs        ? ?/sec
uint64_multiply_checked(0.1)             2.28      8.0±0.77µs        ? ?/sec    1.00      3.5±0.08µs        ? ?/sec
uint64_subtract(0)                       1.01      2.0±0.04µs        ? ?/sec    1.00  1986.9±27.37ns        ? ?/sec
uint64_subtract(0.1)                     1.05      2.1±0.04µs        ? ?/sec    1.00      2.0±0.04µs        ? ?/sec
uint64_subtract_checked(0)               2.70      6.0±1.04µs        ? ?/sec    1.00      2.2±0.03µs        ? ?/sec
uint64_subtract_checked(0.1)             2.03      8.0±0.80µs        ? ?/sec    1.00      4.0±0.10µs        ? ?/sec
uint64_subtract_checked_scalar(0)        4.42      7.6±0.13µs        ? ?/sec    1.00  1714.9±27.40ns        ? ?/sec
uint64_subtract_checked_scalar(0.1)      2.29      9.0±0.13µs        ? ?/sec    1.00      3.9±0.07µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1x7drz99-ecac925a-k54z

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6863053553-5031-lltbx 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 690.2s
Peak memory 15.0 MiB
Avg memory 14.5 MiB
CPU user 683.7s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 680.2s
Peak memory 15.1 MiB
Avg memory 14.6 MiB
CPU user 675.8s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (8aa2750) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^u?int
  RUSTFLAGS: -C target-cpu=x86-64-v3 -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1
Details
group                                    base                                   changed
-----                                    ----                                   -------
int32_add(0)                             1.01  1021.0±31.52ns        ? ?/sec    1.00  1010.3±37.42ns        ? ?/sec
int32_add(0.1)                           1.00  1141.1±29.18ns        ? ?/sec    1.01  1146.8±53.76ns        ? ?/sec
int32_add_checked(0)                     6.19      8.0±1.19µs        ? ?/sec    1.00  1295.9±51.85ns        ? ?/sec
int32_add_checked(0.1)                   6.90      9.7±0.92µs        ? ?/sec    1.00  1403.7±59.51ns        ? ?/sec
int32_add_checked_null_slot_overflow     3.07     10.5±1.41µs        ? ?/sec    1.00      3.4±0.15µs        ? ?/sec
int32_add_checked_overflow               1.00      8.6±0.15µs        ? ?/sec    1.08      9.3±0.42µs        ? ?/sec
int32_add_checked_scalar(0)              8.46      8.4±0.24µs        ? ?/sec    1.00   995.0±34.85ns        ? ?/sec
int32_add_checked_scalar(0.1)            8.54      8.7±0.86µs        ? ?/sec    1.00  1014.5±36.15ns        ? ?/sec
int32_multiply(0)                        1.04  1090.9±27.58ns        ? ?/sec    1.00  1050.4±52.71ns        ? ?/sec
int32_multiply(0.1)                      1.02  1180.1±22.93ns        ? ?/sec    1.00  1155.8±41.80ns        ? ?/sec
int32_multiply_checked(0)                2.57      8.1±1.17µs        ? ?/sec    1.00      3.1±0.12µs        ? ?/sec
int32_multiply_checked(0.1)              2.98      9.7±0.91µs        ? ?/sec    1.00      3.3±0.12µs        ? ?/sec
int32_subtract(0)                        1.02  1014.3±30.17ns        ? ?/sec    1.00   996.4±39.95ns        ? ?/sec
int32_subtract(0.1)                      1.02  1154.0±24.49ns        ? ?/sec    1.00  1133.3±41.07ns        ? ?/sec
int32_subtract_checked(0)                6.21      8.1±1.14µs        ? ?/sec    1.00  1297.6±46.30ns        ? ?/sec
int32_subtract_checked(0.1)              6.97      9.8±0.85µs        ? ?/sec    1.00  1404.3±49.76ns        ? ?/sec
int32_subtract_checked_scalar(0)         8.54      8.4±0.21µs        ? ?/sec    1.00   988.9±35.73ns        ? ?/sec
int32_subtract_checked_scalar(0.1)       8.67      8.7±0.89µs        ? ?/sec    1.00  1002.0±42.78ns        ? ?/sec
int64_add(0)                             1.20      2.2±0.05µs        ? ?/sec    1.00  1859.0±70.26ns        ? ?/sec
int64_add(0.1)                           1.19      2.4±0.05µs        ? ?/sec    1.00  1975.9±80.73ns        ? ?/sec
int64_add_checked(0)                     3.96      9.7±1.25µs        ? ?/sec    1.00      2.4±0.10µs        ? ?/sec
int64_add_checked(0.1)                   4.48     11.4±1.00µs        ? ?/sec    1.00      2.5±0.10µs        ? ?/sec
int64_add_checked_null_slot_overflow     2.37     11.8±1.13µs        ? ?/sec    1.00      5.0±0.21µs        ? ?/sec
int64_add_checked_overflow               1.00     10.6±0.30µs        ? ?/sec    1.12     11.9±0.43µs        ? ?/sec
int64_add_checked_scalar(0)              5.52     10.7±0.18µs        ? ?/sec    1.00  1945.8±75.04ns        ? ?/sec
int64_add_checked_scalar(0.1)            6.23     12.2±0.31µs        ? ?/sec    1.00  1963.6±74.63ns        ? ?/sec
int64_multiply(0)                        1.10      2.5±0.06µs        ? ?/sec    1.00      2.3±0.11µs        ? ?/sec
int64_multiply(0.1)                      1.07      2.7±0.08µs        ? ?/sec    1.00      2.5±0.13µs        ? ?/sec
int64_multiply_checked(0)                1.00      9.6±1.27µs        ? ?/sec    1.11     10.6±0.43µs        ? ?/sec
int64_multiply_checked(0.1)              1.05     11.1±0.98µs        ? ?/sec    1.00     10.6±0.44µs        ? ?/sec
int64_subtract(0)                        1.22      2.2±0.04µs        ? ?/sec    1.00  1843.8±66.11ns        ? ?/sec
int64_subtract(0.1)                      1.20      2.4±0.06µs        ? ?/sec    1.00  1963.3±93.18ns        ? ?/sec
int64_subtract_checked(0)                3.94      9.5±1.29µs        ? ?/sec    1.00      2.4±0.10µs        ? ?/sec
int64_subtract_checked(0.1)              4.46     11.3±1.02µs        ? ?/sec    1.00      2.5±0.10µs        ? ?/sec
int64_subtract_checked_scalar(0)         5.54     10.7±0.26µs        ? ?/sec    1.00  1940.9±85.15ns        ? ?/sec
int64_subtract_checked_scalar(0.1)       6.37     12.3±0.78µs        ? ?/sec    1.00  1936.2±74.60ns        ? ?/sec
uint32_add(0)                            1.02  1007.2±30.04ns        ? ?/sec    1.00   985.1±38.87ns        ? ?/sec
uint32_add(0.1)                          1.11  1253.9±61.95ns        ? ?/sec    1.00  1129.0±43.61ns        ? ?/sec
uint32_add_checked(0)                    6.77      8.2±1.22µs        ? ?/sec    1.00  1204.8±48.49ns        ? ?/sec
uint32_add_checked(0.1)                  6.92      9.1±0.92µs        ? ?/sec    1.00  1321.8±56.43ns        ? ?/sec
uint32_add_checked_null_slot_overflow    3.25      9.6±1.13µs        ? ?/sec    1.00      3.0±0.13µs        ? ?/sec
uint32_add_checked_overflow              1.00      8.0±0.34µs        ? ?/sec    1.12      9.0±0.39µs        ? ?/sec
uint32_add_checked_scalar(0)             9.25      8.5±0.24µs        ? ?/sec    1.00   920.8±35.72ns        ? ?/sec
uint32_add_checked_scalar(0.1)           8.74      8.1±0.83µs        ? ?/sec    1.00   927.2±37.98ns        ? ?/sec
uint32_multiply(0)                       1.12  1143.0±49.25ns        ? ?/sec    1.00  1020.9±42.16ns        ? ?/sec
uint32_multiply(0.1)                     1.07  1284.3±56.86ns        ? ?/sec    1.00  1195.8±64.68ns        ? ?/sec
uint32_multiply_checked(0)               1.77      7.7±1.22µs        ? ?/sec    1.00      4.3±0.19µs        ? ?/sec
uint32_multiply_checked(0.1)             2.06      9.2±0.92µs        ? ?/sec    1.00      4.4±0.18µs        ? ?/sec
uint32_subtract(0)                       1.22  1172.5±31.54ns        ? ?/sec    1.00   960.8±43.73ns        ? ?/sec
uint32_subtract(0.1)                     1.13  1274.2±69.39ns        ? ?/sec    1.00  1125.7±41.04ns        ? ?/sec
uint32_subtract_checked(0)               6.70      8.1±1.18µs        ? ?/sec    1.00  1214.1±55.31ns        ? ?/sec
uint32_subtract_checked(0.1)             3.20      9.6±0.89µs        ? ?/sec    1.00      3.0±0.10µs        ? ?/sec
uint32_subtract_checked_scalar(0)        9.38      8.5±0.39µs        ? ?/sec    1.00   910.5±40.19ns        ? ?/sec
uint32_subtract_checked_scalar(0.1)      2.22      8.0±0.84µs        ? ?/sec    1.00      3.6±0.14µs        ? ?/sec
uint64_add(0)                            1.00      2.1±0.10µs        ? ?/sec    1.01      2.1±0.09µs        ? ?/sec
uint64_add(0.1)                          1.00      2.3±0.09µs        ? ?/sec    1.00      2.3±0.09µs        ? ?/sec
uint64_add_checked(0)                    4.02      9.1±1.28µs        ? ?/sec    1.00      2.3±0.10µs        ? ?/sec
uint64_add_checked(0.1)                  4.43     10.8±0.99µs        ? ?/sec    1.00      2.4±0.11µs        ? ?/sec
uint64_add_checked_null_slot_overflow    2.59     11.7±1.00µs        ? ?/sec    1.00      4.5±0.17µs        ? ?/sec
uint64_add_checked_overflow              1.00     10.2±0.42µs        ? ?/sec    1.18     12.1±0.48µs        ? ?/sec
uint64_add_checked_scalar(0)             5.26     10.2±0.42µs        ? ?/sec    1.00  1941.4±88.21ns        ? ?/sec
uint64_add_checked_scalar(0.1)           5.84     11.7±0.46µs        ? ?/sec    1.00  1995.6±78.65ns        ? ?/sec
uint64_multiply(0)                       1.00      2.3±0.11µs        ? ?/sec    1.04      2.4±0.13µs        ? ?/sec
uint64_multiply(0.1)                     1.02      2.5±0.12µs        ? ?/sec    1.00      2.5±0.12µs        ? ?/sec
uint64_multiply_checked(0)               1.98      9.1±1.19µs        ? ?/sec    1.00      4.6±0.18µs        ? ?/sec
uint64_multiply_checked(0.1)             2.44     10.8±1.01µs        ? ?/sec    1.00      4.4±0.16µs        ? ?/sec
uint64_subtract(0)                       1.00      2.1±0.08µs        ? ?/sec    1.01      2.1±0.09µs        ? ?/sec
uint64_subtract(0.1)                     1.02      2.3±0.09µs        ? ?/sec    1.00      2.2±0.09µs        ? ?/sec
uint64_subtract_checked(0)               3.90      9.0±1.28µs        ? ?/sec    1.00      2.3±0.11µs        ? ?/sec
uint64_subtract_checked(0.1)             2.39     10.9±0.98µs        ? ?/sec    1.00      4.5±0.21µs        ? ?/sec
uint64_subtract_checked_scalar(0)        5.36     10.2±0.45µs        ? ?/sec    1.00  1907.7±89.13ns        ? ?/sec
uint64_subtract_checked_scalar(0.1)      2.54     11.6±0.44µs        ? ?/sec    1.00      4.6±0.18µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1x7drz99-4b7c01e4-rh5x

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6863054978-5032-drtsr 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 735.2s
Peak memory 16.6 MiB
Avg memory 15.9 MiB
CPU user 729.5s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 705.2s
Peak memory 16.4 MiB
Avg memory 15.7 MiB
CPU user 700.8s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@mbutrovich

Copy link
Copy Markdown
Contributor Author

Thanks @andygrove and @sunchao!

Nobody should be reading null slots, so this is fine, but please mention the behaviour change in the PR description.

The description says it under "What changes are included in this PR?": "Null slots of the result hold the wrapping result instead of zero, as they already do for add_wrapping."

Could the overflow flag be masked with the validity bitmap before deciding to fall back?

Yes. After a pass that flagged an overflow, overflowing_op masks the overflow of every row with the validity bits and falls back only if a valid row overflowed. That is the same change as in #12058 (comment). Masking inside the loop would add work to every batch, so the mask is computed only after a flagged pass. int32_add_checked_null_slot_overflow measured 2.67x on Neoverse-V2, 1.36x on Xeon 8581C, and 2.76x with x86-64-v3. int64_add_checked_null_slot_overflow measured 2.29x, 1.33x, and 2.07x.

Could you share benchmark numbers for them, or leave them on try_op!?

Unsigned mul gains in every configuration. Without and with 10% nulls, uint32_multiply_checked measured 1.52x and 1.80x on Neoverse-V2, 1.86x and 2.33x on Xeon 8581C, and 1.65x and 1.90x with x86-64-v3. uint64_multiply_checked measured 1.27x and 1.97x, 1.84x and 2.30x, and 1.45x and 2.29x. The multiply stays scalar for both, so the gain comes from dropping the early return and the walk over valid indices.

Int64 mul is the exception. It gains on Neoverse-V2 (1.21x and 1.93x without and with nulls) and is flat on Xeon 8581C (0.95x and 1.12x). With x86-64-v3 it is slower: this PR takes 9.5 to 10.6 us across runs, while main takes 6.0 to 9.6 us, so between 0.65x and 0.90x without nulls. The same runs measure unsigned u64 mul at 4.2 us, so the cost is in how the signed i64 multiply compiles there. I'll fix it or move signed 64-bit mul back to try_op! in this PR.

On code size, integer_op and the new helpers now take 135 KiB across the eight integer types, against 18.5 KiB on main, in the thin-LTO bench binary on aarch64. The error for a failed allocation is built in one shared #[cold] function, as #12080 does for mul_checked in decimal div and rem. That saved 16 KiB over formatting it in each instance.

Can it reuse the existing dispatch, or at least match it?

It matches it. PrimitiveArray doesn't override Array::logical_nulls, so nulls() and logical_nulls() return the same buffer. For empty input, both paths return an empty T::DATA_TYPE array without nulls. It can't go through binary or unary, because their closures would have to carry the overflow flag through a capture. That keeps the flag in memory and the loop scalar, which is why collect_overflowing exists.

Checked arithmetic on durations and timestamps, and direct try_binary(.., add_checked) callers, don't benefit.

I filed #12241 for durations, which go through duration_op with try_op_ref!. A public helper in arity.rs would become permanent API, so I'd add one when a caller outside numeric.rs needs it.

A short comment explaining that, and pointing to the benchmark that would catch a regression, would help future readers.

The comment on collect_overflowing now names the checked add cases of arithmetic_kernels.

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: "^int64_(multiply|add)"

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: "^int64_(multiply|add)"
  RUSTFLAGS: "-C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: "^int64_(multiply|add)"
resources:
  arch: amd64

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
resources:
  arch: amd64
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: "^int64_(multiply|add)"
  RUSTFLAGS: "-C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6"
resources:
  arch: amd64

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: "^int64_(multiply|add)"
  RUSTFLAGS: "-C target-cpu=x86-64-v3"
resources:
  arch: amd64

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
  RUSTFLAGS: -C target-cpu=x86-64-v3
resources:
  arch: amd64
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@mbutrovich

Copy link
Copy Markdown
Contributor Author

run benchmark arithmetic_kernels

baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: "^int64_(multiply|add)"
  RUSTFLAGS: "-C target-cpu=x86-64-v3 -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6"
resources:
  arch: amd64

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int64_add(0)                            1.00  1713.7±31.72ns        ? ?/sec    1.01  1723.4±42.17ns        ? ?/sec
int64_add(0.1)                          1.31      2.4±0.03µs        ? ?/sec    1.00  1862.2±36.59ns        ? ?/sec
int64_add_checked(0)                    2.37      6.2±1.01µs        ? ?/sec    1.00      2.6±0.04µs        ? ?/sec
int64_add_checked(0.1)                  2.90      8.1±0.86µs        ? ?/sec    1.00      2.8±0.04µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.21      8.7±0.85µs        ? ?/sec    1.00      7.2±0.17µs        ? ?/sec
int64_add_checked_overflow              1.00      7.7±0.12µs        ? ?/sec    1.32     10.2±0.35µs        ? ?/sec
int64_add_checked_scalar(0)             2.97      7.6±0.11µs        ? ?/sec    1.00      2.6±0.04µs        ? ?/sec
int64_add_checked_scalar(0.1)           3.53      9.0±0.15µs        ? ?/sec    1.00      2.5±0.05µs        ? ?/sec
int64_multiply(0)                       1.00      3.2±0.05µs        ? ?/sec    1.00      3.2±0.04µs        ? ?/sec
int64_multiply(0.1)                     1.24      4.2±0.05µs        ? ?/sec    1.00      3.4±0.06µs        ? ?/sec
int64_multiply_checked(0)               1.94      6.2±0.98µs        ? ?/sec    1.00      3.2±0.05µs        ? ?/sec
int64_multiply_checked(0.1)             2.39      8.2±0.86µs        ? ?/sec    1.00      3.4±0.06µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1jwtivje-1287609b-b8hd

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6864695620-5055-qtbww 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 115.0s
Peak memory 15.2 MiB
Avg memory 14.1 MiB
CPU user 111.0s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 120.0s
Peak memory 15.1 MiB
Avg memory 13.7 MiB
CPU user 114.1s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: arithmetic_kernels

Sharding factor: 1 (1 workers).

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
  RUSTFLAGS: -C target-cpu=x86-64-v3 -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int64_add(0)                            1.00   1726.2±4.67ns        ? ?/sec    1.00   1725.7±2.41ns        ? ?/sec
int64_add(0.1)                          1.00   1853.9±2.72ns        ? ?/sec    1.00   1854.4±1.90ns        ? ?/sec
int64_add_checked(0)                    3.23      8.5±0.01µs        ? ?/sec    1.00      2.6±0.00µs        ? ?/sec
int64_add_checked(0.1)                  4.97     13.6±0.12µs        ? ?/sec    1.00      2.7±0.00µs        ? ?/sec
int64_add_checked_null_slot_overflow    2.39     15.0±0.14µs        ? ?/sec    1.00      6.3±0.01µs        ? ?/sec
int64_add_checked_overflow              1.00      8.7±0.02µs        ? ?/sec    1.27     11.1±0.02µs        ? ?/sec
int64_add_checked_scalar(0)             3.54      8.8±0.01µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_add_checked_scalar(0.1)           5.39     13.4±0.15µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_multiply(0)                       1.00      4.3±0.00µs        ? ?/sec    1.00      4.3±0.03µs        ? ?/sec
int64_multiply(0.1)                     1.00      4.4±0.01µs        ? ?/sec    1.00      4.4±0.00µs        ? ?/sec
int64_multiply_checked(0)               1.35      8.5±0.01µs        ? ?/sec    1.00      6.3±0.00µs        ? ?/sec
int64_multiply_checked(0.1)             2.25     13.7±0.13µs        ? ?/sec    1.00      6.1±0.17µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1w1y66a2-83be8f18-tdfb

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6864690518-5052-ck6s8 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 115.0s
Peak memory 13.2 MiB
Avg memory 12.2 MiB
CPU user 111.9s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 120.0s
Peak memory 13.3 MiB
Avg memory 12.0 MiB
CPU user 116.1s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
  RUSTFLAGS: -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int64_add(0)                            1.01   1745.0±2.12ns        ? ?/sec    1.00   1724.7±2.89ns        ? ?/sec
int64_add(0.1)                          1.00   1856.5±1.82ns        ? ?/sec    1.00   1850.2±2.22ns        ? ?/sec
int64_add_checked(0)                    3.22      8.5±0.01µs        ? ?/sec    1.00      2.6±0.01µs        ? ?/sec
int64_add_checked(0.1)                  4.98     13.7±0.10µs        ? ?/sec    1.00      2.8±0.00µs        ? ?/sec
int64_add_checked_null_slot_overflow    2.43     15.1±0.10µs        ? ?/sec    1.00      6.2±0.01µs        ? ?/sec
int64_add_checked_overflow              1.00      8.7±0.01µs        ? ?/sec    1.27     11.1±0.00µs        ? ?/sec
int64_add_checked_scalar(0)             3.53      8.7±0.01µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
int64_add_checked_scalar(0.1)           5.33     13.2±0.09µs        ? ?/sec    1.00      2.5±0.01µs        ? ?/sec
int64_multiply(0)                       1.00      4.3±0.00µs        ? ?/sec    1.00      4.3±0.01µs        ? ?/sec
int64_multiply(0.1)                     1.00      4.4±0.01µs        ? ?/sec    1.00      4.4±0.01µs        ? ?/sec
int64_multiply_checked(0)               1.35      8.5±0.00µs        ? ?/sec    1.00      6.3±0.01µs        ? ?/sec
int64_multiply_checked(0.1)             2.13     13.6±0.10µs        ? ?/sec    1.00      6.4±0.01µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1w1y66a2-83be8f18-trzm

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6864691948-5053-kvksk 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 115.0s
Peak memory 14.3 MiB
Avg memory 13.2 MiB
CPU user 112.0s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 120.0s
Peak memory 14.3 MiB
Avg memory 13.1 MiB
CPU user 116.1s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
resources:
  arch: amd64
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int64_add(0)                            1.00  1730.0±75.11ns        ? ?/sec    1.00  1735.1±75.68ns        ? ?/sec
int64_add(0.1)                          1.00  1945.1±95.97ns        ? ?/sec    1.02  1989.2±101.56ns        ? ?/sec
int64_add_checked(0)                    3.11      8.5±1.40µs        ? ?/sec    1.00      2.7±0.13µs        ? ?/sec
int64_add_checked(0.1)                  3.15      9.6±1.01µs        ? ?/sec    1.00      3.0±0.18µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.30      9.9±0.95µs        ? ?/sec    1.00      7.6±0.39µs        ? ?/sec
int64_add_checked_overflow              1.00      9.3±0.38µs        ? ?/sec    1.28     11.9±0.49µs        ? ?/sec
int64_add_checked_scalar(0)             3.43      9.2±0.32µs        ? ?/sec    1.00      2.7±0.09µs        ? ?/sec
int64_add_checked_scalar(0.1)           3.96     10.7±0.65µs        ? ?/sec    1.00      2.7±0.13µs        ? ?/sec
int64_multiply(0)                       1.00      3.4±0.14µs        ? ?/sec    1.00      3.3±0.15µs        ? ?/sec
int64_multiply(0.1)                     1.01      3.6±0.19µs        ? ?/sec    1.00      3.5±0.22µs        ? ?/sec
int64_multiply_checked(0)               2.27      8.0±1.05µs        ? ?/sec    1.00      3.5±0.16µs        ? ?/sec
int64_multiply_checked(0.1)             2.88     10.0±1.31µs        ? ?/sec    1.00      3.5±0.17µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1jwtivje-04701ce0-x6d6

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6864693605-5054-hpbfp 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 120.0s
Peak memory 14.2 MiB
Avg memory 13.3 MiB
CPU user 117.0s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 115.0s
Peak memory 14.0 MiB
Avg memory 13.0 MiB
CPU user 111.1s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
  RUSTFLAGS: -C target-cpu=x86-64-v3
resources:
  arch: amd64
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int64_add(0)                            1.00  1777.1±11.27ns        ? ?/sec    1.00   1784.0±9.29ns        ? ?/sec
int64_add(0.1)                          1.00  1973.7±33.34ns        ? ?/sec    1.00  1972.8±20.81ns        ? ?/sec
int64_add_checked(0)                    2.42      6.0±1.01µs        ? ?/sec    1.00      2.5±0.01µs        ? ?/sec
int64_add_checked(0.1)                  3.28      7.4±0.80µs        ? ?/sec    1.00      2.2±0.01µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.83      7.9±0.83µs        ? ?/sec    1.00      4.3±0.07µs        ? ?/sec
int64_add_checked_overflow              1.00      7.4±0.06µs        ? ?/sec    1.22      9.1±0.08µs        ? ?/sec
int64_add_checked_scalar(0)             4.13      7.6±0.06µs        ? ?/sec    1.00  1842.8±12.17ns        ? ?/sec
int64_add_checked_scalar(0.1)           5.29      8.7±0.07µs        ? ?/sec    1.00  1647.4±11.12ns        ? ?/sec
int64_multiply(0)                       1.03      2.3±0.03µs        ? ?/sec    1.00      2.2±0.02µs        ? ?/sec
int64_multiply(0.1)                     1.03      2.4±0.02µs        ? ?/sec    1.00      2.3±0.02µs        ? ?/sec
int64_multiply_checked(0)               2.02      6.1±0.96µs        ? ?/sec    1.00      3.0±0.02µs        ? ?/sec
int64_multiply_checked(0.1)             2.50      7.4±0.79µs        ? ?/sec    1.00      2.9±0.08µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1jwtivje-ad4e1533-4nvc

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6864697000-5056-v578g 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 120.0s
Peak memory 14.0 MiB
Avg memory 13.1 MiB
CPU user 117.0s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 115.0s
Peak memory 14.1 MiB
Avg memory 13.0 MiB
CPU user 111.1s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: arithmetic_kernels

Comparing vectorize-checked-arithmetic (6035cda) to 48ca288 diff

Run configuration
run benchmark arithmetic_kernels
baseline:
  ref: 48ca288b6b
env:
  BENCH_FILTER: ^int64_(multiply|add)
  RUSTFLAGS: -C target-cpu=x86-64-v3 -C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6
resources:
  arch: amd64
shards: 1
Details
group                                   base                                   changed
-----                                   ----                                   -------
int64_add(0)                            1.00  1520.1±23.92ns        ? ?/sec    1.02  1547.0±18.83ns        ? ?/sec
int64_add(0.1)                          1.00      2.0±0.02µs        ? ?/sec    1.01      2.0±0.03µs        ? ?/sec
int64_add_checked(0)                    2.78      5.7±0.94µs        ? ?/sec    1.00      2.1±0.04µs        ? ?/sec
int64_add_checked(0.1)                  3.30      7.6±0.83µs        ? ?/sec    1.00      2.3±0.03µs        ? ?/sec
int64_add_checked_null_slot_overflow    1.84      8.4±0.89µs        ? ?/sec    1.00      4.6±0.10µs        ? ?/sec
int64_add_checked_overflow              1.00      7.5±0.06µs        ? ?/sec    1.24      9.2±0.14µs        ? ?/sec
int64_add_checked_scalar(0)             4.46      7.5±0.08µs        ? ?/sec    1.00  1673.7±29.10ns        ? ?/sec
int64_add_checked_scalar(0.1)           5.26      8.6±0.12µs        ? ?/sec    1.00  1643.6±20.56ns        ? ?/sec
int64_multiply(0)                       1.00      2.3±0.04µs        ? ?/sec    1.05      2.4±0.04µs        ? ?/sec
int64_multiply(0.1)                     1.00      2.4±0.05µs        ? ?/sec    1.01      2.4±0.12µs        ? ?/sec
int64_multiply_checked(0)               1.93      5.9±0.91µs        ? ?/sec    1.00      3.0±0.09µs        ? ?/sec
int64_multiply_checked(0.1)             2.43      7.7±0.82µs        ? ?/sec    1.00      3.2±0.09µs        ? ?/sec

Per-runner information
arithmetic_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1jwtivje-1287609b-b8hd

Instance: c4-highmem-16 (12 vCPU / 65 GiB)

uname:

Linux bench-c6864699158-5057-hxfh2 6.12.105+ #1 SMP Sat Sep 19 07:57:03 UTC 2026 x86_64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench arithmetic_kernels
CPU Details (lscpu)
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           52 bits physical, 57 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               GenuineIntel
Model name:                              INTEL(R) XEON(R) PLATINUM 8581C CPU @ 2.30GHz
CPU family:                              6
Model:                                   207
Thread(s) per core:                      2
Core(s) per socket:                      8
Socket(s):                               1
Stepping:                                2
BogoMIPS:                                4600.00
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid cldemote movdiri movdir64b fsrm md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 arch_capabilities
Hypervisor vendor:                       KVM
Virtualization type:                     full
L1d cache:                               384 KiB (8 instances)
L1i cache:                               256 KiB (8 instances)
L2 cache:                                16 MiB (8 instances)
L3 cache:                                260 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Resource Usage

base (merge-base)

Metric Value
Wall time 115.0s
Peak memory 15.0 MiB
Avg memory 13.7 MiB
CPU user 109.1s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 115.0s
Peak memory 15.0 MiB
Avg memory 14.0 MiB
CPU user 111.1s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@mbutrovich

Copy link
Copy Markdown
Contributor Author

Could you share benchmark numbers for them, or leave them on try_op!?

Int64 mul now uses overflowing_mul instead of multiplying in i128 (6035cda). Without and with 10% nulls, int64_multiply_checked measured 1.35x and 2.25x on Neoverse-V2, 2.29x and 2.86x on Xeon 8581C, and 2.03x and 2.55x with x86-64-v3, where it was 0.65x and 0.84x. In i128, the multiply stayed a scalar imul while LLVM packed each row's overflow flag into vector registers around it. With overflowing_mul, x86-64 runs a scalar imul, seto and or per row, and x86-64-v3 handles eight rows per iteration without stack spills. The unchanged int64_add measured 0.98x to 1.01x in the same runs.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

arrow-core Core crates related to representing arrow data arrow-kernels Crates that transform arrow data (e.g. compute, cast)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants