diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 11 | ||||
-rw-r--r-- | src/solvers/opencl.rs | 8 |
2 files changed, 7 insertions, 12 deletions
diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index 8699cc1..0000000 --- a/src/lib.rs +++ /dev/null @@ -1,11 +0,0 @@ -mod permutations; -pub mod solver; -pub mod solvers; -pub mod structs; - -pub static N: u32 = 10; -pub fn solve(n: u32) { - let mut solver = solvers::intuitive::NormalSolver::new(n); - solver.solve(); -} - diff --git a/src/solvers/opencl.rs b/src/solvers/opencl.rs index 8421d53..cdedd37 100644 --- a/src/solvers/opencl.rs +++ b/src/solvers/opencl.rs @@ -63,6 +63,7 @@ impl GpuSolver { n: u32, h: u32, w: u32, + mut wg_size: usize, src: &str, ) -> ocl::Result<Vec<Sender<Job>>> { let platform = ocl::Platform::default(); @@ -86,7 +87,12 @@ impl GpuSolver { let mut senders = Vec::with_capacity(h as usize); let mut receivers = Vec::with_capacity(h as usize); - let wg_size = device.max_wg_size()?; + let max_wg_size = device.max_wg_size()?; + if wg_size == 0 { + wg_size = max_wg_size; + } else if wg_size > max_wg_size { + return Err(ocl::Error::from("invalid workgroup size")); + } for _ in 0..h { let (sx, rx) = std::sync::mpsc::channel(); senders.push(sx); |