diff --git a/changepoint/Cargo.toml b/changepoint/Cargo.toml index f2b98d9..6ad671f 100644 --- a/changepoint/Cargo.toml +++ b/changepoint/Cargo.toml @@ -49,3 +49,11 @@ harness = false [[bench]] name = "bocpd_truncated" harness = false + +[[bench]] +name = "argpcpd" +harness = false + +[profile.profiling] +inherits = "release" +debug = 2 diff --git a/changepoint/benches/argpcpd.rs b/changepoint/benches/argpcpd.rs new file mode 100644 index 0000000..21c1e10 --- /dev/null +++ b/changepoint/benches/argpcpd.rs @@ -0,0 +1,43 @@ +use changepoint::*; +use criterion::*; +use rv::process::gaussian::kernel::{ConstantKernel, RBFKernel, WhiteKernel}; + +fn bench_argpcpd(c: &mut Criterion) { + let raw_data: &str = include_str!("../../resources/TB3MS.csv"); + let data: Vec = raw_data + .lines() + .skip(1) + .map(|line| line.split_at(11).1.parse().unwrap()) + .collect(); + + let mut group = c.benchmark_group("Argpcp"); + + for nelems in (0..500).step_by(100) { + let subdata: Vec = data.iter().take(nelems).copied().collect(); + + group.throughput(Throughput::Elements(nelems as u64)); + group.bench_with_input( + BenchmarkId::from_parameter(nelems), + &subdata, + |b, data| { + b.iter(|| { + let constant_kernel = ConstantKernel::new(0.5).unwrap(); + let rbf_kernel = RBFKernel::new(10.0).unwrap(); + let white_kernel = WhiteKernel::new(0.01).unwrap(); + let kernel = constant_kernel * rbf_kernel + white_kernel; + // Create the Argpcp processor + let mut cpd = + Argpcp::new(kernel, 3, 2.0, 1.0, -5.0, 1.0, 1.0); + + // Feed data into change point detector + let _res: Vec> = + data.iter().map(|d| cpd.step(d).to_vec()).collect(); + }); + }, + ); + } + group.finish(); +} + +criterion_group!(benches, bench_argpcpd); +criterion_main!(benches); diff --git a/changepoint/src/gp/mod.rs b/changepoint/src/gp/mod.rs index f666090..48e9430 100644 --- a/changepoint/src/gp/mod.rs +++ b/changepoint/src/gp/mod.rs @@ -385,11 +385,11 @@ where self.mrc = self.run_length_pr.len(); // Adjust other variables - self.u = self.u.view((0, 0), (self.mrc - 1, self.mrc - 1)).into(); + self.u.resize_mut(self.mrc - 1, self.mrc - 1, 0.0); self.last_nlml = self.last_nlml.rows_range(0..(self.mrc - 1)).into(); - self.alpha = self.alpha.view((0, 0), (self.mrc - 1, 1)).into(); - self.alpha_t = self.alpha_t.view((0, 0), (self.mrc - 1, 1)).into(); - self.beta_t = self.beta_t.view((0, 0), (self.mrc - 1, 1)).into(); + self.alpha.resize_mut(self.mrc - 1, 1, 0.0); + self.alpha_t.resize_mut(self.mrc - 1, 1, 0.0); + self.beta_t.resize_mut(self.mrc - 1, 1, 0.0); &self.run_length_pr }