summaryrefslogtreecommitdiff
path: root/src/solvers/gpu/host.rs
diff options
context:
space:
mode:
authorDennis Kobert <dennis@kobert.dev>2020-01-12 05:18:56 +0100
committerDennis Kobert <dennis@kobert.dev>2020-01-12 05:18:56 +0100
commit29bffc6f6c794fee886904ad3960c4cb770deb11 (patch)
tree5c896350538842863d3834b11ed25c44773d8699 /src/solvers/gpu/host.rs
parent1650906f010574e8810c8b0b98334e22fac5894d (diff)
Fix Bugs
Diffstat (limited to 'src/solvers/gpu/host.rs')
-rw-r--r--src/solvers/gpu/host.rs12
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,