Jak se šachovými programy se 4 GB paměti RAM ?

(4 GB RAM and chess solving programs)

(Vaclav Kotesovec, added 4.9.2007, updated 17.5.2010)

Testoval jsem nejpoužívanější programy na řešení šachových úloh na počítači AMD 64 (dual-core) se 4 GB paměti RAM. Většina operačních systémů funguje bez problémů do 2 GB RAM. S pamětí 4 GB RAM mohou být problémy. V následující tabulce jsou shrnuty výsledky testování:

I upgraded my hardware to 4 GB RAM and tested best chess solving programs under different operating systems. Here are results:

programAlybadix 2005Popeye 4.37 (32-bit)WinChloe 1.67user memory
system / memoryused (announced)used (announced)used (announced) 
DOS4089 MB (4089 MB)32 MB (2 MB)-4 GB
Windows XP 32-bit SP21285 MB* (2047 MB)1985 MB (2048 MB)1132 MB (2048 MB)3.25 GB
Windows Vista 64-bit-1869 MB (2675 MB)?3327 MB
Windows Vista 32-bit30 MB** (30 MB)1901 MB (2048 MB)?2792 MB
Fedora 7 (Linux)-2600 MB (2 MB)-2792 MB
Mandriva 2007 (Linux)-2964 MB (2 MB)-4 GB
     
updated 10.6.2008 Popeye 4.47 (64-bit)  
Windows Vista 64-bit 3000 MB (2783 MB) 3327 MB
updated 2.7.2008Alybadix 2005   
Windows Vista 32-bit1600 MB*** (2047 MB)  2 GB
Windows Vista 32-bit SP11541 MB*** (1899 MB)  2300 MB
updated 17.9.2009Alybadix 2005   
Windows7 32-bit1564 MB*** (2047 MB)  2500 MB


Poznámky:
  • Systémy Vista 32-bit a Fedora 7 byly testovány pod VMWARE 6
  • Pro Popeye znamená hodnota "memory used" maximální možné nastavení hodnoty MAXMEM, se kterým jde program ještě spustit (při přidání 1 MB navíc už skončí s chybovou hláškou).
  • Pod systémy Windows programy sice nejprve zjistí (a zobrazují) hodně volné paměti, dostanou jí pak ale přiděleno mnohem méně. Tento problém je zřejmě ve fragmentaci paměti RAM, kdy systém přidělí aplikaci největší spojitý blok volné paměti, který je o dost menší než celá volná paměť.

  • Nejvhodnější se zdá být stále 32-bitový systém Windows XP, pod kterým je možno využít pro aplikace až 3 GB paměti RAM. Jedna aplikace může sice zabrat "jen" 2 GB RAM, ale (na dual-core procesoru) je možné spustit více aplikací najednou a potom je bariéra 2 GB překonána. Např.:
    Alybadix (1285 MB) + Alybadix (1285 MB)
    Popeye (1985 MB) + Popeye (1000 MB)
    Popeye (1700 MB) + Alybadix (1285 MB)

  • Pod 64-bitovými systémy není možno spustit 16-bitové programy, speciálně Alybadix.
  • Pod 32-bitovou Vistou dostane Alybadix (nebo obecně 16-bitový program) jen 30 MB RAM, což je prakticky nepoužitelné.
  • Dobrých výsledků dosahují Popeye pod Linuxem (Fedora 7), kde se podařilo překonat hranici 2 GB pro jednu aplikaci. Nefungují zde ale Alybadix ani WinChloe.
  • Ještě lepšího výsledku bylo dosaženo pod jiným Linuxovým systémem "Mandriva one 2007 / KDE" (64-bit), pod kterým dostanou Popeye až 2964 MB RAM !
  • UPDATE 10.6.2008: Popeye 4.47 mají i 64-bitovou verzi pro Windows pywin64.exe, ve které je překonána bariéra 2 GB RAM. Testováno pod Windows Vista (64-bit) s -MAXMEM 3000M.
  • UPDATE 2.7.2008: Omezení 30 MB RAM pod 32-bitovou Vistou lze obejít, viz*** (dole)
  • UPDATE 17.9.2009: Omezení 30 MB RAM pod 32-bitovými Windows7 lze obejít, viz*** (dole)
  • UPDATE 25.1.2010: Verze Alybadix 2005_10 (z 24.1.2010) umí pracovat pod DOSem s celými 4 GB RAM! Potřeba je nový modul CWSDPMI 6 (omezení 2 GB pro Windows zůstává, ale je dáno operačním systémem)

    Remarks:
  • Operating systems Vista 32-bit and Fedora 7 were tested under VMWARE 6
  • For Popeye mean value "memory used" maximal possible MAXMEM.
  • Under Windows systems user programs after start displayed much more free memory, than next really used (allocated from operating system).
  • Not possible run Alybadix (16-bit program) under Vista 64-bit.
  • Popeye break under Linux (Fedora 7) 2 GB limit for one application
  • Best operating system is still Windows XP 32-bit. All programs are function. Total 3 GB RAM is possible use for all applications.
  • UPDATE 10.6.2008: 64-bit version of Popeye for Windows compiled. Working under Windows Vista 64-bit with -MAXMEM 3000M without problems! 1,7x faster!
  • UPDATE 2.7.2008: How break 30 MB limit for DOS programs under 32-bit Vista, see*** (below)
  • UPDATE 17.9.2009: How break 30 MB limit for DOS programs under 32-bit Windows7, see*** (below)
  • UPDATE 25.1.2010: Alybadix since version 2005_10 (released 24.1.2010) working with full 4 GB under DOS. New CWSDPMI 7 (broken link) is necessary


    Porovnání časů řešení pod různými operačními systémy a v různých prostředích

    Nejlepšího času dosáhneme samozřejmě pod DOSem, kde program není ničím zdržován, ovšem za cenu "obětování" počítače pouze pro tento program.
    Pod Windows XP (32-bit) už dojde k mírnému zpomalení řešení, které je dáno režií systému (cca 10%), ale můžeme počítač dále používat pro běžné činnosti. Další zpomalení nastane díky tomu, že program dostane od systému k dispozici menší paměť než pod DOSem (1.2 GB místo celých 2 GB).

    Pod 64-bitovou Vistou sice nejdou spouštět 16-ti bitové programy, ale jde zde nainstalovat VMWARE (testováno s verzí 6) a pod tím jde provozovat úplně všechno. Například MS-DOS, pod kterým samozřejmě bez problémů spustíme Alybadix nebo VKSach. Alybadix tak dostane v prostředí VMWARE pod správně nakonfigurovaným DOSem až plné 2 GB RAM! Přesto tento způsob spuštění považuji pouze za experimentální, protože pod jinak vynikajícím VMWARE přeci jen dojde k určitému zpomalení, takže je Alybadix téměř 2x pomalejší než na "nevirtualizovaných" systémech. Za pozornost stojí si všimnout ještě toho, že hostitelské systémy Vista 64-bit a XP 32-bit se chovají v tomto směru téměř shodně.
    Zajímavá je ale situace v případě Windows 98 pod VMWARE, kdy čas řešení je překvapivě lepší než pod DOSem ve VMWARE, a to dokonce i při menší paměti (Windows 98 umožňují pouze 768 MB RAM). Zpomalení je zde pouze cca 25%.

    A jestě lépe dopadají pod VMWARE Windows XP, kde ztráta daná VMWARE je jen kolem 6-7%. Tento způsob spuštění se může zdát někomu nesmyslný (proč nespusit řešení pod XP přímo), spuštění pod VMWARE má ale jednu obrovskou výhodu: celý stav je možno kdykoliv uložit na disk, z VMWARE odejít, dělat něco jiného (i rebootovat!) a pak v řešení pokračovat (třeba se dá takto řešení pouštět vždy jen přes noc). Tuto vlastnost bez použití VMWARE má ze šachových programů jinak jen VKSach (RST soubory).

    Časy řešení Alybadixu pro známý Adrianův h#4 ukazuje následující tabulka:

    ALYBADIX 2005
    systemsolving timeslowdownmemory RAM
    MS-DOS4:541.002047 MB
    MS-DOS (Alybadix 2005.10)4:420.964089 MB
    Windows XP (32-bit)5:291.111285 MB*
    DOS under VMWARE (Vista 64-bit)9:211.902044 MB
    DOS under VMWARE (XP 32-bit)9:231.912044 MB
    Windows 98 under VMWARE (XP 32-bit)6:131.26 656 MB
    Windows XP (32-bit) under VMWARE (XP 32-bit)5:471.181285 MB*
    Vista 32-bit SP1 under VMWARE (XP 32-bit)6:141.271541 MB***
    Windows7 32-bit under VMWARE (XP 32-bit)5:391.151564 MB***
    Windows7 (32-bit)5:181.081541 MB***

    UPDATE 17.5.2010: Johan Beije testoval tuto úlohu na svém novém PC a dosáhl pod DOSem s 2 GB RAM času 2:53, což je nový rekord!
    Johan Beije wrote in e-mail: "Put the Adrian H#4 in DOS on my AMD X2 550 (3.1 Mhz). DOS gave me 1982 MB solvingtime: 2:53 m:s (Aly 2005)."
    This is new world record for this problem on PC!



    Pro srovnání jsem řešil ještě jeden sh==19 programem Popeye pod různými systémy a v následující tabulce jsou časy řešení:

     POPEYE 4.37   
    systemsolving timeslowdownmemory RAMversion
    MS-DOS7:552.2832 MBpydos32
    Windows XP (32-bit)3:391.051985 MBpywin32
    Vista (64-bit)3:371.041869 MBpywin32
    Mandriva Linux (64-bit)3:281.002964 MBpy
    Fedora 7 under VMWARE (XP 32-bit)3:461.082600 MBpy
    DOS under VMWARE (Vista 64-bit)9:422.7932 MBpydos32
    DOS under VMWARE (XP 32-bit)9:412.7932 MBpydos32
    Windows 98 under VMWARE (XP 32-bit)4:081.19700 MBpywin98
    Windows XP (32-bit) under VMWARE (XP 32-bit)3:491.101866 MBpywin32
         

    Pro správné testování s pamětí větší než 2 GB jsem musel zvolit jinou úlohu (jeden sh==11), takovou kdy dojde k zaplnění hashovacích tabulek nad 2 GB, nejlépe vícenásobnému (v případě jednodušších úloh - například takových jako byla výše testovaná úloha - by k tomu nedošlo a správná funkce programu by se neprověřila).
    I tested one sh==11 (filling of hash tables over 2 GB necessary for right testing!).

    updated 10.6.2008POPEYE 4.47   
    systemsolving timefastermemory RAMversion
    Windows XP (32-bit)57:011.001900 MBpywin32
    Windows Vista (64-bit)42:311.351900 MBpywin64
    Windows Vista (64-bit)32:331.753000 MBpywin64


  • Verzi Popeye pod Linuxem bylo nutno nejprve zkompilovat, více zde: How compile and run Popeye under Linux system ?.
  • Velké zpomalení pod DOSem je dáno hlavně menší pamětí, směrodatné je porovnání času pod "čistým" DOSem (7:55) a časem pod DOSem spuštěným pod VMWARE (9:41). Zpomalení dané VMWARE je v tomto případě jen 22% (ve srovnání s Alybadixem je z toho vidět, že tam je zpomalení dáno velmi rozdílnými ovladači DPMI paměti pod DOSem a pod Windows. Jak je vidět z výsledků pro Popeye, samotný DOS není pod VMWARE až tolik zpomalován).
  • Systém Fedora 7 pod VMWARE špatně měřil čas (ukazoval lepší časy), ale skutečný čas byl kolem 3:45 (testováno několikrát)
  • 64-bitový systém "Mandriva one 2007" (s uživatelským rozhraním "KDE") je tzv. Live CD, které se nemusí instalovat, jde rovnou spustit. Nejde zapisovat na disk, což jsem vyřešil vyhozením řádky "protokol" ze vstupního souboru pro Popeye. Bylo zde dosaženo nejlepšího času i téměř 3 GB přidělené paměti.


    UPDATE 10.6.2008: Pro směrodatný test 64-bitové verze Popeye 4.47 bylo třeba zvolit takovou úlohu, kde dojde k zaplnění celé paměti 3 GB RAM. Výsledky v tabulce výše ukazují, že 64-bitová verze je rychlejší a to ze 2 důvodů:
    1) 35% část - díky 64-bitovému kódu - to považuji za velký úspěch!
    2) 40% část - díky větší paměti (to je očekávaný výsledek)
    Celkově 1,75x rychlejší!

    I tested 64-bit version of Popeye 4.47 under Windows Vista 64-bit with 3000 MB RAM and with same memory (1900M) as under Windows XP and here are results. 64-bit version is faster for two reasons:
    1) 35% part - effect of 64-bit code - this is most interesting!
    2) 40% part - because have more memory (expected result)
    Total 1,75x faster!



    Související odkazy (additional links):

    Memory Management - Demystifying /3GB

    *Overcoming Windows Memory Allocation Limitations (broken link) - článek popisuje problémy s přidělováním paměti ve Windows. Potvrzuje zde, že pod Windows XP dostane aplikace jen asi 1.2 GB RAM bez ohledu jaká je velikost fyzické paměti RAM v počítači. Píše se zde: "... fragmentation automatically reduces the maximum malloc() allowed by an IDL process to approximately 1.2 GB. That is to say, the IDLDE, right after it loads, is unable to build an array that occupies more than 1.2 GB. This is because each array and the malloc() call behind it requires a single contiguous block of memory."

    **Windows Vista restricts non-Win32 apps to 32 MB of memory - tato chyba ve Vistě (odpovídající tomu, že Alybadix dostane jen 30 MB RAM) je potvrzena v tomto článku. Bohužel chyba nebyla opravena ani v SP1. This bug not fixed in SP1 (tested 9.2.2008)

    ***Solutions - zde je popsán postup, jak lze pod 32-bitovou Vistou obejít problém s omezením paměti DPMI pro DOSové programy. Pokud nejprve zkopírujeme HXVDD.DLL do \WINDOWS\SYSTEM32 a spustíme HXNTVDM.EXE, následný DOSový program již není omezen 32 MB RAM. Ilkka Blom testoval Alybadix a píše, že se dostal pod Vistou až na 1600 MB, což je dokonce lepší výsledek než pod Windows XP ("My Vista laptop with 2 GB memory can allocate about 1600 MB memory for the position tree - fine!").
    Pro Vistu se SP1 tato metoda nefunguje, ale lze použít jednodušší postup s vložením položky "DpmiLimit" do registru (je popsáno v citovaném článku). Toto jsem testoval a funguje!
    UPDATE 17.9.2009: Postup s přidáním položky DpmiLimit do registru (použitý pro Windows Vista) funguje i pro 32-bitové Windows7. Alybadix pak dostane přiděleno až 1564 MB RAM (což je více než pod Windows XP).
    Solution, how break 32 MB DPMI memory limit for DOS programs under 32-bit Windows7 (same as under Vista): Use "Regedit" and add item "DpmiLimit" to registry.


    Be carefully with Dpmi value. On this screenshot I added value 0x7fffffff (hexadecimal) or 2147483647 (decimal), = 2 GB RAM for DOS programs (Alybadix). This value I recommend for computers with 4 GB physical RAM. If your computer has less memory, add correspondent (less) value.
    Now is necessary reboot and then is memory for Alybadix 1564 MB (this is more than under Windows XP!), see next screenshot.





    Poznámka: Pod 32-bitovými systémy se 4 GB RAM využívá operační systém (Windows XP 32 bit) pouze cca 3,25 GB RAM. Zbytek paměti je mu nedostupný, protože tato paměť se překrývá s pamětí pro I/O desky, hodně z toho zabírá např. grafická karta atd. Fyzická RAM mezi 3,25 GB a 4 GB se zdá být nedostupná, přesto jí lze využít jako RAM disk (umí s ní pracovat např. program SuperSpeed RamDisk Plus, získáme tak RAM disk 768 MB). SuperSpeed RamDisk Plus can use unmanaged Windows memory between 3,25 GB and 4 GB.