Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skip Performance Improvement #3

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

M-Schwab
Copy link

@M-Schwab M-Schwab commented Feb 14, 2024

Adds an implementation of the Iterator method nth() to improve performance of skip, as well as transposes dir_values for better cache locality for higher dimensions.

From my initial tests, performance of skip is around a order of magnitude better when using dims==1000, though there is a fair bit of run/run variance.

Benchmarks

Skip benchmarks with both changes applied:

test bench_skip_f32  ... bench:     119,895 ns/iter (+/- 679)
test bench_skip_f64  ... bench:     204,413 ns/iter (+/- 1,197)
test bench_skip_i128 ... bench:     647,025 ns/iter (+/- 2,918)
test bench_skip_i16  ... bench:      58,755 ns/iter (+/- 146)
test bench_skip_i32  ... bench:     110,863 ns/iter (+/- 606)
test bench_skip_i64  ... bench:     190,389 ns/iter (+/- 1,264)
test bench_skip_i8   ... bench:       5,415 ns/iter (+/- 39)
test bench_skip_u128 ... bench:     666,928 ns/iter (+/- 5,908)
test bench_skip_u16  ... bench:      64,398 ns/iter (+/- 211)
test bench_skip_u32  ... bench:     104,274 ns/iter (+/- 431)
test bench_skip_u64  ... bench:     192,021 ns/iter (+/- 1,606)
test bench_skip_u8   ... bench:       5,407 ns/iter (+/- 30)

Skip benchmarks with only nth() implementation:

test bench_skip_f32  ... bench:     971,085 ns/iter (+/- 1,977)
test bench_skip_f64  ... bench:   1,027,240 ns/iter (+/- 10,761)
test bench_skip_i128 ... bench:   1,565,479 ns/iter (+/- 7,819)
test bench_skip_i16  ... bench:     944,982 ns/iter (+/- 2,097)
test bench_skip_i32  ... bench:     949,815 ns/iter (+/- 5,469)
test bench_skip_i64  ... bench:   1,017,815 ns/iter (+/- 10,016)
test bench_skip_i8   ... bench:     222,445 ns/iter (+/- 793)
test bench_skip_u128 ... bench:   1,544,590 ns/iter (+/- 5,082)
test bench_skip_u16  ... bench:     943,580 ns/iter (+/- 2,294)
test bench_skip_u32  ... bench:     953,715 ns/iter (+/- 5,762)
test bench_skip_u64  ... bench:   1,020,136 ns/iter (+/- 7,373)
test bench_skip_u8   ... bench:     220,886 ns/iter (+/- 938)

Skip benchmarks with no changes:

test bench_skip_f32  ... bench:   1,121,124 ns/iter (+/- 16,917)
test bench_skip_f64  ... bench:   1,307,425 ns/iter (+/- 9,478)
test bench_skip_i128 ... bench:   2,023,980 ns/iter (+/- 18,240)
test bench_skip_i16  ... bench:   1,000,306 ns/iter (+/- 14,314)
test bench_skip_i32  ... bench:   1,057,683 ns/iter (+/- 17,767)
test bench_skip_i64  ... bench:   1,164,238 ns/iter (+/- 14,959)
test bench_skip_i8   ... bench:     228,253 ns/iter (+/- 3,651)
test bench_skip_u128 ... bench:   1,797,844 ns/iter (+/- 8,894)
test bench_skip_u16  ... bench:     993,490 ns/iter (+/- 15,821)
test bench_skip_u32  ... bench:   1,042,425 ns/iter (+/- 15,699)
test bench_skip_u64  ... bench:   1,162,531 ns/iter (+/- 15,850)
test bench_skip_u8   ... bench:     231,441 ns/iter (+/- 3,570)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant