diff options
Diffstat (limited to 'src/solvers/gpu/manager.rs')
-rw-r--r-- | src/solvers/gpu/manager.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/solvers/gpu/manager.rs b/src/solvers/gpu/manager.rs index a2253aa..def1f35 100644 --- a/src/solvers/gpu/manager.rs +++ b/src/solvers/gpu/manager.rs @@ -1,4 +1,4 @@ -use super::{CheckRequest, Message}; +use super::{CheckRequest, Message, RowResult}; use std::sync::mpsc::{channel, Receiver, Sender}; use std::thread::JoinHandle; @@ -36,7 +36,7 @@ pub struct OclManager { receiver: Receiver<Message>, buffers: Vec<RequestBuffer>, output_handle: JoinHandle<()>, - host_handle: JoinHandle<()>, + host_handle: Option<JoinHandle<()>>, } impl OclManager { @@ -46,6 +46,7 @@ impl OclManager { n: u32, // Workgroup size, set to 0 for max mut wg_size: usize, + result_output: Sender<Message>, ) -> (Sender<Message>, JoinHandle<()>) { let (h, w) = crate::solvers::wall_stats(n); let src = include_str!("check.cl"); @@ -60,7 +61,7 @@ impl OclManager { } let (output_sender, output_handle) = - super::output::Output::launch_sevice(permutations, permutations_mask); + super::output::Output::launch_sevice(permutations, permutations_mask, result_output); let (host_sender, host_handle) = super::host::Host::launch_sevice( permutations_mask, n, @@ -87,7 +88,7 @@ impl OclManager { receiver, buffers, output_handle, - host_handle, + host_handle: Some(host_handle), }; ( sender, @@ -115,10 +116,12 @@ impl OclManager { self.job_id += 1; } } - Message::Terminate => { + Message::CpuDone => { //TODO panic!("flush buffers"); - self.host_sender.send(Message::Terminate); - self.host_handle.join(); + self.host_sender.send(Message::CpuDone); + self.host_handle.take().unwrap().join(); + } + Message::Terminate => { self.output_sender.send(Message::Terminate); self.output_handle.join(); return; |