summaryrefslogtreecommitdiff
path: root/src/solvers/gpusolver.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/solvers/gpusolver.rs')
-rw-r--r--src/solvers/gpusolver.rs29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/solvers/gpusolver.rs b/src/solvers/gpusolver.rs
index 2b9eb4a..69c400e 100644
--- a/src/solvers/gpusolver.rs
+++ b/src/solvers/gpusolver.rs
@@ -1,16 +1,29 @@
-use crate::solver::{wall_stats, Solver, IteratorSolver};
-use crate::structs::StoneWall;
use crate::permutations::PermutationGenerator;
+use crate::solver::{wall_stats, IteratorSolver, Solver};
+use crate::structs::StoneWall;
#[derive(Debug)]
pub struct GpuSolver {
- n: u32, h: u32, w: u32,
+ n: u32,
+ h: u32,
+ w: u32,
permutations: Vec<Vec<u32>>,
masks: Vec<u64>,
}
impl GpuSolver {
fn solve_to_vec(&mut self) -> Vec<StoneWall> {
+ let src =
+ std::fs::read_to_string("src/solvers/check.cl").expect("failed to open kernel file");
+
+ crate::solvers::opencl::GpuSolver::launch_sevice(
+ &self.masks,
+ self.n,
+ self.h,
+ self.w,
+ src.as_ref(),
+ )
+ .unwrap();
vec![]
}
}
@@ -25,9 +38,9 @@ fn generate_masks(permutations: &[Vec<u32>]) -> Vec<u64> {
let mut v = 0;
let mut x = 0u64;
for i in p.iter().take(p.len() - 1).map(|i| {
- v += i;
- v
- }) {
+ v += i;
+ v
+ }) {
x |= 1 << i
}
masks.push(x)
@@ -41,7 +54,9 @@ impl Solver for GpuSolver {
let permutations = generate_permutations(n);
let masks = generate_masks(&permutations);
Self {
- n, h, w,
+ n,
+ h,
+ w,
permutations,
masks,
}