Skip to content

Commit

Permalink
Merge pull request #1609 from davidhewitt/bench-gil
Browse files Browse the repository at this point in the history
benches: add bench_gil
  • Loading branch information
davidhewitt authored May 17, 2021
2 parents 6f63f63 + 0cc77c7 commit 51ba541
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
7 changes: 6 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"] }
Expand Down Expand Up @@ -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",
Expand All @@ -83,4 +88,4 @@ members = [
[package.metadata.docs.rs]
no-default-features = true
features = ["macros", "num-bigint", "num-complex", "hashbrown", "serde", "multiple-pymethods"]
rustdoc-args = ["--cfg", "docsrs"]
rustdoc-args = ["--cfg", "docsrs"]
41 changes: 41 additions & 0 deletions benches/bench_gil.rs
Original file line number Diff line number Diff line change
@@ -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);

0 comments on commit 51ba541

Please sign in to comment.