parallel grid deposit

This commit is contained in:
Simon Gardling
2021-03-31 15:48:58 -04:00
parent b5bc14faa3
commit 99960c9523
3 changed files with 43 additions and 9 deletions

View File

@@ -126,11 +126,11 @@ impl Model {
}
Model {
agents: (0..n_particles)
agents: (0..(n_particles-1))
.map(|i| Agent::new(width, height, i / particles_per_grid, &mut rng, i))
.collect(),
grids: (0..n_populations)
.map(|_| Grid::new(width, height, &mut rng))
.map(|_| Grid::new(width, height, &mut rng, vec![]))
.collect(),
attraction_table,
diffusivity,
@@ -156,6 +156,24 @@ impl Model {
let mut time_per_agent_list: Vec<f64> = Vec::new();
let mut time_per_step_list: Vec<f64> = Vec::new();
println!("Doing some population stuff...");
let time_1 = Instant::now();
let mut i_pop: Vec<Vec<usize>> = Vec::new();
for i in (0..(self.grids.len())) {
i_pop.push(vec![]);
}
for agent in self.agents.iter() {
i_pop[agent.population_id].push(agent.i);
}
for i in (0..(self.grids.len())) {
self.grids[i].i = i_pop[i].clone();
}
println!("Took {}ms", time_1.elapsed().as_millis());
let use_exp_deposit: bool = true;
for i in 0..steps {
if debug {
println!("Starting tick for all agents...")
@@ -222,9 +240,19 @@ impl Model {
);
});
// Deposit // TODO - Make this parallel
for agent in self.agents.iter() {
self.grids[agent.population_id].deposit(agent.x, agent.y);
// Deposit
if use_exp_deposit {
let agent_list = self.agents.clone();
self.grids.par_iter_mut().for_each(|grid|{
for i in (0..grid.i.len()) {
let agent = &agent_list[i];
grid.deposit(agent.x, agent.y);
}
});
} else {
for agent in self.agents.iter() {
self.grids[agent.population_id].deposit(agent.x, agent.y);
}
}
// Diffuse + Decay