Vlákno názorů k článku Učíme trpaslíky počítat podruhé od czario - Pročítal jsem si opět svůj oblíbený seriál a...

  • Článek je starý, nové názory již nelze přidávat.
  • 10. 4. 2008 10:03

    czario (neregistrovaný)
    Pročítal jsem si opět svůj oblíbený seriál a tak mě tak napadlo, že by neuškodilo udělat později jakýsi souhrn s radami, jak zacházet s trpaslíky pro zvýšení jejich efektivity. Tzn pokud někdo programuje ve vyšším programovacím jazyce, který nutně musí používat stejné instrukce procesoru, tak z čeho by měl při programování vycházet a co by měl používat, či čeho by se měl vyvarovat ve svém programu. (třeba něco jako, že pro jednoduché podmínky se má použít boolean a ne nějaký string nebo reálné číslo kde se budou využívat jen 2 čísla)

    jinak na to omezení relativních adres si pamatuji ze střední... jsme tam dostali nějaké instrukce, nějaké letmé vysvětlení a starejte se... Pak se nám stávalo, že jsme používali nevhodně relativní skoky, které někam nemohli doskočit a museli jsme je dalším skokem nastavovat. :-)
  • 10. 4. 2008 10:21

    Pavel Tišnovský
    Zlatý podporovatel
    Proc ne, klidne neco podobneho pripravim. U jsem taky videl par zdrojaku, kde se (i v typovanem jazyce) vesele vsude pouzivaly pouze retezce a semtam se to prevedlo na cisla ci booleany :-)
  • 10. 4. 2008 21:32

    Ogar (neregistrovaný)
    Ano, uz sem taky videl program v nasledujicm stylu (ted uz nevim, ale asi v C++) s promennou typu string:

    while (string.length()<320) string+=' '
    out << string;

    a uz ten clovek nevidi za kazdym +=' ' ten realloc() coz je zase potencialne malloc() + memcpy() + free() :-(


    A dalsi oblibena na stejne tema je
    strcpy(a,b);
    strcat(a,c);
    strcat(a,d);

    A zase uz ten programator nevidi/nechce videt, ze strcat() uz je cyklus ve stylu:
    while (*a) a++;
    while (*(a++)=*(b++)); // :-)
    tj. vzdy projdu znovu cele pole od zacatku ......

    A pak se clovek divi, ze i kdyz jsou pocitace cim dal rychlejsi, tak programy jsou cim dal pomalejsi :-(
    Jo holt, za pokrok se plati :-)
  • 10. 4. 2008 22:56

    bez přezdívky
    Tak to je ovsem priklad jako noha..

    >while (string.length()<320) string+=' '
    >out << string;
    >
    >a uz ten clovek nevidi za kazdym +=' ' ten realloc() coz je zase potencialne malloc() + memcpy() + free() :-(

    Jaky? Kazda normalni STL knihovna nealokuje pri kazdem pozadavku na pamet o 1b vetsi pole, ale voli vetsi velikost (a navic sve alokace vetsinou resi pres memory pool).

    Schvalne jsem si tenhle tvuj program zkusil s prazdnym stringem na Linuxu (amd64 arch), cely program za svuj beh udelal 10 volani malloc(). Zpozdeni je samozrejme nemeritelne (v obou pripadech time nahlasil user 0m0.000s)...

    >strcpy(a,b);
    >strcat(a,c);
    >strcat(a,d);

    A kolik tim promrhas strojoveho casu? Pokud tedy nemas nekolik MB dlouhe stringy ci nespoustis tuhle rutinu milonkrat za vterinu :-)

    Tohle jsou takove priklady trochu mimo realitu. Realita je takova, ze programatorska prace je draha a HW je levny. Diky cemuz tu mame jazyky jako C#, Java a podobne, protoze u vetsiny neni zdaleka tak dulezita co nejvyssi rychlost (pokud se bavime rekneme o desitkach procent vykonu), ale spolehlivost a naklady na vyvoj.

    A ty priklady, co jsi zde uvedl, jsou zrovna z takove skatulky tech, kterych se znacna cast programatoru naprosto uvedomele dopousti s tim, ze to na vysledny vykon aplikace nema prakticky zadny dopad.
  • 10. 4. 2008 12:39

    Tomas Z. (neregistrovaný)
    Hezký souhrn pracovních postupů (byť na trochu jiné úrovni) jak zacházet s trpaslíky je v draftu Knuthova TAOCP vol. 7 - Bitwise Tricks and Techniques. Úžasné, co se dá všechno s těmito jednoduchými trpaslíky dělat, zvláště když se kombinují logické a aritmetické operace.
  • 11. 4. 2008 7:52

    Tomas Z. (neregistrovaný)
    Hm, pravda. Původně jsem napsal 7.1.?, pak jsem si nebyl jist - tak jsem to (špatně) zkrátil na Vol 7. Ale stejně je to dost dobrý čtení do vlaku :)