Výsledky 1 až 5 z 5

Téma: Vykon A64 v 64bit aneb kolik vykonu navic prinesou 64bit app

  1. #1

    Standardní Vykon A64 v 64bit aneb kolik vykonu navic prinesou 64bit app

    Zajimalo mne kolik vykonu prinesou 64bit aplikace a take o kolik mene bude zpomalovat provadeni 64bit operaci v 64bit rezimu nez v 32bit rezimu. Vytvoril jsem si proto jednoduchy benchmark abych postihl nektere typicke situace.

    Mate li chut vyzkouset si to u sebe, sosejte:
    Win 32bit
    Linux 32bit
    Linux 64bit

    Win 64bit bude k dispozici brzy. Linuxi binarky jsou baculate protoze jsou staticky linkovane zato by mely byt vsude spustitelne (pro spusteni 64bit verze pochopitelne potrebujete 64bit OS). Zdrojaky dam az je "odprasim" Prekladano s "-O2 -funroll-all-loops" (po nekolka experimentech asi nejlepsi). Win verze: arch. >=PPro a optimalizace na rychlost.

    Programek provadi trideni pole (porovnavani, swapovani prvku), nasobeni celociselnych matic a pseudo-scitani (stejne jako nasobeni akorat v nejvnorenejsim cyklu je scitani; z matematickeho hlediska nesmysl ale hezky algoritmus na mereni ). To vse nad 32bit a 64bit operandy. Working set je nastaven tak, aby se vesel do cache a propustnost pameti aby vysledek neovlivnila.

    Ted moje vysledky:
    Linux 32bit:
    Kód:
    Zmereno: Trideni  (int)     Vykon: 911.01 Kops/s
    Zmereno: Trideni  (int64)   Vykon: 646.47 Kops/s
    
    Zmereno: Scitani  (int)     Vykon: 2197.42 Kops/s
    Zmereno: Scitani  (int64)   Vykon: 1406.59 Kops/s
    
    Zmereno: Nasobeni (int)     Vykon: 1924.81 Kops/s
    Zmereno: Nasobeni (int64)   Vykon: 245.80 Kops/s
    Linux 64bit:
    Kód:
    Zmereno: Trideni  (int)     Vykon: 872.36 Kops/s
    Zmereno: Trideni  (int64)   Vykon: 853.89 Kops/s
    
    Zmereno: Scitani  (int)     Vykon: 2160.34 Kops/s
    Zmereno: Scitani  (int64)   Vykon: 2107.00 Kops/s
    
    Zmereno: Nasobeni (int)     Vykon: 1976.83 Kops/s
    Zmereno: Nasobeni (int64)   Vykon: 1771.63 Kops/s
    Dusledky:
    1) pokles vykonu pri provadeni operaci nad 64bit operandy je na 32bit architekture znacny, hlavne u nasobeni. Na 64bit tam rozdil porad je ale mnohem mensi.
    2) Lidi od gcc maji jeste na cem pracovat protoze 32bit verze programu pracujici s 32bit intem jsou vykonnejsi nez 64bit rogramy pracujici s 32bit int coz je ostuda protoze v 64bit rezimu je k dispozici vice registru atd. ktere by mely prinest vyhodu.
    3) Programy, ktere se pouze prelozi pro 64bit rezim (a neudelaji se optimalizace primo v kodu, coz velmi casto ani nejde) asi prilis vykonu navic nepoberou. Operace nad 64bit operandy v 95% programu neni treba.

    Vysledky z win dodam az prebootuju.

    Na zaver upozorneni- vysledky nelze primo porovnavat mezi win a linux verzemi protoze se vam do toho zanese rozdil v kvalite prekladacu (gcc je oproti MS prekladaci C z VS.NET docela pozadu). Je to SYNTETICKY benchmark se vsemi neduhami tohoto typu benchmarku, je treba na to pamatovat.

    Disclaimer: software is provided AS IS, za usmazene procesory atd. nerucim

  2. #2

    Standardní

    Pro mě ty výsledky nejsou žádným překvapením. Pokud je aplikace 32bitová, nebo používá instrukční sadu SSE, MMX, pak je zvýšení výkonu na současné 64bitové platformě používající integrovaný řadič paměti znatelné jen pokud se nevejde program nebo data, se kterými pracuje, do cache procesoru. Pokud se program vejde do cache procesoru (pro jednoduchost) a zpracovávaná data ne, pak operace v 64bitovém režimu s 64bitovými integery vyzaduje pro dosažení stejného výkonu (např. vyhledání položky v databázi, kde je minimalní velikost dat 64bitu) dvojnásobnou propustnost paměti než při práci s 32bit integery (s databazí kde STAČÍ 32bit přístup - ta má proti "64bitove" databázi poloviční velikost). To znamená, že použití 64bitové verze programu MŮŽE byt i nevýhodné tam, kde stačí 32 bitu. 64bitové integery maji hlavní smysl pro adresaci paměti, tj. posunují dosavadní limit z 2^32 na 2^64 bajtů, coz je dobré pro operační systém a podle mne to bude stačit na velmi dlouhou dobu. Provozování 64bit aplikací na 32bit jádře bude pomalejší (skoro) vždy. Pokud STAČÍ aplikaci pro práci 32bit integer, nebo SSE, nebo MMX, není důvod provozovat tu samou 64bit aplikaci na 64bitech - MŮŽE být ve finále i pomalejší (nejhorší zjednodušený případ, který nenastane: dvakrát delší kód i data, tj. potřeba 4x větší cache oproti 32bit platformě). Jiná situace je, pokud je 64 bitu OPRAVDU potřeba - pak lze jistě kód optimalizovat tak, aby používal všechny 64bit registry , a v tom (souhlasím s předchozím příspěvkem) by měl být HLAVNÍ narůst výkonu oproti 32bitovým aplikacím. Kdo o takové aplikaci víte, hoďte sem link na verze 64bit & 32bit, ať se to dá srovnat.

  3. #3
    Senior Member
    Založen
    23.06.2003
    Bydliště
    Amstelveen
    Příspěvky
    1 061
    Vliv
    266

    Standardní

    Tu http://www.anandtech.com/linux/ mozno najst mnoho porovnani vykonu 32 vs 64bit pod linuxom. Su tam aspon 4 clanky a v kazdom mnoho programov ale aj rozne nastavenia kompilatora a pod. Myslim ze to odpovie mnohe otazky ohladom vykonu 64bit....
    3570K, 16G, x25-m, itx
    xj40

  4. #4

    Standardní

    Citace Původně odeslal clock
    Pro mě ty výsledky nejsou žádným překvapením...
    Int na AMD64 platforme je porad 32bitovy. Proto working set korektne napsaneho 32bit programu pri prechodu na 64bit prilis neporoste. Zvetsi se akorat velikosti pointeru.

    Kod se rozhodne nezvetsi dvojnasobne ale v prumeru o 20%. Vyzkouseno praxi.

    Optimalizaci na vetsi pocet registru ma delat prekladac. Ty vzacne kousky kodu, ktere jsou psany primo v assembleru, se musi tak jako tak pro 64bit platformu predelat.

    Jen tak na zaver... proc bych potreoval 4x vetsi cache kdybych zvetsil 2x velikost dat i programu? To mi nejak nejde do hlavy. To jako velikost cache musi rust s kvadratem velikosti dat a programu nebo co? To je nejaky renonc

  5. #5

    Standardní

    Tech 4x jsem samozrejme prehnal , v praxi ten kod bude asi delsi o tech 20% jak rikas, ale s dvakrat velkymi zpracovavanymi daty je to ten dvojnasobek - predpokladam, ze cache je jen jedna.

    Edit: 4x beru zpet - v nejhorsim moznem pripade je to maximalne 2x
    1) Velikost cache N, predpoklad - velikost dat N/2, programu N/2 - kdyz se obe polozky vynasobi 2x, pak dostaneme velikost dat N a programu N, coz je dohromady 2N, tedy dvojnasobek, nikoli ctyrnasobek.
    2) - realnejsi situace: Velikost cache N, predpoklad - velikost dat N/2, programu N/2 - kdyz se prvni polozka vynasobi 2 a druha 1,2, potom je potreba 1.6x vetsi cache

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •