Development in programs for solving of chess problems

(about 16 GB RAM and multi-core systems)

Vývoj v oblasti programů na řešení šachových úloh

(Václav Kotěšovec, 20.5.2012, updated and new examples added 30.5.2012)

Tento článek se zabývá vývojem v oblasti programů na řešení šachových úloh. Zatímco vývoj 16-ti bitových programů VKSach a Alybadix v podstatě skončil se systémem MS-DOS, novější programy začínají využívat 64-bitové systémy s možností paměti nad 4 GB a velké možnosti se nabízejí s nástupem více-jádrových procesorů.

This article is devoted to current development of programs for solving of chess problems. Development of old 16-bit programs (VKSach and Alybadix) ended with end of MS-DOS. Newer programs use 64-bit systems with more than 4 GB RAM and multi-core hardware systems open new possibilities.

Programy Popeye (od neoficiální verze 4.60), Gustav (ve verzi Gustav-C) a WinChloe umí ve svých 64-bitových verzích využít téměř celou paměť 16 GB RAM, kterou používají k zaznamenání pozic, které již během řešení zkoumaly a jsou proto rychlejší.

Programs Popeye (since non-official version 4.60), Gustav (in Gustav-C version) and WinChloe already know in his 64-bit versions use almost whole 16 GB memory for tested positions and therefore are faster.

Co se týče využití více jader, tak bez nutnosti změny kódu jde (při řešení více úloh najednou) využít toho, že tyto programy jde spustit paralelně vícekrát (např. 4 programy Gustav současně, každý se 3,5 GB RAM), přičemž při takovém spuštění se opravdu využije celá kapacita procesoru a celkové zrychlení je tak dáno počtem jader. Pro přesnost je třeba doplnit, že samozřejmě při přidělení jen části paměti dojde k určitému zpomalení běhu programů ve srovnání se stavem, kdy má program k dispozici celou paměť. Obrázek ukazuje oba případy, paralelní a sériové spuštění. Celkově je při 4 jádrech paralelní spuštění (při přidělení 3,5 GB paměti každému programu) asi 3x efektivnější než postupné spouštění programů po jednom s pamětí 14 GB. Tato konstanta byla zjištěna experimentálně jako průměr testování několika stovek úloh, přičemž šlo o úlohy, jejichž řešení každé trvalo hodiny až desítky hodin (u jednodušších úloh je rozdíl zanedbatelný).

About multi-core systems. Without change of code is possible run more instances of same programs parallel. This is useful if we need test more chess problems simultaneously (for example 4 instances of Gustav, each with 3,5 GB memory). In this case is full capacity of CPU used and acceleration is equal to number of cores. Of course, each program would be little faster with full memory (in example if solving time is t with 14 GB RAM, then total time in serial case is 4t, but in parallel case only ~ 4/3 t for all 4 tasks).



Doposud ale nešlo využít více jader na zrychlení řešení jediné šachové úlohy. V takovém případě je nutná už poměrně komplikovaná úprava programu a první řešitelský program, který toto umí, je WinChloe (od verze 3.09, aktuálně testována verze 3.18). Postup je takový, že program rozdělí práci na úloze tak, že každé jádro postupně dostává k řešení pozice podle možných prvních tahů (bílého v přímých úlohách, černého v pomocných matech). Toto rozdělení vede k úspoře času, ale zrychlení řešení není nikdy rovno až počtu jader. Např. se 4-mi jádry je průměrné zrychlení asi 2,5 x (ne 4x). Navíc ke konci řešení nejsou už využita všechna jádra, protože se čeká až skončí ta nejpomalejší větev.

But till now was not possible use more than one core for solving of one chess problem. In such case is modification of program necessary. First solving program which can use more than one core is WinChloe (since version 3.09, current version is 3.18). During solving master program split his work by first moves of White in direct problems (or of Black in helpmates) to each core. Elapsed time is less than with one core, but acceleration is not equal to number of cores. For example with 4 cores is average acceleration only 2,5x (not 4x). In addition, before ending of solving are not all cores used, because master must wait for slowest core.

Z grafu je vidět jeden zajímavý postřeh. Nejvíce se využije multi-procesorový systém v pomocných matech při řešení metodou hledání matových obrazců. To má jednoznačný důvod - při této metodě master rozděluje práci ne podle prvních tahů černého (jako v případě metody "hrubé síly"), ale podle obrazců. Pokud je hodně obrazců, práce je rozdělena mezi procesory rovnoměrněji, což právě vede ke zrychlení.

Remark: Acceleration is most efficient in intelligent mode in helpmates. This has simple reason: splitting of work is in this case by mating positions. If many mating positions exists then work of cores has better equability and solving is therefore faster.



Následující tabulky obsahují porovnání časů řešení 3 vybraných úloh: pomocného matu, vícetažky a samomatu. Všechny testy (bez ohledu na operační systém) byly dělány na stejném 64-bitovém počítači s procesorem Intel Core i7.

Following tables contains comparison of elapsed times of three selected chess problems: helpmate, moremover and selfmate. All problems in this article were tested on same 64-bit computer with processor Intel Core i7.


h#4 by Adrian
programsystemmemorynumber of coresbrute forceintelligent mode
Alybadix 2005 (16-bit)MS-DOS4.0 GB12 m 09 s11 m 19 s
Alybadix 2005 (16-bit)XP under VMWARE (W7)1.2 GB12 m 35 s14 m 13 s
Gustav 3.2 (32 bit)Windows 7 - 64 bit1.7 GB13 m 54 s-
Gustav-CWindows 7 - 64 bit14.0 GB13 m 53 s-
Popeye 4.55Windows 7 - 64 bit2.0 GB118 h 44 m 34 s5 m 22 s
Popeye 4.60*Windows 7 - 64 bit14.0 GB1 3 h 38 m 21 s2 m 04 s
Popeye 4.61Windows 7 - 64 bit14.0 GB1 6 h 39 m 06 s**1 m 57 s
WinChloe 3.18Windows 7 - 64 bit8 x 1.8 GB8 46 m 41 s2 m 13 s
WinChloe 3.18Windows 7 - 64 bit4 x 3.3 GB4 54 m 37 s3 m 15 s
WinChloe 3.18Windows 7 - 64 bit2 x 3.3 GB21 h 19 m 48 s5 m 05 s
WinChloe 3.18Windows 7 - 64 bit1 x 3.3 GB12 h 29 m 12 s9 m 10 s
*non-official version
**Previous test (with elapsed time 9 hours 6 minutes) was with extreme swapping to hard disk, if option MAXMEM was not used (and Popeye used in this case 15516 MB RAM). Therefore I recommend always use MAXMEM, for total memory 16 GB RAM for example -MAXMEM 14000M, let some space free.

U tohoto pomocného matu je zajímavé, že nejlepší časy dosažené hrubou silou a metodou hledání matových obrazců, i když každý jiným programem, jsou téměř shodné. Po desítkách let jsme se tak dostali různými cestami na mez, kterou půjde dále zlepšovat asi už jen zrychlováním hardwaru.

In case of this helpmate is interesting that best solving times (with different programs!) for brute force method and for intelligent mode are almost identical. These different ways to same target are near limit border and can be improved probably only with acceleration of hardware.



Examples from WinChloe website
programsystemmemorynumber of cores#11 by V. Zipfs#9 by U. Degener
Gustav 3.2 (32 bit)Windows 7 - 64 bit1.7 GB115 m 06 s35 m 56 s
Gustav-CWindows 7 - 64 bit14.0 GB113 m 27 s32 m 23 s
WinChloe 3.18Windows 7 - 64 bit8 x 1.8 GB8 8 m 25 s19 m 15 s
WinChloe 3.18Windows 7 - 64 bit4 x 3.3 GB4 9 m 12 s24 m 00 s
WinChloe 3.18Windows 7 - 64 bit2 x 3.3 GB213 m 07 s27 m 31 s
WinChloe 3.18Windows 7 - 64 bit1 x 3.3 GB124 m 27 s38 m 55 s

Velké zlepšení je patrné u poslední verze programu WinChloe 3.18, která je pro řešení jedné ortodoxní úlohy (např. při skládání) na systémech s aspoň 4 jádry občas dokonce rychlejší než program Gustav. Pokud však testujeme více úloh najednou (např. redaktoři šachových rubrik při zpracování originálů), je stále nejrychlejším programem Gustav, protože se vyplatí lépe využít kapacitu procesoru tím, že spustíme několik těchto programů paralelně. Gustav je také výrazně rychlejší než WinChloe na starších počítačích s jen jedním procesorem. Síla programu WinChloe je nyní hlavně v dobrém využití možností hardwaru na nejnovějších počítačích. Pro exoúlohy je stále nejrychlejší Alybadix, bohužel pod 64-ti bitovými systémy nejdou ale již 16-ti bitové programy spustit. Je proto nutné použít VMWARE nebo Virtual-PC. Jinou možností je použít Popeye - tento program se stále zlepšuje a je šance, že se časem dočkáme též multi-procesorové verze.

Great improvements are in latest version 3.18 of program WinChloe. For solving of some of orthodox direct mates or selfmates is now (on hardware systems with 4 or more cores!) program WinChloe even faster than Gustav. But for solving of serie such problems is still fastest program Gustav, because more instances of program can be running parallel. Gustav is also much faster than WinChloe on old computers with only one processor. For fairy problems is still fastest Alybadix, but is not possible run 16-bit programs on 64-bit systems. Therefore is necessary for this purpose use VMWARE or Virtual-PC. I believe that development will be continued and also some next version of Popeye will be multi-core.




Next examples (added 24.5.2012)
programsystemmemorynumber of coress#10 by Shinkmans#10 by Azhusin
Gustav-CWindows 7 - 64 bit14.0 GB11 h 30 m2 h 25 m
Gustav-CWindows 7 - 64 bit 1.8 GB11 h 42 m2 h 40 m
WinChloe 3.18Windows 7 - 64 bit8 x 1.8 GB83 h 56 m1 h 08 m

In case of first problem is Gustav-C with 1 core faster than WinChloe with 8 cores.
For compare, Gustav-C with 1.8 GB RAM for hash tables is only slightly slower (13%, 10%) than with full memory 14 GB RAM.


Next example (added 27.5.2012)
programsystemmemorynumber of coress#9 by Zerengis
Gustav-CWindows 7 - 64 bit14.0 GB11 h 11 m
Gustav-CWindows 7 - 64 bit 1.8 GB11 h 14 m
Gustav 3.2h (32-bit)Windows 7 - 64 bit 1.7 GB11 h 27 m
WinChloe 3.18Windows 7 - 64 bit8 x 1.8 GB83 h 44 m
WinChloe 3.18Windows 7 - 64 bit4 x 3.3 GB44 h 37 m



V nové sérii náhodně vybraných 7 samomatů byl program WinChloe rychlejší jen v samomatu bez proměn bílých pěšců. Z dalších testů proto vyplývá nový výsledek: V samomatech s proměnami bílých pěšců je Gustav-C (na jednom jádru) rychlejší než WinChloe 3.18 s 8 jádry! Tento rozdíl je nejvíce patrný na poslední úloze v této sérii s proměnami všech 8 bílých pěšců, kde je program WinChloe dokonce 7,5x pomalejší než Gustav-C. Celkové skóre ze všech testovaných samomatů v tomto článku je takové, že ve 4 úlohách byl rychlejší program WinChloe a v 8 úlohách program Gustav.

New result: In selfmates with promotions of white pawns is Gustav-C (with 1 core) much faster than WinChloe 3.18 with 8 cores!
From total 12 long selfmates, which I tested in this article, was 4x faster WinChloe and 8x faster Gustav.

New examples, random selection of 7 selfmates (added 30.5.2012)
programmemorycores s#10 s#8 s#8 s#11 s#10 s#10 s#10
Gustav-C 14.0 GB1 47 m 35 s 2 h 14 m 36 s 1 h 50 m 34 s 42 m 53 s 10 m 52 s 27 m 09 s 46 m 44 s
WinChloe 3.188 x 1.8 GB8 7 h 58 m 25 s 4 h 16 m 25 s > 5 h   2 h 01 m 24 s 28 m 58 s 16 m 12 s 5 h 45 m 54 s

composers and comments:
s#10, W. A. Shinkman, one promotion (WinChloe - 6 cores finished at 1 h 33 m, then long time continued with 2 and 1 core yet (move 1.Kd6))
s#8 , A. Styopochkin, thema Valadao
s#8 , A. Selivanov, 2 promotions (WinChloe - after 5 hours were only 12 from 73 moves tested.)
s#11, W. A. Shinkman, miniature, one promotion (WinChloe - all 8 cores worked 57 minutes, 7 cores finished after 1 hour 8 minutes, but then remaining one core long tested key move 1.c8Q yet)
s#10, A. H. Kniest, 2 promotions (WinChloe - 7 cores finished in short time 5 minutes, but move 1.c7 continued very long time with only 1 core)
s#10, W. Speckmann + F. Burchard, free black rook, no white pawns promotions
s#10, J. Csak, 8 promotions, (WinChloe - 4 cores finished after 2 hours 12 minutes, rest moves were 1.c8Q, 1.a8Q, 1.a8R, 7 cores finished after 4 hours 42 minutes and last move was 1.Q:h1)

V některých úlohách, kde by mohl být program WinChloe rychlejší, tomu tak není z důvodu, že ke konci řešení už není využito všech 8 jader. To je sice celkem logické, protože při rozdělování práce podle prvních tahů bílého nikdy nebudou trvat jednotlivé tahy stejně dlouho, ale algoritmus by šlo ještě vylepšit. V případě, kdy zůstane už jen jeden poslední tah, by šlo opět rozložit zbylou práci mezi jednotlivé procesory. Graf ukazuje využití paměti pro dvě z testovaných úloh. Zatímco v prvním případě (s#10, W. Speckmann + F. Burchard) jednotlivé tasky končily jen s malými časovými odstupy, ve druhém případě (s#10, A. H. Kniest) většina času připadla na dokončování řešení s posledním tahem s pouze jedním jádrem a hardware tak nebyl optimálně využit.

Graph - WinChloe 3.18, time / memory
s#10, W. Speckmann + F. Burchard
Total time 16 m 12 s
optimal work of all 8 cores




s#10, A. H. Kniest
Total time 28 m 58 s
7 cores finished after 5 minutes,
then continued only one core


Jednoznačná odpověď na otázku, zda je lepší Gustav nebo WinChloe ale neexistuje. Pro testování úloh, jejichž řešení trvá jen minuty až desítky minut je příjemnější program WinChloe, ale pro mnoha-hodinové testování náročných vícetahových samomatů je užitečnější program Gustav. Hlavní důvod tohoto závěru nevidím ani tak v potřebném strojovém čase (časy řešení už většinou nejsou nějak dramaticky odlišné), ale v tom, že od programu WinChloe lze v danou chvíli spustit pouze jednu kopii, takže během řešení není možné program jinak používat, přístup do databáze je zablokován. Není možné třeba současně prohlížet jiné úlohy v databázi, je třeba počkat až skončí řešení. To je poměrně nepříjemné a z praktického hlediska je tak reálné dlouhé testy spouštět jedině přes noc. Pokud přesto chceme využít všechna jádra a současně na počítači ještě normálně pracovat, doporučuji nastavit všem taskům "WChloe64.exe" nižší prioritu (např. "below normal"), jinak bude počítač zahlcen a pro jinou činnost téměř nepoužitelný. Z hlediska využití paměti má program WinChloe dobře nastaveno, že obsadí jen asi 95% volné paměti RAM (ne plných 100%) a nedochází tak ke zbytečnému swapování (tento problém je bohužel v programu Popeye).

Unambiguous answer if is better Gustav or WinChloe not exists. For short testing (tens of minutes) is more pleasant WinChloe, but for long testing (many hours) is more useful Gustav. Only one instance of WinChloe can be run at the same time and during solving is access to database impossible. We must wait for end of solving. From practical view are long tests really possible only over night. If we want use all cores and normally work on computer yet, I recommend set priority of all tasks "WChloe64.exe" to "below normal" (in Windows Task Manager), else will be system overloaded and for other work wholly unusable.

Process          CPU     Time       Memory      Priority
WChloe64.exe      13   1:06:33   1 753 680 kB  Below normal
WChloe64.exe      13   1:05:35   1 753 680 kB  Below normal
WChloe64.exe      12   1:06:22   1 753 676 kB  Below normal
WChloe64.exe      13   1:06:16   1 753 680 kB  Below normal
WChloe64.exe      12   1:06:29   1 753 644 kB  Below normal
WChloe64.exe      12   1:05:50   1 753 632 kB  Below normal
WChloe64.exe      12   1:05:01   1 753 676 kB  Below normal
WChloe64.exe      12   1:04:53   1 753 664 kB  Below normal
Winchloe.exe *32  00   0:00:55     225 628 kB  Normal

Pro částečné testování ortodoxních úloh (rychlé hledání vedlejších řešení, zejména ve více-tahových samomatech) je nejlepší program Gustav, ve WinChloe pro to neexistuje ekvivalent. Možnost částečných testů mají ještě programy Alybadix (skvělý zejména pro exoúlohy) a Popeye. Od programu Gustav existují v současné době 2 verze. Verze 3.2, která je sice jen 32-bitová a umí proto obsloužit jen 1.7 GB RAM, ale má uživatelské rozhraní a právě díky tomu je vhodná pro rychlé částečné testování (je možný buď automatický mód nebo mohou pokročilejší uživatelé experimentovat s různými parametry). Verze Gustav-C je rychlejší než Gustav 3.2 a umí pracovat s pamětí až 14 GB, nemá však uživatelské rozhraní. Pro částečné testy tak není Gustav-C vhodný, jeho síla je hlavně v plném testování metodou "brute force". Vstupem i výstupem jsou textové soubory. Je tak možné i dávkové zpracování více úloh.

For fast partial testing of orthodox moremovers and long selfmates is best Gustav (in 32-bit version 3.2 with user interface). Faster 64-bit version Gustav-C has no user interface and is useful only for full testing (with "brute force" method). Possibility of partial testing have also programs Alybadix (best for fairy problems) and Popeye.




home page