georust / geozero

Zero-Copy reading and writing of geospatial data.
Apache License 2.0
322 stars 30 forks source link

Optimize MVT properties iteration #122

Closed nyurik closed 1 year ago

nyurik commented 1 year ago

Turns out there is ~25%~ about 8% difference in this:

    let data = (0..100).map(|v| v).collect::<Vec<_>>();
    c.bench_function("micro", |b| {
        b.iter(|| {
            for i in 0..data.len() / 2 {
                let key_idx = data[i * 2];
                let value_idx = data[i * 2 + 1];
                black_box(i);
                black_box(key_idx);
                black_box(value_idx);
            }
        });
    });
    c.bench_function("micro2", |b| {
        b.iter(|| {
            for (i, pair) in data.chunks(2).enumerate() {
                let [key_idx, value_idx] = pair else {unreachable!()};
                black_box(i);
                black_box(*key_idx);
                black_box(*value_idx);
            }
        });
    });