diff options
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, |