summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Kobert <dennis@kobert.dev>2020-01-06 08:54:46 +0100
committerDennis Kobert <dennis@kobert.dev>2020-01-06 08:54:46 +0100
commit2750313bab1bff5b94734f949e633f04391577ab (patch)
tree5d29181398b5422e1769d2fa123a6be8e09307ec
parent64f25a5b8f1ef7ab6d567f696bcf066ec72c174a (diff)
Allow to specify wg_size
-rw-r--r--src/lib.rs11
-rw-r--r--src/solvers/opencl.rs8
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);