diff options
Diffstat (limited to 'src/solvers/gpu/manager.rs')
-rw-r--r-- | src/solvers/gpu/manager.rs | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/solvers/gpu/manager.rs b/src/solvers/gpu/manager.rs index ede6a85..42af314 100644 --- a/src/solvers/gpu/manager.rs +++ b/src/solvers/gpu/manager.rs @@ -27,6 +27,9 @@ impl RequestBuffer { } None } + fn flush(&mut self) { + while self.read(CheckRequest::new(vec![], 0, 0)).is_none() {} + } } pub struct OclManager { @@ -118,7 +121,21 @@ impl OclManager { } } Message::CpuDone => { - //TODO panic!("flush buffers"); + for (i, b) in self.buffers.iter_mut().enumerate() { + b.flush(); + self.host_sender + .send(Message::HostMessage(( + self.job_id, + i as u32, + b.mask_buff.clone(), + ))) + .unwrap(); + self.output_sender + .send(Message::OutputMessage((self.job_id, b.row_buff.clone()))) + .unwrap(); + self.job_id += 1; + } + println!("flushing buffers"); self.host_sender.send(Message::CpuDone); self.host_handle.take().unwrap().join(); } |