summaryrefslogtreecommitdiff
path: root/src/solvers/mod.rs
diff options
context:
space:
mode:
authorDennis Kobert <dennis@kobert.dev>2020-01-04 08:13:54 +0100
committerDennis Kobert <dennis@kobert.dev>2020-01-04 08:13:54 +0100
commit920a6729577d14ba9190abcb3a2c4087652228a4 (patch)
tree8790c755a933f46bbe414cfd1eb1b1be0fea12ad /src/solvers/mod.rs
parent862695a7374bc60368d09a7e695ae0b8aa3b97c2 (diff)
Add profiling extend gpu support
Diffstat (limited to 'src/solvers/mod.rs')
-rwxr-xr-xsrc/solvers/mod.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/solvers/mod.rs b/src/solvers/mod.rs
index 9dc210b..0615eab 100755
--- a/src/solvers/mod.rs
+++ b/src/solvers/mod.rs
@@ -1,4 +1,27 @@
//pub mod incremental_block;
pub mod intuitive;
#[cfg(feature = "gpu")]
-pub mod ocl;
+pub mod opencl;
+
+lazy_static! {
+ pub static ref PERMUTATIONS: (Vec<Vec<u32>>, Vec<u64>) = {
+ let n = crate::N;
+ let mut heap = (1..=n).collect::<Vec<u32>>();
+ let heap = permutohedron::Heap::new(&mut heap);
+ let n_f = permutohedron::factorial(n as usize);
+ let mut permutations = Vec::with_capacity(n_f);
+
+ let mut masks: Vec<u64> = vec![0; n_f];
+ println!("Generating permutations");
+ for (j, data) in heap.enumerate() {
+ let mut sum = 0;
+ permutations.push(data.clone());
+ for stone in data.iter().take(n as usize - 1) {
+ sum += stone;
+ masks[j] |= 1 << sum;
+ }
+ }
+ (permutations, masks)
+ };
+}
+