From 1650906f010574e8810c8b0b98334e22fac5894d Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sun, 12 Jan 2020 03:47:14 +0100 Subject: Restructuring --- src/solvers/gpu/mod.rs | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/solvers/gpu/mod.rs (limited to 'src/solvers/gpu/mod.rs') diff --git a/src/solvers/gpu/mod.rs b/src/solvers/gpu/mod.rs new file mode 100644 index 0000000..f9ab711 --- /dev/null +++ b/src/solvers/gpu/mod.rs @@ -0,0 +1,56 @@ +pub mod host; +pub mod manager; +pub mod output; + +pub use manager::*; + +type MaskMessage = (u64, Vec); +type RowMessage = (u64, Vec>); + +pub enum Message { + CheckRequest(CheckRequest), + HostMessage(MaskMessage), + OutputMessage(RowMessage), + Terminate, +} + +pub struct ResultMessage { + data: Vec, + offset: usize, + size: usize, +} + +impl ResultMessage { + fn new(data: Vec, offset: usize, size: usize) -> Self { + Self { data, offset, size } + } + fn valid_walls(&self, wg_size: usize) -> &[Vec] { + let mut result = vec![Vec::new(); wg_size]; + for (j, r) in self.data.iter().enumerate() { + for b in 0..64 { + if r & (1 << b) != 0 { + let permutation = j / self.size + self.offset; + let instruction = (j % self.size) * 64 + b; + result[instruction].push(permutation as u32); + } + } + } + result.as_ref() + } +} + +pub struct CheckRequest { + rows: Vec, + bitmask: u64, + queue: u32, +} + +impl CheckRequest { + pub fn new(rows: Vec, bitmask: u64, queue: u32) -> Self { + Self { + rows, + bitmask, + queue, + } + } +} -- cgit v1.2.3-54-g00ecf