From c963136144598e242f325b64fcf194c978321904 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sat, 11 Jan 2020 21:29:11 +0100 Subject: Do some early cpu pruning --- src/solvers/intuitive.rs | 9 +++++++++ src/solvers/opencl.rs | 3 +++ 2 files changed, 12 insertions(+) (limited to 'src') diff --git a/src/solvers/intuitive.rs b/src/solvers/intuitive.rs index bb23a39..bf80433 100755 --- a/src/solvers/intuitive.rs +++ b/src/solvers/intuitive.rs @@ -80,11 +80,20 @@ impl NormalSolver { } fn permute(&self, up: usize, index: usize, curr_mask: u64, numbers: &[u32]) { + if curr_mask.count_ones() < index as u32 * (self.n - 1) { + return; + } let mut new_num = Vec::from(numbers); let start = numbers[index as usize] / self.chunk; if index as usize == numbers.len() - 1 { //#[cfg(feature = "gpu")] //{ + let mut info = sys_info::mem_info().unwrap(); + while info.avail < info.total / 8 { + std::thread::sleep_ms(50); + info = sys_info::mem_info().unwrap(); + println!("mem wait {:?}", info); + } let i = self.n - 2 - numbers[index] / self.chunk; self.senders[i as usize] .send(super::opencl::Job::new(new_num, curr_mask)) diff --git a/src/solvers/opencl.rs b/src/solvers/opencl.rs index 550ace9..431f467 100644 --- a/src/solvers/opencl.rs +++ b/src/solvers/opencl.rs @@ -141,6 +141,9 @@ impl GpuSolver { fn get_off(&self, queue: usize) -> u64 { let chunk = self.permutations.len() / self.n as usize; let off = self.permutations.len() - chunk - self.get_dim(queue); + if off > isize::max_value() as usize { + panic!("workgroup size to big, offset underflow") + } off as u64 } fn get_res(&self, queue: usize) -> usize { -- cgit v1.2.3-70-g09d2