Merge pull request #1609 from davidhewitt/bench-gil
benches: add bench_gil
This commit is contained in:
commit
51ba541a18
|
@ -32,6 +32,7 @@ serde = {version = "1.0", optional = true}
|
|||
|
||||
[dev-dependencies]
|
||||
assert_approx_eq = "1.1.0"
|
||||
criterion = "0.3"
|
||||
trybuild = "1.0.23"
|
||||
rustversion = "1.0"
|
||||
proptest = { version = "0.10.1", default-features = false, features = ["std"] }
|
||||
|
@ -69,6 +70,10 @@ auto-initialize = []
|
|||
# Optimizes PyObject to Vec conversion and so on.
|
||||
nightly = []
|
||||
|
||||
[[bench]]
|
||||
name = "bench_gil"
|
||||
harness = false
|
||||
|
||||
[workspace]
|
||||
members = [
|
||||
"pyo3-macros",
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
use criterion::{criterion_group, criterion_main, BatchSize, Bencher, Criterion};
|
||||
|
||||
use pyo3::{prelude::*, GILPool};
|
||||
|
||||
fn bench_clean_gilpool_new(b: &mut Bencher) {
|
||||
Python::with_gil(|_py| {
|
||||
b.iter(|| {
|
||||
let _ = unsafe { GILPool::new() };
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
fn bench_clean_acquire_gil(b: &mut Bencher) {
|
||||
// Acquiring first GIL will also create a "clean" GILPool, so this measures the Python overhead.
|
||||
b.iter(|| {
|
||||
let _ = Python::acquire_gil();
|
||||
});
|
||||
}
|
||||
|
||||
fn bench_dirty_acquire_gil(b: &mut Bencher) {
|
||||
let obj = Python::with_gil(|py| py.None());
|
||||
b.iter_batched(
|
||||
|| {
|
||||
// Clone and drop an object so that the GILPool has work to do.
|
||||
let _ = obj.clone();
|
||||
},
|
||||
|_| {
|
||||
let _ = Python::acquire_gil();
|
||||
},
|
||||
BatchSize::NumBatches(1),
|
||||
);
|
||||
}
|
||||
|
||||
fn criterion_benchmark(c: &mut Criterion) {
|
||||
c.bench_function("clean_gilpool_new", bench_clean_gilpool_new);
|
||||
c.bench_function("clean_acquire_gil", bench_clean_acquire_gil);
|
||||
c.bench_function("dirty_acquire_gil", bench_dirty_acquire_gil);
|
||||
}
|
||||
|
||||
criterion_group!(benches, criterion_benchmark);
|
||||
criterion_main!(benches);
|
Loading…
Reference in New Issue