summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Kobert <dennis@kobert.dev>2020-01-12 20:06:33 +0100
committerDennis Kobert <dennis@kobert.dev>2020-01-12 20:06:33 +0100
commite3b8e2dadec5009ec1c3de72a202583f65129993 (patch)
tree8cfa17467d45f0ce0cb9871e3250788ef5cecd71
parent0f9b907deef5129141c0be52db12f6c0e8c054a4 (diff)
Improve the hashing by not saving invalid results
-rw-r--r--src/solvers/gpu/output.rs11
-rw-r--r--src/solvers/gpusolver.rs2
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<Message>,
row_requests: HashMap<u64, Vec<Vec<u32>>>,
results_requests: HashMap<u64, ResultMessage>,
+ banned_requests: HashSet<u64>,
}
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<Vec<RowResult>> {
@@ -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);