Difference between revisions of "AsmFish"

From Chessprogramming wiki
Jump to: navigation, search
Line 4: Line 4:
  
 
'''asmFish''',<br/>
 
'''asmFish''',<br/>
a [[Stockfish#ports|port]] of Stockfish in [[x86-64]] [[Assembly|assembly]] by [[Mohammed Li]], optional using [[AVX2]] and [[BMI2]] instructions, assembled with [https://en.wikipedia.org/wiki/FASM FASM] to run under [[Windows]] or [[Unix|UNIX]]/[[Linux]], first released in June 2016. The fun project is about to demonstrate how an experienced assembly programmer can optimize a program compared with [https://en.wikipedia.org/wiki/GNU_Compiler_Collection GCC] <ref>[https://groups.google.com/d/msg/fishcooking/HKIYwO6pF-s/p9t48jDZBAAJ Re: [for fun] rewrite of stockfish into asm and question on source] by [[Mohammed Li]], [[Computer Chess Forums|FishCooking]], April 18, 2016</ref>. A few structural optimizations were also applied, such as elimination of [[Piece-Lists|piece lists]] as already tried in Stockfish <ref>[https://groups.google.com/d/msg/fishcooking/aJEf-_SmpWY/TARC-1aPGzYJ removal of piece lists] by [[Mohammed Li]], [[Computer Chess Forums|FishCooking]], November 11, 2014</ref>, which were later reinstalled due to the slower but stronger '''pedantFish''' (asmFish with PEDANTIC = 1) with the same node counts as Stockfish, became default <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=69364&start=12 Re: piece lists advantage with bit-boards?] by [[Ronald de Man]], [[CCC]], December 26, 2018</ref>. Critical functions in asmFish were not conform to the x86-64 [https://en.wikipedia.org/wiki/Application_binary_interface ABI] concerning register usage and [https://en.wikipedia.org/wiki/Calling_convention calling convention] <ref>[http://www.agner.org/optimize/#manuals Agner Fog's manuals]</ref>. Some less time critical code was ported using GCC generated assembly output, such as [[Ronald de Man|Ronald de Man's]] probing code for [[Syzygy Bases]]. asmFish further supports [[Memory#HugePages|large pages]], and its [[Parallel Search|parallel search]] is [[NUMA|numa]] aware <ref>[https://github.com/tthsqe12/asm/blob/master/readme.txt asm/readme.txt at master · tthsqe12/asm · GitHub]</ref> <ref>[https://groups.google.com/d/msg/fishcooking/ezt6MrAuXqs/qIR2HEciEgAJ lets get the ball moving down the field on numa awareness] by [[Mohammed Li]], [[Computer Chess Forums|FishCooking]], August 30, 2016</ref> .  
+
a [[Stockfish#ports|port]] of Stockfish in [[x86-64]] [[Assembly|assembly]] by [[Mohammed Li]], optional using [[AVX2]] and [[BMI2]] instructions, assembled with [https://en.wikipedia.org/wiki/FASM FASM] to run under [[Windows]] or [[Unix|UNIX]]/[[Linux]], first released in June 2016. The fun project is about to demonstrate how an experienced assembly programmer can optimize a program compared with [https://en.wikipedia.org/wiki/GNU_Compiler_Collection GCC] <ref>[https://groups.google.com/d/msg/fishcooking/HKIYwO6pF-s/p9t48jDZBAAJ Re: <nowiki>[for fun]</nowiki> rewrite of stockfish into asm and question on source] by [[Mohammed Li]], [[Computer Chess Forums|FishCooking]], April 18, 2016</ref>. A few structural optimizations were also applied, such as elimination of [[Piece-Lists|piece lists]] as already tried in Stockfish <ref>[https://groups.google.com/d/msg/fishcooking/aJEf-_SmpWY/TARC-1aPGzYJ removal of piece lists] by [[Mohammed Li]], [[Computer Chess Forums|FishCooking]], November 11, 2014</ref>, which were later reinstalled due to the slower but stronger '''pedantFish''' (asmFish with PEDANTIC = 1) with the same node counts as Stockfish, became default <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=69364&start=12 Re: piece lists advantage with bit-boards?] by [[Ronald de Man]], [[CCC]], December 26, 2018</ref>. Critical functions in asmFish were not conform to the x86-64 [https://en.wikipedia.org/wiki/Application_binary_interface ABI] concerning register usage and [https://en.wikipedia.org/wiki/Calling_convention calling convention] <ref>[http://www.agner.org/optimize/#manuals Agner Fog's manuals]</ref>. Some less time critical code was ported using GCC generated assembly output, such as [[Ronald de Man|Ronald de Man's]] probing code for [[Syzygy Bases]]. asmFish further supports [[Memory#HugePages|large pages]], and its [[Parallel Search|parallel search]] is [[NUMA|numa]] aware <ref>[https://groups.google.com/d/msg/fishcooking/ezt6MrAuXqs/qIR2HEciEgAJ lets get the ball moving down the field on numa awareness] by [[Mohammed Li]], [[Computer Chess Forums|FishCooking]], August 30, 2016</ref> .  
  
 
=See also=  
 
=See also=  
Line 39: Line 39:
 
==Chess Engine==
 
==Chess Engine==
 
* [https://github.com/lantonov/asmFish/wiki GitHub -  lantonov/asmFish Wiki]
 
* [https://github.com/lantonov/asmFish/wiki GitHub -  lantonov/asmFish Wiki]
* [https://github.com/lantonov/asmFish GitHub - lantonov/asmFish: The latest version of asmFish by Mohammed Li] hosted by [[Lyudmil Antonov]]
+
* [https://github.com/lantonov/asmFish GitHub - lantonov/asmFish] - A continuation of the nice project [[asmFish]] by [[Mohammed Li]] (07.08.2019), hosted by [[Lyudmil Antonov]]
 
* [https://github.com/Counterply/asmFish/tree/asmFish-CounterPly GitHub - Counterply/asmFish at asmFish-CounterPly] hosted by [[Justin Dehorty]]
 
* [https://github.com/Counterply/asmFish/tree/asmFish-CounterPly GitHub - Counterply/asmFish at asmFish-CounterPly] hosted by [[Justin Dehorty]]
* [https://github.com/tthsqe12/asm GitHub - tthsqe12/asm: stockfish chess engine in x86-64]
 
 
==Misc==
 
==Misc==
 
* [[:Category:Yes|Yes]] - [https://en.wikipedia.org/wiki/Fragile_(Yes_album) We Have Heaven], [https://en.wikipedia.org/wiki/Long_Distance_Runaround Long Distance Runaround], [https://en.wikipedia.org/wiki/The_Fish_%28Schindleria_Praematurus%29 The Fish (Schindleria Praematurus)], Album [https://en.wikipedia.org/wiki/Fragile_(Yes_album) Fragile] (1971), [https://en.wikipedia.org/wiki/YouTube YouTube] Video
 
* [[:Category:Yes|Yes]] - [https://en.wikipedia.org/wiki/Fragile_(Yes_album) We Have Heaven], [https://en.wikipedia.org/wiki/Long_Distance_Runaround Long Distance Runaround], [https://en.wikipedia.org/wiki/The_Fish_%28Schindleria_Praematurus%29 The Fish (Schindleria Praematurus)], Album [https://en.wikipedia.org/wiki/Fragile_(Yes_album) Fragile] (1971), [https://en.wikipedia.org/wiki/YouTube YouTube] Video
Line 53: Line 52:
 
[[Category:Open Source]]
 
[[Category:Open Source]]
 
[[Category:UCI]]
 
[[Category:UCI]]
 +
[[Category:PC]]
 +
[[Category:X64]]
 +
[[Category:Linux]]
 +
[[Category:Mac]]
 +
[[Category:Windows]]
 
[[Category:Yes]]
 
[[Category:Yes]]
 
[[Category:Bill Bruford]]
 
[[Category:Bill Bruford]]
 
[[Category:Chris Squire]]
 
[[Category:Chris Squire]]

Revision as of 11:32, 22 December 2019

Home * Engines * Stockfish * asmFish

Istiophorus platypterus, one of the world's fastest fish [1]

asmFish,
a port of Stockfish in x86-64 assembly by Mohammed Li, optional using AVX2 and BMI2 instructions, assembled with FASM to run under Windows or UNIX/Linux, first released in June 2016. The fun project is about to demonstrate how an experienced assembly programmer can optimize a program compared with GCC [2]. A few structural optimizations were also applied, such as elimination of piece lists as already tried in Stockfish [3], which were later reinstalled due to the slower but stronger pedantFish (asmFish with PEDANTIC = 1) with the same node counts as Stockfish, became default [4]. Critical functions in asmFish were not conform to the x86-64 ABI concerning register usage and calling convention [5]. Some less time critical code was ported using GCC generated assembly output, such as Ronald de Man's probing code for Syzygy Bases. asmFish further supports large pages, and its parallel search is numa aware [6] .

See also

Forum Posts

2015

Re: [for fun] rewrite of stockfish into asm and question on source by Mohammed Li, FishCooking, April 18, 2016

2016

2017

2018

Re: asmFish update - all flavors of OS by T. Poppins, CCC, January 23, 2018

2019

Re: asmFish by Ronald de Man, CCC, May 05, 2019

External Links

Chess Engine

Misc

References

Up one Level