Skip to content

Commit

Permalink
Optimize for AVX512
Browse files Browse the repository at this point in the history
  • Loading branch information
primenumber committed Nov 9, 2023
1 parent 77b612f commit 6e92f20
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/engine/board.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ pub struct PlayIterator {

pub const BOARD_SIZE: usize = 64;

unsafe fn avx512_upper_bit(mut x: __m256i) -> __m256i {
let y = _mm256_sub_epi64(_mm256_set1_epi64x(63), _mm256_lzcnt_epi64(x));
_mm256_sllv_epi64(_mm256_set1_epi64x(1), y)
}

#[allow(dead_code)]
unsafe fn smart_upper_bit(mut x: __m256i) -> __m256i {
x = _mm256_or_si256(x, _mm256_srlv_epi64(x, _mm256_setr_epi64x(8, 1, 7, 9)));
x = _mm256_or_si256(x, _mm256_srlv_epi64(x, _mm256_setr_epi64x(16, 2, 14, 18)));
Expand Down Expand Up @@ -95,7 +101,7 @@ impl Board {
0x0040201008040201u64 as i64,
);
let mut mask = _mm256_srlv_epi64(mask1, _mm256_set1_epi64x((63 - pos) as i64));
let mut outflank = _mm256_and_si256(smart_upper_bit(_mm256_andnot_si256(om, mask)), p);
let mut outflank = _mm256_and_si256(avx512_upper_bit(_mm256_andnot_si256(om, mask)), p);
let mut flipped = _mm256_and_si256(
_mm256_slli_epi64(_mm256_sub_epi64(_mm256_setzero_si256(), outflank), 1),
mask,
Expand Down
1 change: 1 addition & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#![feature(test)]
#![feature(stdsimd)]
mod book;
mod engine;
mod play;
Expand Down

0 comments on commit 6e92f20

Please sign in to comment.