Hlavní navigace

Kam se poděl výkon

24. 3. 2008 12:34 Lukáš Nevosád

Před pár týdny mne při čtení o Apple iPhone SDK zaujalo, že nebude umožňovat běh uživatelských aplikací na pozadí. Důvodem má být to, aby každá aplikace měla k dispozici definovaný výkon, se kterým by mohla počítat. Tato zavrženíhodně revoluční myšlenka mne vyprovokovala zamyslet se nad tím, kam se vlastně ten výkon ztrácí.

Mars.exe

IT důchodci si zajisté vzpomenou na skvělé demo mars.exe od Tima Clarke. Pro připomenutí – jednalo se o myší ovládané demo přeletu nad 3D terénem. Vynikalo na svou dobu skvělou grafikou a především neuvěřitelnou rychlostí. Toto přes 10 let staré demo na mé obstarožní třiosmšestce doslova svištělo.

Vezmeme-li v úvahu obecně uznávanou aplikaci Moorovo pravidla, totiž že výkon počítačů roste po exponenciální křivce a zdvojnásobuje se přibližně každých 18 měsíců, nedá mi to nezeptat se: Jaktože ještě dnes musíme na počítače čekat?

Přestože je toto zamyšlení spíše námětem k diskuzi, neodpustím si několik vlastních postřehů, které mají dle mého názoru na pomalé reakce nejzásadnější vliv:

1) Hardware

Oddělení datových úložišť od operační paměti byla při vzniku počítačů tak trochu znouzecnost. Používat pro obojí stejné úložiště bylo zpočátku technicky neřešitelné, později ekonomicky neúnosné. Myšlenka je to ale jinak z hlediska výkonu lákavá – především zde odpadá dramatický rozdíl v přístupových dobách. Že to jde, dokazovaly první generace PDA. I ty ovšem kladly mezi dlouhodobou a operační paměť virtuální závoru. Pokud se ale oprostíme od konvenčního myšlení a závoru otevřeme, nabízí se u takového zařízení zcela nové obzory:

Programy by se nemusely nikam načítat, pointer aktuálně vykonávané instrukce by se prostě nastavil přímo tam, kde je program uložený. Programy by nemusely nic nikam ukládat, po spuštění zařízení by byly vždy ve stavu, v jakém je uživatel zanechal. Žádná data by nebylo potřeba mít dvakrát, tedy na disku a v paměti. Mimo jiné by to znamenalo například nulový čas potřebný pro zapnutí či vypnutí zařízení nebo spuštění programu.

Proč takové zařízení ještě nemáme? Odpověď je jednoduchá. Není, kdo by jej vyvinul. Operační systém pro takové zařízení by bylo nutné napsat kompletně znovu. Zapomeňte na to, že by šel použít kernel z unixu, Windows nebo jakéhokoliv jiného současného systému. A do toho se pochopitelně nikomu nechce.

Můj dnešní počítač má stokrát větší operační paměť než byla kapacita pevného disku počítače, se kterým jsem pracoval před 10 lety. Přesto se v něm disk stále točí a stále se na něj čeká.

2) Software

Mars.exe byl, stejně jako několik ostatních skvělých programů své doby (namátkou třeba Volkov Commander), napsán v assembleru – tedy v jazyce přímo překládaném do instrukcí pro konkrétní typ procesoru. Kdo assembler a architekturu procesorů skutečně dobře ovládal, dokázal v něm napsat kód násobně rychlejší a úspornější než v jakémkoliv programovacím jazyce.

Dnešní programy jdou přesně opačnou cestou než assembler. Především se píšou multiplatformně, využívají stovky pokud možno co nejuniverzálněji napsaných knihoven, namísto funkcionálního programování používají komplexní objekty. Samozřejmě to není bezúčelné – odpovídá to snaze o univerzální, přenositelný a bezpečný kód – nicméně na druhou stranu jsou takové aplikace plné balastu a tudíž nabubřelé, pomalé a paměťově náročné.

Přeze všechno, realita dneška je ještě děsivější. Pokročilé webové aplikace, které se v poslední době snaží suplovat i veškerý kancelářský software, využívají dokonce jazyků skriptovacích a pro vykreslování UI využívají šílenou abstrakci poskytovanou k tomuto účelu naprosto nevhodným rozhraním webových prohlížečů. K už i tak obrovské režii se navíc přidává přenos dat na dlouhé vzdálenosti po síti.

Korunu pomalosti pak nasazuje operační systém. Přestože grafický kabátek se mění každých pár let, jeho jádro zůstává prakticky stejné. Stále má problémy správně prioritizovat procesy, stále nedokáže odlišit data, která by měla zůstat v operační paměti od těch, které je možné s klidem přesouvat na disk. Teprve nedávno se operačním systémům podařilo začít využívat k vykreslování UI grafickou kartu. A výsledek? Nové grafické efekty, úspora prostředků ztracena v režii.

Sdílet

  • 24. 3. 2008 14:35

    Petr Šnajdr (neregistrovaný)

    Myslím, že poměrně výrazně pomíjite projektovou, produktovou a businessovou stránku vývoje software.

    Řekněte si co je cílem vývoje většiny běžného software? Je to dosažení maximální adaptace na dané hardware a ultraoptimalizace, a nebo jde o snahu naplnit potřeby uživatelů/zákazníků a vytvořit zisk?

    To je důvod proč dnešní programy jdou jinou cestou a přiznejme si, že v celkovém kontextu je to dobře. Představa nezbytnosti vývoje v assambleru by asi položila (a to i komerčně) většinu firem a to nejenom z pohledu zvýšených nákladů, tak i schopnosti najít dostatek programátorů atd.

    Proč má TCP/IP vicevrstevnou architekturu, když by se to vše dalo udělat monoliticky, ideálně zadrátovaně do hardware, tak jak se sítě dělaly dříve a bez zbytečných ztrát výkonu?

    Výsledek? Růst nákladů na vývoj i operativu, běžné PCko by nestálo 10 000 Kč, ale třeba 200 000 a měl by ho málokdo. Marketingově vzato by to ale trh takovou děsivou představu, abych použil vaši vlastní terminologii :-))), ani nepřipustil.

    Nádherným příkladem je DEC, který v technických libůstkách byl dlouhodobě nepřekonatelnou firmou a to je prehistorie i z pohledu vytvoření Mars.exe. Ten je v podstatě už novodobou aplikací. Výsledek? Problémy DEC na trhu a dnes už slávu a lesk této značky pamatuje málokdo.

    Pokud se ptáte "Jaktože ještě dnes musíme na počítače čekat?", tak je to jistě dobrá otázka, ale srovnejte co za tím čekáním stálo v době DOSu a co v době děrných štítků. Počítače se snaží přibližiovat člověku a bavme se klidně zdali to dělají tím správným způsobem, ale ten pokrok tu je a něco stojí a opět díky za to.

    Celkově to nejenom snižuje cenu tj. dostupnost pro masy, ale i použitelnost (8080 dne sstojí pár korun, ale použít ji umí jen několik lidí ... to samo o sobě nestačí).

    Nakonec tyto "neefektivity" mají význam nejenom z marketingového, ale i evolučního pohledu. Podívejte se do přírody, jednobuněčné organismy jsou jistě efektivnější než mnohobuněčné, které ztrácí energii na vlastní koordinaci a řízení prostřednictvím systémů jako je krevní oběh nebo nervová síť, o mozku ani nemluvě :-)

  • 24. 3. 2008 14:44

    Grovik (neregistrovaný)

    Znate Amigu? A znate AMigaOS?
    Existují jeho prepisy pro jine CPU (AROS) popripade klony jako MORPH OS.
    Stacilo by PDA pohanene derivatem PowerPC. Muzu vas ujistit ze ne vsichni jdou smerem opacnym nez dnesni OS.
    Nakonec Vista je na stejnem HW taky pomalejsi presto dela to same jako WinXP.

  • 24. 3. 2008 15:03

    lobo (neregistrovaný)

    suhlasim s clankom len pridam este jednu 'kapitolu' a tou su vyrobcovia hardware - je uplne do placu ked driver ku zvukovke ma po instalaci 147 MB, ku grafike tiez okolo 100MB a samozrejme kazdy driver si nainstaluje 2-3 services a potom este sa nas*rie nejaky automaticky update tohoto driveru do registrov (pozdravujem obzvlast panov z HP) a potom taskbar vpravo pri hodinkach je plny uplne zbytocnych ikoniek ktore si tam vyrobcovia natlacili

    manzelka ma IBM T23 (stare uplne dost) a XP som jej vytunoval(vyhodit cukrikovy hnusny design, pozabijat polovicu services co su default zapnute) tak ze pocitac ma 3x rychlejsie odozvy a aj celkovu pracu na nom ako jej kolegyna co ma nejake Core Duo s 2GB ram a samozrejme - Windows Hlista

  • 24. 3. 2008 15:32

    Petr Šnajdr (neregistrovaný)

    [2] Otázka je zdali AROS a Morph OS jsou cesty kudy jde vývoj a ne pouhlé slepé vývojové linie. Co mi přinese AROS oproti Linuxu? Menší náklady, více aplikaci, tak lepší GUI, že neodolám?

    AROS ani Morph OS moc neznám tj. nemohu soudit, jen poznamenávám, že některé příznaky nevypovídají právě o nějaké velké budoucnosti tohoto směru, pakliže se nenajde v nějakém velmi úzkém specifickém segmentu.

    Ale samozřejmě pokud si myslíte něco jiného a jste si svojí pravdou jist, pak doporučuji najít investora a možná budete bohatý muž :-)

    Ps. Už jste viděl http://www.morphos.net/ ?

    Nicméně toto ej také velmi odvážné a silné tvrzení:

    "Nakonec Vista je na stejnem HW taky pomalejsi presto dela to same jako WinXP"

    No ne, že bych měl nutkavé potřeby bránit Visty, první verze mě nenadchla a Microsoft komunikuje hlavně věci týkající se shellu a ne samotného OS (pochopitelně s ohledem na to komu je určen), ale že dělá totéž bych se neodvažoval říct.

    http://technet.microsoft.com/cs-cz/magazine/cc162494(en-us).aspx
    http://technet.microsoft.com/en-us/magazine/cc162480.aspx
    http://technet.microsoft.com/cs-cz/magazine/cc162458(en-us).aspx

    Navíc řada věcí může být přípravou na další verze, případně Windows 2008 server a v současné se nemusí nijak zásadně projevovat. Nicméně to asi uživatel neocení, ten si na první pohled všimne, že průhledná okna v XP shellu nebyla :)

    [3] Ty drivery mě také štvou. To je opravdu zhovadilost, která se uchytila už docela dávno. Samotný driver má pár kilo a ten zbytek je "nezbytný" balast, který má charakter téměř malware. Prostě je třeba uživateli neustále připomínat, že ta nejlepší grafická karta je NVIDIA (ATI, atd.) a to i za cenu ikonky v taskbaru. Jinak si to neumím vysvětlit.

  • 24. 3. 2008 20:23

    P_V (neregistrovaný)

    Co když ta nemožnost běhu na pozadí je nikoli kvůli výpočetnímu výkonu, ale kvůli tomu, že ji z marketingových důvodů do zadarmového SDK nedali?

  • 24. 3. 2008 21:39

    Lukas Nevosad (neregistrovaný)

    [1] Berete mne prilis doslova. Vsak to take zminuji, ze dnesni software ma trochu jine priority. Samozrejme, vyvijet software v assembleru byl z obchodniho hlediska nesmysl zhruba od doby, co byl k dispozici rozumny prekladac cehokoliv jineho.

    Stejne tak vicevrstva architektura urcite ma opodstatneni - zamyslel jsem se pouze nad tim, jestli to cele neni trochu prebujele a zda vyhody vyvazi vzniklou rezii.

    Prostou uvahou - prace ve Windows 3.11 na prumerne sestave te doby byla zhruba stejne pomala jako ve Windows Vista na prumerne sestave dnes. Ano, pribyly nejake funkce, vsechno je to vice multimedialni, vice provazane s internetem atp. - ale rozhodne to neodpovida tomu, ze za tu dobu vzrostl vykon 64x!

  • 24. 3. 2008 22:20

    Petr Šnajdr (neregistrovaný)

    [6] Beru vás přesně tak jak jste to napsal, je tedy možné říci, že doslova :-)

    Jasně, ale je otázka zdali uživatele trápí zrovna výkon a nebo účel. Do doby dokud se nám nepodaří jasně a nezlomně narazit na hranici dalšího růstu výkonu hardware je to hezké nostalgické zamyšlení, ale ve své podstatě neužitečné. Tudy cesta nevede.Tak proč nad tím ronit slzy, ne?

    A ta druhá stránka věci, že to co popisujete má poměrně jasné důvody mi tam, pokud ne chybí, tak přijde silně opomenuta. Asi tolik ještě k tomu tématu :-)

    [5] Tím důvodem může být i něco mnohem praktičtějšího. Třeba to, že díky tomu nebude zařízení zaplácáno spuštěnými procesy, které už k ničemu nejsou, ale jelikož uživatel o nich neví, tak má jen pocit, že se to celé nějak zpomaluje, kousá atd. Sám si vzpomínám jak jsem byl vzteklý s Nokii co, že se chová divně (rozumějte: více divně než obvykle) a ono mi tam na pozadí běžel Doom a když nic jiného tak užíral ne neznatelně paměti :-)

    tj. technická dokonalost může někdy zhoršit uživatelské dojmy a třeba je to ten důvod. Nevím :-)

  • 24. 3. 2008 22:24

    bflm (neregistrovaný)

    U uživatelského rozhraní nejde ani tak o hrubý výpočetní výkon jako o latence. Počítač třeba může faktorizovat 128 bitová čísla během pár minut, ale jak mezi kliknutím a reakcí uplyne víc jak 40 ms, tak bude uživatel skuhrat, jak je to pomalé.

  • 28. 3. 2008 1:08

    Miloslav Ponkrác (neregistrovaný)

    Ono to taky dříve bylo jednodušší. Třeba i ten assembler byl snadný a jednoduchý a překladače C/C++ generovaly pomalý kód. Dnes je architektura procesorů velmi složitá - a abyste napsali skutečně rychlý asm program, musíte jí do detailu znát. A překladače C/C++ dnes generují velmi optimální a pěkný kód mnohonásobně lepší, než kdysi. Garantuji Vám, že 99,9% dnešních (i docela znalých) assembleristů pro středně velký program napíše pomalejší program, než to co vyleze z kvalitního C/C++ kompilátoru.

    Já osobně jsem s vývojem dnešních operačních systémů a programovacích prostředků celkem spokojen - až na několik věcí:

    1) Windows Vista je nezvládnutý systém - podle mě asi stejně nepovedený jako Windows ME a jeho hw nároky jsou dost přehnané (doufám, že nějaký idiot tu nebude zase propagovat cenami dnešního hw).

    2) Velmi chudá množina programovacích jazyků, než třeba před deseti lety. A často ty jazyky dost dřou na to, na co se používají.

    3) Rychlokvašnost dnešních programátorů. 95% (a to jsem velký optimista) dnešních programátorů překvapíte otázkou třeba "co je to hašovací tabulka", nebo "co je to číslo NaN". Znalosti většiny dnešních programátorů jsou tak dvacetinové oproti znalostem, kteří měli programátoři třeba deseti lety.

  • 29. 3. 2008 8:34

    Lukas Nevosad (neregistrovaný)

    [10]

    1. Windows Vista jsou nazirany navlas stejne, jako se lide tvarili na XP - malo muziky navic a zvysene naroky na HW. Problem dnes neni ani tak vykon procesoru, jako nedostatek pameti. Pokud si je nekdo koupi v sestave s 512MB RAM, coz bylo malo uz na XP, tak se neni cemu divit. Ve firme mam Visty na min 2GB RAM a slapou vyborne. Oproti XP predevsim navic funguje spolehlive i sit, a da se lepe zalohovat.

    2. To urcite nesouhlasim - snad jen v tom, ze jazyky (hlavne ty interpretovane) se nektere pouzivaji i na veci, na ktere se z principu pouzivat nemaji.

    3. Ono to souvisi s tim, ze se dnes pouziva velka uroven abstrakce a uz neni potreba znat registry procesoru nebo jak funguje quicksort. Na typickou ulohu - serad pole - se proste pouzije funkce sort() z nejake knihovny, pricemz programator doufa, ze funkce, ktera to radi, bude optimalni. Nikdo se dnes nebude zabyvat tim, jak jsou rozlozena vychozi data a jestli nebude lepsi pouzit neco jineho.

    Nadruhou stranu - tehdejsi znalosti programatoru o OOP a treba SQL byly, pokud s tim primo nepracoval, povetsinou hodne povrchni - dnes se s tim setkava kazdy.

  • 30. 3. 2008 17:58

    Miloslav Ponkrác (neregistrovaný)

    ad 1) Ale to je velký omyl. Možná lidé zblblí médii to tak vidí, ale já vidím kolem sebe toto: Když přišlo XP, tak většina lidí kolem mě včetně mě samotného byla nadšena! Například na mém Pentiu 200 MHz, 128 MB RAM běhaly XP sakra rychleji, než Windows 2000!!!! A byly trochu příjemnější. Když přišly XP, tak jsem rozhodně neviděl takové odmítání, jaké tu popisujete. Ale když přišly Visty, tak neznám naprosto nikoho osobně včetně mě, kterému by Visty přišly jako dobrý systém. Nikoho!!! I já po seznámení se s nimi jsem měl pocit, že musím říct WOW, protože sabotáž v MS se dokonale povedla. A o tom, že by byly Visty rychlejší, než XP, o tom se sotva dá mluvit, jako tomu bylo při přechodu 2000 -> XP. Tohle je realita, to co píšete jsou sny a toužebná přání otcem Vašich myšlenek.

    Ad 2) Kolik jazyků jste do detailu poznal? Pak se můžeme bavit dále.

    Ad 3) Ani velká anstrakce, ani rychlý hw Vás nezachrání od toho, abyste při použití velmi nevhodného algoritmu (ať svého, nebo z knihovny) nedostali 1000x pomalejší program, než na ZX spectru třeba. Osobně si myslím, že právě tady je jádro pudla pomalosti a náročnosti dnešních programů. To je pravá příčina - ne proto, že se používají knihovny, vyšší abstrakce, ani vyšší jazyky, ale proto, že rychlost programu je v první řadě dána návrhem architektury programu, jeho datových struktur a použitých algoritmů - což jsou věci, kteřé dnešní programátoři nezvládají ani náhodou. Já naprosto nemám problém dnes naprogramovat program za použití OOP, high level jazyka a knihoven, který bude o mnoho řádů rychlejší ne stejném stroji jako program naprogramovaný běžným dnešním programátorem. A často ho ještě naprogramuji rychleji, než on a je méně chybový, protože čistší, promyšlenější architektura a datové struktury a vhodné algoritmy samozřejmě mají i tyhle příjemné aspekty. Zrovna teď jsem udělal zakázku pro USA, kde zadavatel s otevřenou pusou mi sdělil, že program udělaný přede mnou jiným Čechem na nadupaném stroji bral 98,3% cpu a pomalu reagoval, zatímco můj dělající to samé bere pod 0,1% cpu (je to neměřitelné) a reaguje hbitě a okamžitě. A to jsem se ani o to nesnažil. Ony totiž tyhle znalosti jsou velmi k užitku i dnes. O tom, že teď tam mám naprosto jedinečnou pověst, a že si mohu říci více peněz, které dostanu, ani nemluvím. A dostal jsem se tam na základě referencí s jiným programem, který jsem naprogramoval a dopadl stejně podobně kvalitně.

    Jinak abyste se nemýlil, OOP ani SQL nejsou klíčové - jsou to jen objektově řečeno instance jiných sw znalostí. Pokud máte dobré sw znalosti algoritmizace a sw inženýrství, tak znalosti OOP a SQL nabudete poměrně rychle. Jinak OOP se používalo řadu let - například já se v osmdesátých letech pracovně setkal se Smalltalkem, kde OOP bylo velmi dotažené do konce - a řada lidí se nemohla od Smalltalku odtrhnout jak se jim to líbilo. Ale pravdu máte, že OOP ani SQL nebylo tak běžné. Nicméně ani bravurní znalost OOP a SQL bez toho základu nebude pro Vás nic moc platná.

  • 31. 3. 2008 22:25

    svick (neregistrovaný)

    [10] 3) To trochu přeháníte, já jsem v prvním ročníku studia informatiky na VŠ a hešovací tabulky i NaN jsme se učili.