Skip to content

Replace indexing with get_unchecked calls #143277

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

Closed

Conversation

GuillaumeGomez
Copy link
Member

Results are not very impressive though:

bench name current new diff
bench_i128 17.74 ns/iter (+/- 0.02) 17.5 ns/iter (+/- 0.24) -1.4%
bench_i128_max 38.81 ns/iter (+/- 0.05) 37.65 ns/iter (+/- 0.51) -3.0%
bench_i128_min 38.85 ns/iter (+/- 0.06) 37.47 ns/iter (+/- 0.75) -3.6%
bench_i16 17.61 ns/iter (+/- 0.02) 17.55 ns/iter (+/- 0.64) -0.3%
bench_i16_max 18.1 ns/iter (+/- 0.03) 18.07 ns/iter (+/- 0.46) -0.2%
bench_i16_min 18.47 ns/iter (+/- 0.15) 18.34 ns/iter (+/- 0.47) -0.7%
bench_i32 17.56 ns/iter (+/- 0.48) 17.64 ns/iter (+/- 0.06) 0.5%
bench_i32_max 21.04 ns/iter (+/- 0.12) 21.04 ns/iter (+/- 0.14) 0.0%
bench_i32_min 21.3 ns/iter (+/- 0.7) 21.12 ns/iter (+/- 0.06) -0.8%
bench_i64 17.61 ns/iter (+/- 0.07) 17.54 ns/iter (+/- 0.06) -0.4%
bench_i64_max 24.7 ns/iter (+/- 0.04) 24.72 ns/iter (+/- 0.29) 0.1%
bench_i64_min 25.28 ns/iter (+/- 0.04) 25.28 ns/iter (+/- 0.03) 0.0%
bench_i8 17.67 ns/iter (+/- 0.05) 17.62 ns/iter (+/- 0.02) -0.3%
bench_i8_max 17.63 ns/iter (+/- 0.09) 17.52 ns/iter (+/- 0.3) -0.6%
bench_i8_min 17.91 ns/iter (+/- 0.03) 17.79 ns/iter (+/- 0.06) -0.7%
bench_isize 17.62 ns/iter (+/- 0.07) 17.58 ns/iter (+/- 0.05) -0.2%
bench_isize_max 24.71 ns/iter (+/- 0.03) 24.72 ns/iter (+/- 0.03) 0.0%
bench_isize_min 25.28 ns/iter (+/- 0.04) 25.29 ns/iter (+/- 0.05) 0.0%
bench_u128 16.36 ns/iter (+/- 0.02) 16.05 ns/iter (+/- 0.03) -1.9%
bench_u128_max 38.97 ns/iter (+/- 0.25) 37.08 ns/iter (+/- 0.06) -4.8%
bench_u128_min 14.51 ns/iter (+/- 0.18) 13.8 ns/iter (+/- 0.27) -4.9%
bench_u16 14.73 ns/iter (+/- 0.27) 15.18 ns/iter (+/- 0.03) 3.1%
bench_u16_max 14.96 ns/iter (+/- 0.02) 14.97 ns/iter (+/- 0.05) 0.1%
bench_u16_min 14.78 ns/iter (+/- 0.24) 15.02 ns/iter (+/- 0.13) 1.6%
bench_u32 14.64 ns/iter (+/- 0.27) 14.66 ns/iter (+/- 0.11) 0.1%
bench_u32_max 17.5 ns/iter (+/- 0.69) 17.81 ns/iter (+/- 0.31) 1.8%
bench_u32_min 14.67 ns/iter (+/- 0.11) 15.01 ns/iter (+/- 0.11) 2.3%
bench_u64 15.01 ns/iter (+/- 0.03) 14.96 ns/iter (+/- 0.16) -0.3%
bench_u64_max 21.83 ns/iter (+/- 0.03) 21.84 ns/iter (+/- 0.17) 0.0%
bench_u64_min 14.63 ns/iter (+/- 0.04) 14.62 ns/iter (+/- 0.01) -0.1%
bench_u8 14.41 ns/iter (+/- 0.04) 14.53 ns/iter (+/- 0.34) 0.8%
bench_u8_max 14.7 ns/iter (+/- 0.07) 14.58 ns/iter (+/- 0.12) -0.8%
bench_u8_min 13.8 ns/iter (+/- 0.25) 14.43 ns/iter (+/- 0.31) 4.6%
bench_usize 14.8 ns/iter (+/- 0.04) 14.81 ns/iter (+/- 0.1) 0.1%
bench_usize_max 21.86 ns/iter (+/- 0.02) 21.83 ns/iter (+/- 0.02) -0.1%
bench_usize_min 14.62 ns/iter (+/- 0.19) 15.52 ns/iter (+/- 0.23) 6.2%
Benchmark code
#![feature(test)]

extern crate test;

use test::{Bencher, black_box};

#[inline(always)]
fn convert_to_string<T: ToString>(n: T) -> String {
    n.to_string()
}

macro_rules! decl_benches {
    ($($name:ident $name_min:ident $name_max:ident: $ty:ident,)+) => {
        $(
            #[bench]
            fn $name(c: &mut Bencher) {
                c.iter(|| convert_to_string(black_box({ let nb: $ty = 20; nb })));
            }
            #[bench]
            fn $name_min(c: &mut Bencher) {
                c.iter(|| convert_to_string(black_box({ let nb: $ty = $ty::MIN; nb })));
            }
            #[bench]
            fn $name_max(c: &mut Bencher) {
                c.iter(|| convert_to_string(black_box({ let nb: $ty = $ty::MAX; nb })));
            }
        )+
    }
}

decl_benches! {
    bench_u8 bench_u8_min bench_u8_max: u8,
    bench_i8 bench_i8_min bench_i8_max: i8,
    bench_u16 bench_u16_min bench_u16_max: u16,
    bench_i16 bench_i16_min bench_i16_max: i16,
    bench_u32 bench_u32_min bench_u32_max: u32,
    bench_i32 bench_i32_min bench_i32_max: i32,
    bench_u64 bench_u64_min bench_u64_max: u64,
    bench_i64 bench_i64_min bench_i64_max: i64,
    bench_u128 bench_u128_min bench_u128_max: u128,
    bench_i128 bench_i128_min bench_i128_max: i128,
    bench_usize bench_usize_min bench_usize_max: usize,
    bench_isize bench_isize_min bench_isize_max: isize,
}

And there is no difference in the generated asm, so opening it and closing it right away to be able to link to it.

r? ghost

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Jul 1, 2025
@GuillaumeGomez GuillaumeGomez deleted the get-unchecked branch July 1, 2025 11:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants