Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions newsfragments/6075.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Enable `PyListMethods::get_item_unchecked`, `PyTupleMethods::get_item_unchecked`, and `PyTupleMethods::get_borrowed_item_unchecked` under abi3 features.
16 changes: 9 additions & 7 deletions pyo3-benches/benches/bench_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::hint::black_box;
use codspeed_criterion_compat::{criterion_group, criterion_main, Bencher, Criterion};

use pyo3::prelude::*;
use pyo3::sync::critical_section::with_critical_section;
use pyo3::types::{PyList, PySequence};

fn iter_list(b: &mut Bencher<'_>) {
Expand Down Expand Up @@ -65,18 +66,20 @@ fn list_nth_back(b: &mut Bencher<'_>) {
});
}

#[cfg(not(Py_LIMITED_API))]
fn list_get_item_unchecked(b: &mut Bencher<'_>) {
Python::attach(|py| {
const LEN: usize = 50_000;
let list = PyList::new(py, 0..LEN).unwrap();
let mut sum = 0;
b.iter(|| {
for i in 0..LEN {
unsafe {
sum += list.get_item_unchecked(i).extract::<usize>().unwrap();
with_critical_section(&list, || {
b.iter(|| {
for i in 0..LEN {
// SAFETY: `i` is always in bounds and a critical section is held
sum += unsafe { list.get_item_unchecked(i) }
.extract::<usize>()
.unwrap();
}
}
});
});
});
}
Expand All @@ -95,7 +98,6 @@ fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("list_nth", list_nth);
c.bench_function("list_nth_back", list_nth_back);
c.bench_function("list_get_item", list_get_item);
#[cfg(not(Py_LIMITED_API))]
c.bench_function("list_get_item_unchecked", list_get_item_unchecked);
c.bench_function("sequence_from_list", sequence_from_list);
}
Expand Down
4 changes: 0 additions & 4 deletions pyo3-benches/benches/bench_tuple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ fn tuple_get_item(b: &mut Bencher<'_>) {
});
}

#[cfg(not(any(Py_LIMITED_API, PyPy)))]
fn tuple_get_item_unchecked(b: &mut Bencher<'_>) {
Python::attach(|py| {
const LEN: usize = 50_000;
Expand Down Expand Up @@ -72,7 +71,6 @@ fn tuple_get_borrowed_item(b: &mut Bencher<'_>) {
});
}

#[cfg(not(any(Py_LIMITED_API, PyPy)))]
fn tuple_get_borrowed_item_unchecked(b: &mut Bencher<'_>) {
Python::attach(|py| {
const LEN: usize = 50_000;
Expand Down Expand Up @@ -157,10 +155,8 @@ fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("tuple_get_item", tuple_get_item);
c.bench_function("tuple_nth", tuple_nth);
c.bench_function("tuple_nth_back", tuple_nth_back);
#[cfg(not(any(Py_LIMITED_API, PyPy)))]
c.bench_function("tuple_get_item_unchecked", tuple_get_item_unchecked);
c.bench_function("tuple_get_borrowed_item", tuple_get_borrowed_item);
#[cfg(not(any(Py_LIMITED_API, PyPy)))]
c.bench_function(
"tuple_get_borrowed_item_unchecked",
tuple_get_borrowed_item_unchecked,
Expand Down
Loading
Loading