diff options
author | Dennis Kobert <dennis@kobert.dev> | 2020-01-12 05:18:56 +0100 |
---|---|---|
committer | Dennis Kobert <dennis@kobert.dev> | 2020-01-12 05:18:56 +0100 |
commit | 29bffc6f6c794fee886904ad3960c4cb770deb11 (patch) | |
tree | 5c896350538842863d3834b11ed25c44773d8699 /src/solvers/gpu/host.rs | |
parent | 1650906f010574e8810c8b0b98334e22fac5894d (diff) |
Fix Bugs
Diffstat (limited to 'src/solvers/gpu/host.rs')
-rw-r--r-- | src/solvers/gpu/host.rs | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/src/solvers/gpu/host.rs b/src/solvers/gpu/host.rs index 6b79078..c53c42c 100644 --- a/src/solvers/gpu/host.rs +++ b/src/solvers/gpu/host.rs @@ -1,3 +1,4 @@ +use super::{HostMessage, Message, ResultMessage}; use ocl::{flags, Buffer, Context, Device, Kernel, Platform, Program, Queue}; use std::sync::mpsc::{Receiver, Sender}; @@ -17,7 +18,7 @@ pub struct Host { /// Workgroup size, set to 0 for max wg_size: usize, permutations: Buffer<u64>, - rec_queues: Vec<RequestBuffer>, + receiver: Receiver<Message>, walls: Vec<Vec<u32>>, } @@ -29,7 +30,7 @@ impl Host { w: u32, mut wg_size: usize, src: &str, - ) -> ocl::Result<Vec<Sender<Job>>> { + ) -> ocl::Result<(Sender<Message>, std::thread::JoinHandle<()>)> { let platform = ocl::Platform::default(); let device = ocl::Device::first(platform)?; let context = ocl::Context::builder() @@ -49,19 +50,12 @@ impl Host { .len(permutation_masks.len()) .build()?; - let mut senders = Vec::with_capacity((n - h + 1) as usize); - let mut receivers = Vec::with_capacity((n - h + 1) as usize); 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..=(n - h) { - let (sx, rx) = std::sync::mpsc::channel(); - senders.push(sx); - receivers.push(RequestBuffer::new(wg_size, rx)); - } let solver = Self { platform, |