summaryrefslogtreecommitdiff
path: root/src/solvers
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 /src/solvers
parent64f25a5b8f1ef7ab6d567f696bcf066ec72c174a (diff)
Allow to specify wg_size
Diffstat (limited to 'src/solvers')
-rw-r--r--src/solvers/opencl.rs8
1 files changed, 7 insertions, 1 deletions
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);