summaryrefslogtreecommitdiff
path: root/src/solvers/gpu/manager.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/solvers/gpu/manager.rs')
-rw-r--r--src/solvers/gpu/manager.rs17
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;