Stockfish 18 laidiena lapā bija 27 lejupielādes faili. Lietotājam pašam vajadzēja zināt, vai viņa procesors prot AVX2, BMI2, VNNI512 vai AVX-512 ICL, tad izvēlēties pareizo arhīvu. Piecas dienas vecajā Stockfish 19 to failu ir astoņi. Neviens no tiem vairs neprasa izvēli, jo vienā x86-64 binārajā failā ir visi astoņi instrukciju kopu būvējumi. Startējot programma nolasa procesora pazīmes un nodod vadību pareizajam būvējumam.
Spēles kvalitāte pret iepriekšējo versiju pieauga līdz 44 Elo punktiem. Fishtest palaidums ar 60 000 partijām laika kontrolē 60+0,6 deva 19 335 uzvaras pret 11 660 zaudējumiem. Partiju pāros attiecība ir 11 123 pret 3589, tas ir vairāk nekā trīskārt.
Kā vienā failā ietilpst astoņi būvējumi
Būvēšanas sistēmā parādījās mērķis ARCH=x86-64-universal. Tas kompilē astoņus atsevišķus dziņa variantus: x86-64, x86-64-sse41-popcnt, x86-64-avx2, x86-64-bmi2, x86-64-avxvnni, x86-64-avx512, x86-64-vnni512 un x86-64-avx512icl. Katrs variants nonāk savā C++ vārdtelpā pēc šablona Stockfish_x86_64_avx2. Asamblera sekciju nosaukumus pārraksta awk skripts, lai astoņu būvējumu simboli viens otru neaizsegtu. Neironu tīkla svari failā glabājas vienā kopijā, tos iekļauj ar C++26 direktīvu #embed. Tāpēc astoņu variantu binārais fails sver aptuveni 81 MB, nevis astoņas reizes vairāk.
Izvēli veic universal/entry_x86.cpp. Tas nolasa procesora pazīmes caur __builtin_cpu_supports un iet cauri kaskādei no vājākā varianta uz spēcīgāko. Interesantākā vieta ir funkcija has_slow_bmi2(). AMD Excavator, Zen, Zen+ un Zen 2 procesoros instrukcijas pdep un pext izpilda mikrokods, tāpēc šiem procesoriem dzinis apzināti paliek pie AVX2 būvējuma un BMI2 variantu neizmanto. AVX-512 ICL būvējums startē tikai tad, ja procesoram ir viss Ice Lake klienta komplekts: avx512ifma, avx512vbmi, avx512vbmi2, avx512vpopcntdq, avx512bitalg, vpclmulqdq, gfni un vaes.
Šo izvēli pārbauda arī CI. Skripts check_universal.sh palaiž bināro failu zem Intel SDE emulatora līdz desmit procesoru modeļiem no Pentium 4 līdz Alder Lake. Katram modelim tests salīdzina bench rezultātu ar gaidīto, tāpēc nepareizi izvēlēts būvējums CI apstādina.
Divi neironu tīkli kļūst par vienu
Stockfish 16.1 pievienoja otru, mazāku tīklu ātrai novērtēšanai. Stockfish 19 to izmet. Iepriekš fails evaluate.h definēja divus svaru failus: nn-c288c895ea92.nnue ar 72,7 MB un nn-37f18f62d772.nnue ar 2,9 MB. Tagad tur ir viens nn-1a298aa575a0.nnue, kas sver 78,9 MB. Svaru kopējais apjoms tātad pieauga par nedaudz vairāk kā 3 MB, bet pozīcijās, kur mazais tīkls novērtēja sliktāk, kvalitāte uzlabojās.
Jaunā arhitektūra SFNNv16 izmet daļu draudu pazīmju un pievieno bandinieku pāru pazīmes. Jaunajā failā nnue/features/pp_3wide.h to skaits ir izlasāms no koda: 48 lauciņi katrai pusei dod 96 bandinieku identifikatorus, no tiem 96 × 95 / 2 = 4560 pāru pazīmes. Tās pievieno pēc 59 808 draudu pazīmēm. Tīkla trenēšanā izmantota kvantēšanai pielāgota apmācība jeb QAT. Pozīcijas pārvērtētas ar spēcīgu Leela tīklu. Projekts runā par simtiem miljardu tādu pozīciju.
RISC-V, LoongArch un 1 GB atmiņas lapas
Būvēšanas mērķu sarakstā ienāca RISC-V ar vektoru paplašinājumu (riscv64-rva23), LoongArch ar LSX un LASX, kā arī divi WebAssembly mērķi. RISC-V un ARM universālie faili apvieno pa diviem variantiem: riscv64 kopā ar riscv64-rva23, armv8 kopā ar armv8-dotprod. Laidiena lapā tāpēc pirmo reizi ir gatavs stockfish-linux-riscv64-universal.tar.gz.
Linux sistēmās uz x86-64 fails memory.cpp tagad mēģina transponēšanas tabulu rezervēt 1 GB lielās lapās. Kods padod mmap karodziņu MAP_HUGETLB kopā ar 30 << MAP_HUGE_SHIFT, kas nozīmē lapu 2 pakāpē 30 baitu lielumā. Ja kodols to atsaka, kods atkāpjas pie 2 MB lapām un madvise(MADV_HUGEPAGE).
Nepareiza komanda tagad nogalina procesu
Trešā izmaiņa skar rīku un saskarņu autorus. Stockfish 19 stingri pārbauda FEN virknes, pozīcijas un UCI komandas. Ja kaut kas neatbilst, dzinis izvada info string CRITICAL ERROR ar precīzu komandu un atteikuma iemeslu, tad nekavējoties pārtrauc procesu. Laidiena paziņojumā šī pārmaiņa komentēta vienā teikumā.
Laba grafiskā saskarne nodrošinās, ka tu ar šīm kļūdām nekad nesastapsies.
Praksē tas nozīmē, ka skripts vai saskarne, kas līdz šim padeva paviršas komandas un paļāvās uz kluso ignorēšanu, tagad pazaudēs procesu. Pašos Fishtest testos stabilitāte turējās: 60 000 partijās uz viena pavediena nav neviena kritiena, bet astoņu pavedienu palaidumā reģistrēts viens.
Kas notika kodā starp diviem laidieniem
No atzīmes sf_18 līdz sf_19 ir 322 komiti. GitHub salīdzinājums rāda 105 mainītus failus, 9357 pievienotas un 5891 dzēstu rindu. Vislielāko daļu paņem nnue/nnue_accumulator.cpp ar 697 pievienotām un 670 dzēstām rindām, tam seko search.cpp ar 667 pret 508. Dalītās atmiņas realizācija shm_linux.h ar 671 rindu ir izdzēsta un aizstāta ar jaunu shm_unix.h, kas strādā arī macOS un BSD sistēmās. Failu attacks.h ar 354 rindām iepriekš nebija vispār.
Lejupielāžu skaitļi rāda, kā izvēle sadalījās. Stockfish 18 arhīvi kopā lejupielādēti 815 127 reizes, no tām 249 622 reizes lejupielādēts Windows AVX2 variants. Stockfish 19 gadījumā piecās dienās Windows universālais fails savācis 12 437 lejupielādes, Linux x86-64 variants 5123, bet RISC-V variants 111.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.