mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Cleaned up MakeIndex()
The index order in kpp_board_index[][] is reversed to be more optimal for the access pattern STC https://tests.stockfishchess.org/tests/view/5fbd74f967cbf42301d6b24f LLR: 2.93 (-2.94,2.94) {-1.25,0.25} Total: 27504 W: 2686 L: 2607 D: 22211 Ptnml(0-2): 84, 2001, 9526, 2034, 107 closes https://github.com/official-stockfish/Stockfish/pull/3233 No functional change
This commit is contained in:
parent
190dd26b9f
commit
9b7983a452
4 changed files with 14 additions and 35 deletions
|
@ -31,27 +31,6 @@
|
||||||
|
|
||||||
namespace Eval::NNUE {
|
namespace Eval::NNUE {
|
||||||
|
|
||||||
const uint32_t kpp_board_index[PIECE_NB][COLOR_NB] = {
|
|
||||||
// convention: W - us, B - them
|
|
||||||
// viewed from other side, W and B are reversed
|
|
||||||
{ PS_NONE, PS_NONE },
|
|
||||||
{ PS_W_PAWN, PS_B_PAWN },
|
|
||||||
{ PS_W_KNIGHT, PS_B_KNIGHT },
|
|
||||||
{ PS_W_BISHOP, PS_B_BISHOP },
|
|
||||||
{ PS_W_ROOK, PS_B_ROOK },
|
|
||||||
{ PS_W_QUEEN, PS_B_QUEEN },
|
|
||||||
{ PS_W_KING, PS_B_KING },
|
|
||||||
{ PS_NONE, PS_NONE },
|
|
||||||
{ PS_NONE, PS_NONE },
|
|
||||||
{ PS_B_PAWN, PS_W_PAWN },
|
|
||||||
{ PS_B_KNIGHT, PS_W_KNIGHT },
|
|
||||||
{ PS_B_BISHOP, PS_W_BISHOP },
|
|
||||||
{ PS_B_ROOK, PS_W_ROOK },
|
|
||||||
{ PS_B_QUEEN, PS_W_QUEEN },
|
|
||||||
{ PS_B_KING, PS_W_KING },
|
|
||||||
{ PS_NONE, PS_NONE }
|
|
||||||
};
|
|
||||||
|
|
||||||
// Input feature converter
|
// Input feature converter
|
||||||
LargePagePtr<FeatureTransformer> feature_transformer;
|
LargePagePtr<FeatureTransformer> feature_transformer;
|
||||||
|
|
||||||
|
|
|
@ -28,12 +28,9 @@ namespace Eval::NNUE::Features {
|
||||||
return Square(int(s) ^ (bool(perspective) * 63));
|
return Square(int(s) ^ (bool(perspective) * 63));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the index of the feature quantity from the king position and PieceSquare
|
// Index of a feature for a given king position and another piece on some square
|
||||||
template <Side AssociatedKing>
|
inline IndexType make_index(Color perspective, Square s, Piece pc, Square ksq) {
|
||||||
inline IndexType HalfKP<AssociatedKing>::MakeIndex(
|
return IndexType(orient(perspective, s) + kpp_board_index[perspective][pc] + PS_END * ksq);
|
||||||
Color perspective, Square s, Piece pc, Square ksq) {
|
|
||||||
|
|
||||||
return IndexType(orient(perspective, s) + kpp_board_index[pc][perspective] + PS_END * ksq);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a list of indices for active features
|
// Get a list of indices for active features
|
||||||
|
@ -45,7 +42,7 @@ namespace Eval::NNUE::Features {
|
||||||
Bitboard bb = pos.pieces() & ~pos.pieces(KING);
|
Bitboard bb = pos.pieces() & ~pos.pieces(KING);
|
||||||
while (bb) {
|
while (bb) {
|
||||||
Square s = pop_lsb(&bb);
|
Square s = pop_lsb(&bb);
|
||||||
active->push_back(MakeIndex(perspective, s, pos.piece_on(s), ksq));
|
active->push_back(make_index(perspective, s, pos.piece_on(s), ksq));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,9 +57,9 @@ namespace Eval::NNUE::Features {
|
||||||
Piece pc = dp.piece[i];
|
Piece pc = dp.piece[i];
|
||||||
if (type_of(pc) == KING) continue;
|
if (type_of(pc) == KING) continue;
|
||||||
if (dp.from[i] != SQ_NONE)
|
if (dp.from[i] != SQ_NONE)
|
||||||
removed->push_back(MakeIndex(perspective, dp.from[i], pc, ksq));
|
removed->push_back(make_index(perspective, dp.from[i], pc, ksq));
|
||||||
if (dp.to[i] != SQ_NONE)
|
if (dp.to[i] != SQ_NONE)
|
||||||
added->push_back(MakeIndex(perspective, dp.to[i], pc, ksq));
|
added->push_back(make_index(perspective, dp.to[i], pc, ksq));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,10 +52,6 @@ namespace Eval::NNUE::Features {
|
||||||
// Get a list of indices for recently changed features
|
// Get a list of indices for recently changed features
|
||||||
static void AppendChangedIndices(const Position& pos, const DirtyPiece& dp, Color perspective,
|
static void AppendChangedIndices(const Position& pos, const DirtyPiece& dp, Color perspective,
|
||||||
IndexList* removed, IndexList* added);
|
IndexList* removed, IndexList* added);
|
||||||
|
|
||||||
private:
|
|
||||||
// Index of a feature for a given king position and another piece on some square
|
|
||||||
static IndexType MakeIndex(Color perspective, Square s, Piece pc, Square sq_k);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Eval::NNUE::Features
|
} // namespace Eval::NNUE::Features
|
||||||
|
|
|
@ -90,7 +90,14 @@ namespace Eval::NNUE {
|
||||||
PS_END2 = 12 * SQUARE_NB + 1
|
PS_END2 = 12 * SQUARE_NB + 1
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const uint32_t kpp_board_index[PIECE_NB][COLOR_NB];
|
constexpr uint32_t kpp_board_index[COLOR_NB][PIECE_NB] = {
|
||||||
|
// convention: W - us, B - them
|
||||||
|
// viewed from other side, W and B are reversed
|
||||||
|
{ PS_NONE, PS_W_PAWN, PS_W_KNIGHT, PS_W_BISHOP, PS_W_ROOK, PS_W_QUEEN, PS_W_KING, PS_NONE,
|
||||||
|
PS_NONE, PS_B_PAWN, PS_B_KNIGHT, PS_B_BISHOP, PS_B_ROOK, PS_B_QUEEN, PS_B_KING, PS_NONE },
|
||||||
|
{ PS_NONE, PS_B_PAWN, PS_B_KNIGHT, PS_B_BISHOP, PS_B_ROOK, PS_B_QUEEN, PS_B_KING, PS_NONE,
|
||||||
|
PS_NONE, PS_W_PAWN, PS_W_KNIGHT, PS_W_BISHOP, PS_W_ROOK, PS_W_QUEEN, PS_W_KING, PS_NONE }
|
||||||
|
};
|
||||||
|
|
||||||
// Type of input feature after conversion
|
// Type of input feature after conversion
|
||||||
using TransformedFeatureType = std::uint8_t;
|
using TransformedFeatureType = std::uint8_t;
|
||||||
|
|
Loading…
Add table
Reference in a new issue