From e3b8e2dadec5009ec1c3de72a202583f65129993 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sun, 12 Jan 2020 20:06:33 +0100 Subject: Improve the hashing by not saving invalid results --- src/solvers/gpu/output.rs | 11 ++++++++++- src/solvers/gpusolver.rs | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/solvers/gpu/output.rs b/src/solvers/gpu/output.rs index 9030586..4e52ab4 100644 --- a/src/solvers/gpu/output.rs +++ b/src/solvers/gpu/output.rs @@ -7,6 +7,7 @@ struct InBuffer { receiver: Receiver, row_requests: HashMap>>, results_requests: HashMap, + banned_requests: HashSet, } impl InBuffer { @@ -15,6 +16,7 @@ impl InBuffer { receiver, row_requests: HashMap::new(), results_requests: HashMap::new(), + banned_requests: HashSet::new(), } } fn read(&mut self) -> Option> { @@ -34,10 +36,17 @@ impl InBuffer { result_walls, )); } else { - self.results_requests.insert(results.id, results); + if results.data.iter().any(|x| *x != 0) { + self.results_requests.insert(results.id, results); + } else { + self.banned_requests.insert(results.id); + } } } Message::OutputMessage((id, output)) => { + if self.banned_requests.remove(&id) { + continue; + } if let Some(results) = self.results_requests.get(&id) { return Some(Self::calc_results( results.valid_walls().as_ref(), diff --git a/src/solvers/gpusolver.rs b/src/solvers/gpusolver.rs index 380eb6a..7133e95 100644 --- a/src/solvers/gpusolver.rs +++ b/src/solvers/gpusolver.rs @@ -45,7 +45,7 @@ impl GpuSolver { let mut new_num = Vec::from(numbers); if index as usize == numbers.len() { let mut info = sys_info::mem_info().unwrap(); - while info.avail < info.total / 2 { + while info.avail < 1024 * 1024 { std::thread::sleep(std::time::Duration::from_millis(5)); info = sys_info::mem_info().unwrap(); println!("mem wait {:?}", info); -- cgit v1.2.3-54-g00ecf