Skip to content

Commit

Permalink
Update the benchamrks to use lazy_static setup
Browse files Browse the repository at this point in the history
  • Loading branch information
Guillaume Fraux committed Apr 4, 2017
1 parent 4f1a1c4 commit 2bc493f
Show file tree
Hide file tree
Showing 5 changed files with 224 additions and 121 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ clap = "2"

[dev-dependencies]
bencher = "0.1"
lazy_static = "0.2"
rand = "0.3"

[[bench]]
Expand Down
37 changes: 24 additions & 13 deletions benches/argon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,53 +3,64 @@

#[macro_use]
extern crate bencher;
#[macro_use]
extern crate lazy_static;
extern crate rand;
extern crate lumol;
extern crate lumol_input;

use std::sync::RwLock;

use bencher::Bencher;
use rand::Rng;

use lumol::sys::EnergyCache;
use lumol::sys::{EnergyCache, System};
use lumol::types::Vector3D;

#[macro_use]
mod utils;

fn energy(bencher: &mut Bencher) {
let system = utils::get_system("argon");
lazy_static!(static ref SYSTEM: System = utils::get_system("argon"););
bencher.iter(||{
let _ = system.potential_energy();
SYSTEM.potential_energy();
})
}

fn forces(bencher: &mut Bencher) {
let system = utils::get_system("argon");
lazy_static!(static ref SYSTEM: System = utils::get_system("argon"););
bencher.iter(||{
let _ = system.forces();
SYSTEM.forces();
})
}

fn virial(bencher: &mut Bencher) {
let system = utils::get_system("argon");
lazy_static!(static ref SYSTEM: System = utils::get_system("argon"););
bencher.iter(||{
let _ = system.virial();
SYSTEM.virial();
})
}

fn cache_move_particle(bencher: &mut Bencher) {
let system = utils::get_system("argon");
let mut cache = EnergyCache::new();
cache.init(&system);
lazy_static!(
static ref SYSTEM: System = utils::get_system("argon");

static ref CACHE: RwLock<EnergyCache> = {
let mut cache = EnergyCache::new();
cache.init(&SYSTEM);
RwLock::new(cache)
};
);

let mut rng = utils::get_rng(654646);

let particle: usize = rng.gen_range(0, system.size());
let mut delta = system[particle].position;
let particle: usize = rng.gen_range(0, SYSTEM.size());
let mut delta = SYSTEM[particle].position;
delta += Vector3D::new(rng.gen(), rng.gen(), rng.gen());

let mut cache = CACHE.write().unwrap();
bencher.iter(||{
cache.move_particles_cost(&system, vec![particle], &[delta])
cache.move_particles_cost(&SYSTEM, vec![particle], &[delta]);
})
}

Expand Down
82 changes: 52 additions & 30 deletions benches/nacl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,109 +3,131 @@

#[macro_use]
extern crate bencher;
#[macro_use]
extern crate lazy_static;
extern crate rand;
extern crate lumol;
extern crate lumol_input;

use std::sync::RwLock;

use bencher::Bencher;
use rand::Rng;

use lumol::energy::{Ewald, SharedEwald, Wolf, GlobalPotential};
use lumol::sys::EnergyCache;
use lumol::sys::{EnergyCache, System};
use lumol::types::Vector3D;

#[macro_use]
mod utils;

fn energy_ewald(bencher: &mut Bencher) {
let system = utils::get_system("nacl");
lazy_static!(static ref SYSTEM: System = utils::get_system("nacl"););
let ewald = SharedEwald::new(Ewald::new(9.5, 7));

bencher.iter(||{
let _ = ewald.energy(&system);
ewald.energy(&SYSTEM);
})
}

fn forces_ewald(bencher: &mut Bencher) {
let system = utils::get_system("nacl");
lazy_static!(static ref SYSTEM: System = utils::get_system("nacl"););
let ewald = SharedEwald::new(Ewald::new(9.5, 7));

bencher.iter(||{
let _ = ewald.forces(&system);
ewald.forces(&SYSTEM);
})
}

fn virial_ewald(bencher: &mut Bencher) {
let system = utils::get_system("nacl");
lazy_static!(static ref SYSTEM: System = utils::get_system("nacl"););
let ewald = SharedEwald::new(Ewald::new(9.5, 7));

bencher.iter(||{
let _ = ewald.virial(&system);
ewald.virial(&SYSTEM);
})
}

fn energy_wolf(bencher: &mut Bencher) {
let system = utils::get_system("nacl");
lazy_static!(static ref SYSTEM: System = utils::get_system("nacl"););
let wolf = Wolf::new(12.0);

bencher.iter(||{
let _ = wolf.energy(&system);
wolf.energy(&SYSTEM);
})
}

fn forces_wolf(bencher: &mut Bencher) {
let system = utils::get_system("nacl");
lazy_static!(static ref SYSTEM: System = utils::get_system("nacl"););
let wolf = Wolf::new(12.0);

bencher.iter(||{
let _ = wolf.forces(&system);
wolf.forces(&SYSTEM);
})
}

fn virial_wolf(bencher: &mut Bencher) {
let system = utils::get_system("nacl");
lazy_static!(static ref SYSTEM: System = utils::get_system("nacl"););
let wolf = Wolf::new(12.0);

bencher.iter(||{
let _ = wolf.virial(&system);
wolf.virial(&SYSTEM);
})
}

fn cache_move_particle_ewald(bencher: &mut Bencher) {
let mut system = utils::get_system("nacl");
system.interactions_mut().set_coulomb(
Box::new(SharedEwald::new(Ewald::new(9.5, 7)))
lazy_static!(
static ref SYSTEM: System = {
let mut system = utils::get_system("nacl");
system.interactions_mut().set_coulomb(
Box::new(SharedEwald::new(Ewald::new(9.5, 7)))
);
system
};

static ref CACHE: RwLock<EnergyCache> = {
let mut cache = EnergyCache::new();
cache.init(&SYSTEM);
RwLock::new(cache)
};
);

let mut cache = EnergyCache::new();
cache.init(&system);

let mut rng = utils::get_rng(41201154);

let particle: usize = rng.gen_range(0, system.size());
let mut delta = system[particle].position;
let particle: usize = rng.gen_range(0, SYSTEM.size());
let mut delta = SYSTEM[particle].position;
delta += Vector3D::new(rng.gen(), rng.gen(), rng.gen());

let mut cache = CACHE.write().unwrap();
bencher.iter(||{
cache.move_particles_cost(&system, vec![particle], &[delta])
cache.move_particles_cost(&SYSTEM, vec![particle], &[delta]);
})
}

fn cache_move_particle_wolf(bencher: &mut Bencher) {
let mut system = utils::get_system("nacl");
system.interactions_mut().set_coulomb(Box::new(Wolf::new(12.0)));

let mut cache = EnergyCache::new();
cache.init(&system);
lazy_static!(
static ref SYSTEM: System = {
let mut system = utils::get_system("nacl");
system.interactions_mut().set_coulomb(Box::new(Wolf::new(12.0)));
system
};

static ref CACHE: RwLock<EnergyCache> = {
let mut cache = EnergyCache::new();
cache.init(&SYSTEM);
RwLock::new(cache)
};
);

let mut rng = utils::get_rng(474114);

let particle: usize = rng.gen_range(0, system.size());
let mut delta = system[particle].position;
let particle: usize = rng.gen_range(0, SYSTEM.size());
let mut delta = SYSTEM[particle].position;
delta += Vector3D::new(rng.gen(), rng.gen(), rng.gen());

let mut cache = CACHE.write().unwrap();
bencher.iter(||{
cache.move_particles_cost(&system, vec![particle], &[delta])
cache.move_particles_cost(&SYSTEM, vec![particle], &[delta]);
})
}

Expand Down
71 changes: 48 additions & 23 deletions benches/propane.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,74 +3,99 @@

#[macro_use]
extern crate bencher;
#[macro_use]
extern crate lazy_static;
extern crate rand;
extern crate lumol;
extern crate lumol_input;

use std::sync::RwLock;

use bencher::Bencher;
use rand::Rng;

use lumol::sys::EnergyCache;
use lumol::sys::{EnergyCache, System};
use lumol::types::Vector3D;

#[macro_use]
mod utils;

fn energy(bencher: &mut Bencher) {
let system = utils::get_system("propane");
lazy_static!(static ref SYSTEM: System = utils::get_system("propane"););
bencher.iter(||{
let _ = system.potential_energy();
SYSTEM.potential_energy();
})
}

fn forces(bencher: &mut Bencher) {
let system = utils::get_system("propane");
lazy_static!(static ref SYSTEM: System = utils::get_system("propane"););
bencher.iter(||{
let _ = system.forces();
SYSTEM.forces();
})
}

fn virial(bencher: &mut Bencher) {
let system = utils::get_system("propane");
lazy_static!(static ref SYSTEM: System = utils::get_system("propane"););
bencher.iter(||{
let _ = system.virial();
SYSTEM.virial();
})
}

fn cache_move_particles(bencher: &mut Bencher) {
let system = utils::get_system("propane");
let mut cache = EnergyCache::new();
cache.init(&system);
lazy_static!(
static ref SYSTEM: System = utils::get_system("argon");

static ref CACHE: RwLock<EnergyCache> = {
let mut cache = EnergyCache::new();
cache.init(&SYSTEM);
RwLock::new(cache)
};
);

let mut rng = utils::get_rng(84541545);

let molecule = rng.choose(system.molecules()).unwrap();

let molecule = rng.choose(SYSTEM.molecules()).unwrap();
let mut delta = vec![];
for i in molecule {
let position = system[i].position;
let position = SYSTEM[i].position;
delta.push(position + Vector3D::new(rng.gen(), rng.gen(), rng.gen()));
}

let mut cache = CACHE.write().unwrap();
bencher.iter(||{
cache.move_particles_cost(&system, molecule.iter().collect(), &delta)
cache.move_particles_cost(
&SYSTEM, molecule.iter().collect(), &delta
);
})
}

fn cache_move_all_rigid_molecules(bencher: &mut Bencher) {
let mut system = utils::get_system("propane");
let mut cache = EnergyCache::new();
cache.init(&system);

let mut rng = utils::get_rng(7012121);
for molecule in system.molecules().to_owned() {
let delta = Vector3D::new(rng.gen(), rng.gen(), rng.gen());
for i in molecule {
system[i].position += delta;
lazy_static!(
static ref SYSTEM: RwLock<System> = RwLock::new(utils::get_system("argon"));

static ref CACHE: RwLock<EnergyCache> = {
let mut cache = EnergyCache::new();
cache.init(&SYSTEM.read().unwrap());
RwLock::new(cache)
};
);

{
let mut system = SYSTEM.write().unwrap();
let mut rng = utils::get_rng(7012121);
for molecule in system.molecules().to_owned() {
let delta = Vector3D::new(rng.gen(), rng.gen(), rng.gen());
for i in molecule {
system[i].position += delta;
}
}
}

let mut cache = CACHE.write().unwrap();
let system = SYSTEM.read().unwrap();
bencher.iter(||{
cache.move_all_rigid_molecules_cost(&system)
cache.move_all_rigid_molecules_cost(&system);
})
}

Expand Down
Loading

0 comments on commit 2bc493f

Please sign in to comment.