Squashed 'vendor/ruvector/' content from commit b64c2172
git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
This commit is contained in:
119
crates/ruvector-nervous-system/benches/eprop_bench.rs
Normal file
119
crates/ruvector-nervous-system/benches/eprop_bench.rs
Normal file
@@ -0,0 +1,119 @@
|
||||
//! E-prop performance benchmarks
|
||||
|
||||
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
|
||||
use ruvector_nervous_system::plasticity::eprop::{EpropNetwork, EpropSynapse};
|
||||
|
||||
fn bench_synapse_update(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("synapse_update");
|
||||
|
||||
let mut synapse = EpropSynapse::new(0.5, 20.0);
|
||||
|
||||
group.bench_function("single_update", |b| {
|
||||
b.iter(|| {
|
||||
synapse.update(
|
||||
black_box(true),
|
||||
black_box(0.5),
|
||||
black_box(0.1),
|
||||
black_box(1.0),
|
||||
black_box(0.01),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_network_forward(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("network_forward");
|
||||
|
||||
for &hidden_size in &[100, 500, 1000] {
|
||||
let mut network = EpropNetwork::new(100, hidden_size, 10);
|
||||
let input = vec![0.5; 100];
|
||||
|
||||
group.throughput(Throughput::Elements(hidden_size as u64));
|
||||
group.bench_with_input(
|
||||
BenchmarkId::from_parameter(hidden_size),
|
||||
&hidden_size,
|
||||
|b, _| {
|
||||
b.iter(|| {
|
||||
network.forward(black_box(&input), black_box(1.0));
|
||||
});
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_network_backward(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("network_backward");
|
||||
|
||||
for &hidden_size in &[100, 500, 1000] {
|
||||
let mut network = EpropNetwork::new(100, hidden_size, 10);
|
||||
let input = vec![0.5; 100];
|
||||
let error = vec![0.1; 10];
|
||||
|
||||
// Run forward first to populate spike buffer
|
||||
network.forward(&input, 1.0);
|
||||
|
||||
group.throughput(Throughput::Elements(hidden_size as u64));
|
||||
group.bench_with_input(
|
||||
BenchmarkId::from_parameter(hidden_size),
|
||||
&hidden_size,
|
||||
|b, _| {
|
||||
b.iter(|| {
|
||||
network.backward(black_box(&error), black_box(0.01), black_box(1.0));
|
||||
});
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_online_step(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("online_step");
|
||||
|
||||
let mut network = EpropNetwork::new(100, 1000, 10);
|
||||
let input = vec![0.5; 100];
|
||||
let target = vec![1.0; 10];
|
||||
|
||||
group.throughput(Throughput::Elements(1000));
|
||||
group.bench_function("1000_neurons", |b| {
|
||||
b.iter(|| {
|
||||
network.online_step(
|
||||
black_box(&input),
|
||||
black_box(&target),
|
||||
black_box(1.0),
|
||||
black_box(0.01),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_memory_footprint(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("memory");
|
||||
|
||||
for &size in &[100, 500, 1000, 5000] {
|
||||
group.bench_with_input(BenchmarkId::new("create_network", size), &size, |b, &s| {
|
||||
b.iter(|| {
|
||||
let network = EpropNetwork::new(100, s, 10);
|
||||
black_box(network);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
criterion_group!(
|
||||
benches,
|
||||
bench_synapse_update,
|
||||
bench_network_forward,
|
||||
bench_network_backward,
|
||||
bench_online_step,
|
||||
bench_memory_footprint
|
||||
);
|
||||
criterion_main!(benches);
|
||||
Reference in New Issue
Block a user