Repository navigation
High-throughput search and position hot-path optimization - #26
Merged
Merged
Conversation
Owner
Author
|
This PR significantly improves IronPhoenix's search throughput through compact 14-bit sliding attack tables, faster move generation, reduced search overhead, cheaper capture ordering, lazy non-PV move picking, optimized SEE/TT hot paths, and faster make/undo operations. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Performance-only branch from current
mainfocused on NPS and hot-path cost.Search hot paths
givesCheck()work until a move is actually considered instead of evaluating check status for the whole move list up frontFaster capture ordering
seeGEpruning)givesCheck()calls for captures/promotions when their ordering score does not consume the check bonusMove generation / storage
Movescratch buffers trivially default-initialized while preservingMove{}as the null moveMoveListbacking array at construction14-bit compact sliding attacks
Position14 x 2^14attack-mask tablegivesCheck()and castling safetyPosition / board hot paths
isAttackedByEnemy/attackersToEnemyStateInfoSEE / TT hot paths
TTProbeoutput on every probe/miss; callers use the returned hit booleanNo pruning thresholds, LMR/NMP parameters, evaluation weights, or move legality rules are intentionally changed. Timer polling is intentionally coarser by up to roughly 1024 searched nodes.
The newest move-ordering changes are intentionally more aggressive and may alter node count/Elo, so benchmark both raw NPS and time-to-depth, then run an SPRT before merge.