X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fnnue%2Ffeatures%2Fhalf_kp.cpp;h=8e6907ae00291d07a5dfb643a5764f85065b9d09;hb=255514fb29f5a7a2c95863c9b074e36209b841c1;hp=ac6317e7da66d4c424f523e39a993e9aa6ecfe51;hpb=7ffae17f85709e49672a0e98e136b66aea067b2c;p=stockfish diff --git a/src/nnue/features/half_kp.cpp b/src/nnue/features/half_kp.cpp index ac6317e7..8e6907ae 100644 --- a/src/nnue/features/half_kp.cpp +++ b/src/nnue/features/half_kp.cpp @@ -40,13 +40,32 @@ namespace Stockfish::Eval::NNUE::Features { Square ksq = orient(perspective, pos.square(perspective)); Bitboard bb = pos.pieces() & ~pos.pieces(KING); - while (bb) { - Square s = pop_lsb(&bb); + while (bb) + { + Square s = pop_lsb(bb); active->push_back(make_index(perspective, s, pos.piece_on(s), ksq)); } } - // Get a list of indices for recently changed features + + // AppendChangedIndices() : get a list of indices for recently changed features + + // IMPORTANT: The `pos` in this function is pretty much useless as it + // is not always the position the features are updated to. The feature + // transformer code right now can update multiple accumulators per move, + // but since Stockfish only keeps the full state of the current leaf + // search position it is not possible to always pass here the position for + // which the accumulator is being updated. Therefore the only thing that + // can be reliably extracted from `pos` is the king square for the king + // of the `perspective` color (note: not even the other king's square will + // match reality in all cases, this is also the reason why `dp` is passed + // as a parameter and not extracted from pos.state()). This is of particular + // problem for future nets with other feature sets, where updating the active + // feature might require more information from the intermediate positions. In + // this case the only easy solution is to remove the multiple updates from + // the feature transformer update code and only update the accumulator for + // the current leaf position (the position after the move). + template void HalfKP::AppendChangedIndices( const Position& pos, const DirtyPiece& dp, Color perspective,