Unroll NNUE feature updates
Clang 23.1.4 leaves the fixed-size loops in `apply_feature_single()` and `apply_feature_pair()` rolled for `x86-64-avx512` and `x86-64-vnni512`. Since `Tile` is passed and returned by value, this causes repeated 1 KiB stack copies during feature updates, including with PGO.
Request full unrolling with `#pragma clang loop unroll(full)` for Clang and `#pragma GCC unroll(Tiling::NumRegs / 2)` for GCC, without an AVX512-specific guard. Clang needs its own spelling because Clang 11 does not recognize `#pragma GCC unroll`.
The initial Clang-only patch improved NPS by about 41% in a short local non-PGO test on Linux with a Xeon Platinum 8573C, Clang 23.1.4 (`7a941dfb2877`) and full LTO: three alternating before/after pairs, one pinned thread, 256 MiB hash, and four positions at 1M nodes each. No Fishtest run yet.
Compatibility checks, all with `-Werror`:
| Compiler | Targets and checks |
|---|---|
| GCC 9.3 | AVX2 and AVX512 accumulator compilation |
| Clang 11.1 | AVX2 full LTO build; SSE4.1, AVX2 and AVX512 accumulator compilation; AVX2 unoptimized debug accumulator |
| GCC 13.3 | AVX2 and AVX512 accumulator objects unchanged |
| Clang 20.1.2 | AVX2 and AVX512 accumulator objects unchanged |
| Clang 23.1.5 | SSE4.1, AVX2, AVX512 and VNNI512 accumulator objects unchanged; AVX512 full LTO binary unchanged |
“Unchanged” means byte-for-byte identical to the previous PR revision (`b63a546`). Both full builds retain bench `1559611` and identical scores, PVs and node counts across all 51 default positions at 20k nodes. These compatibility checks are not new speed measurements.
Prepared with assistance from OpenAI Codex.
closes https://github.com/official-stockfish/Stockfish/pull/7251
No functional change