Changes

Jump to: navigation, search

CFish

2,443 bytes added, 21:08, 24 August 2020
no edit summary
'''CFish''',<br/>
a [[Stockfish#ports|port]] of Stockfish written in plain [[C]] by [[Ronald de Man]], first published on [https://en.wikipedia.org/wiki/GitHub GitHub] in July 2016. Possibly inspired by the [[asmFish]] project to speed up Stockfish using a programming language closer to the machine, the purpose of CFish is to explore possible optimization issues of C versus [[Cpp|C++]] compilers <ref>[http://www.talkchess.com/forum/viewtopic.php?t=61280&start=9 Re: CFish] by [[Louis Zulli]], [[CCC]], September 01, 2016</ref>.
 
=AVX2 Attacks=
Since May 2020, CFish contains experimental [[AVX2]]/[[AVX-512]] computational [[Sliding Piece Attacks|sliding piece attack]] code by Okuhara
as alternative to [[Magic Bitboards|Magic bitboards]] <ref>[https://github.com/syzygy1/Cfish/blob/master/src/avx2-bitboard.h Cfish/avx2-bitboard.h at master · syzygy1/Cfish · GitHub]</ref>. It applies a kind of [[Classical Approach#Branchless|branchless classical approach]].
For instance, the four [[Classical Approach#Positive Rays|positive rays]] and [[Classical Approach#Negative Rays|negative rays]] of a [[Queen|queen]]
are processed as vector of 4 [[Bitboards|bitboards]] in one 256-bit ymm register each. Positive and negative rays were intersected with the vector of broadcast [[Occupancy|occupancies]],
to get the relevant blockers if any, [[General Setwise Operations#TheLeastSignificantOneBitLS1B|LS1B]] for positive, and [[General Setwise Operations#TheMostSignificantOneBitMS1B|MS1B]] for negative rays.
While the positive rays were processed by [[BMI1#BLSMSK|BLSMSK]] aka <code>((x-1) ^ x)</code> to clear the ray squares above the LS1B blockers,
the negative rays use a [[Parallel Prefix Algorithms#Fill Stuff|parallel prefix fill]] with three vector right shifts and ors, to clear all ray bits below the MS1B blockers.
The conditional compiled AVX-512 version takes advantage of the _mm256_lzcnt_epi64 <ref>[https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_lzcnt_epi64&expand=5560,5471,3497 _mm256_lzcnt_epi64]</ref> and _mm256_ternarylogic_epi64 <ref>[https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_ternarylogic_epi64&expand=5560,5471,3497,5873 _mm256_ternarylogic_epi64]</ref> intrinsics.
Rook and bishop naturally suffer from less vector utilization, and combine some other well known techniques, i.e. the bishop attack getter processes only positive rays by swapping bytes.
 
=[[NNUE]]=
Since August 2020, CFish also provides the [[NNUE]] evaluation ported from its C++ base [[Stockfish NNUE]] <ref>[https://github.com/syzygy1/Cfish/blob/master/src/nnue.c Cfish/nnue.c at master · syzygy1/Cfish · GitHub]</ref>,
further utilizing [[SIMD and SWAR Techniques|SIMD instructions]].
=See also=
* [[Portfish]]
* [[Rustfish]]
* [[Stockfish NNUE]]
=Forum Posts=
=External Links=
* [https://github.com/syzygy1/Cfish GitHub - syzygy1/Cfish: C port of Stockfish]
* [https://github.com/okuhara/Cfish GitHub - okuhara/Cfish: C port of Stockfish]
* [[:Category:Fish Go Deep|Fish Go Deep]] - The Jazz (2002), [https://en.wikipedia.org/wiki/YouTube YouTube] Video
: {{#evu:https://www.youtube.com/watch?v=biwGNuoaEyQ|alignment=left|valignment=top}}
<references />
'''[[Stockfish|Up one Level]]'''
[[Category:Fish]]
[[Category:GPL]]
[[Category:Open Source]]
[[Category:Joachim Beuckelaer]]
[[Category:UCI]]
[[Category:PC]]
[[Category:X86]]
[[Category:X64]]
[[Category:Linux]]
[[Category:Mac]]
[[Category:Windows]]
[[Category:NNUE]]
[[Category:Fish]]
[[Category:Fish Go Deep]]

Navigation menu