• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    XCHAOSBenchmarky programovacích jazyků, knihoven a toolkitů
    JANFROG
    JANFROG --- ---
    RUTHAN:
    Nasledujici je muj pohled na vec, zcela jiste zatizeny (biased) (ne)zkusenostma s implementaci ruznych VM (a mnoha probdenyma nocema a vytrhanyma vlasama pri debugovani pro me nepochopitelnych bugu :-)

    TL;DR: To se tezko zobecnuje. Zalezi na danem runtimu / VM a jeho designu. Rule of thumb je cim sofistikovanejsi runtime, tim mene se to vyplati (jinymi slovy, to co ti v (C)Pythonu pomuze, to se ti v Hospotu / J9 nevyplati). Jak rika KING, profiler je nejlepsi kamarad.

    Long story:
    C# neni ani lepsi, ani horsi nez ostatni. Moznost volat externi kod ma kazdy runtime/VM, (Java, vesmozne Smalltalky, LISPy, Python...), bez toho to totiz moc nejde. Java take mela od zacatku JNI. Uvaha ze
    > C# to ma asi udelany dobre protoze tenhle unsafe C mod je tam od zacatku officialne
    je, z meho pohledi, mimo.

    Pri designu FFI jsi omezen designem runtimu / VM. Napriklad pokud VM pouziva svuj vlastni
    stack pro managed kod, musis prepinat stack. Pokud pouziva jinou volaci konvenci, musis -ukladat registry (a toho nemusi byt malo, napr na POWER architekture ma 32 GPRs, 32 FPRs, 8 CCRs, 64 128bit VSRs...). Dalsi vec co musis resit je jak pristupovat k parametrum, co vsechno je treba udelat zalezi dost na designu memory manageru (moving / non-moving, write-barrier / read-barier / both). Java (JNI) je v tomhle extremni monstrum, protoze GC je implementation defined takze JNI musi pocitat se vsema variantama takze je indirekce na vsechno -> ma to svou rezii - a dost jinych jazyku je ale jeste horsi, protoze to neresi vubec takze se to programuje stytem "udelej to takhle, protoze tenhle runtime je primitivini a muzes si to dovolit" a pak to skonci na tom, ze nemuzes udelat nic lepsiho, protoze to rozbije veskery existujici kod. Hello, Ruby :-)

    Ve zbylem prostoru v zasade vice ci mene vedome volis bod v intervalu
    REDGUY
    REDGUY --- ---
    RUTHAN: To je natolik obecne a nekonkretne polozna otazka, ze na ni nejde odpovedet. utfg, klicova slova "foreign function interface".
    KING
    KING --- ---
    RUTHAN: parkrat jsem pouzil osobne Python + nejaky kompilovany jazyk pro kriticke casti a obecne se to pouziva hodne. At uz C (velka cast std knihovny je v C), cython, nebo nove Rust. Za me je to idealni kombinace - rychle si neco napisu v "pomalem" jazyce, pustim si na to profiler abych zjistitl co je nejhorsi cast a tu prehodim do "rychleho" jazyka (spis idealne se podivam po knihovne ktera uz tohle resi).
    RUTHAN
    RUTHAN --- ---
    Ma nekdo zkusenost s tim, ze proste vezme neco v pomaly jazyce a pouzije C++ wrapper pro nejaky pomaly funkce a vola to pres nej jaka je rezije toho wrapperu, jak moc se to vyplati?

    C# to ma asi udelany dobre protoze tenhle unsafe C mod je tam od zacatku officialne.. ale treba Java, Python etc tam to asi takova sranda nebude.
    Jinak pouziva se to i opacne co jsem se bavil s kamaradem, jak rozjed neco v C++ na Androidu, tak tam se opacne prida je nejaka Java obaleni.. a pak pouzije svuj multiplatformni C++ kod. Nicmene tam taky bude nejaka rezije, bud jen pro samotny spusteni.. nebo i pro ten runtime.
    XCHAOS
    XCHAOS --- ---
    AUREL: tohle je skoro přesně to, co jsem hledal.. .stejné algoritmy v různých jazycích, dík...
    AUREL
    AUREL --- ---
    RUTHAN
    RUTHAN --- ---
    WOODMAKER: Ty Python je jeste daleko pomalejsi nez Java, takze vsechno je zlepseni.. Jinak to spusteni Javy - jak mate nastavenou JVM (min, max mem a tak), to muze mit vliv.
    WOODMAKER
    WOODMAKER --- ---
    JANFROG: zatim to je ten posledni problem. Ale diky za tipy.
    JANFROG
    JANFROG --- ---
    WOODMAKER: > Ale spousteni netrva 2 sekundy, ale pul minuty
    A co pouzivate za VM, hotspot? Muzes zkusit J9, pokud vas ta pul minuta stve, startup time se da zredukovat pouzitim AOT).
    WOODMAKER
    WOODMAKER --- ---
    My v praci prepisujeme sw z Pythonu do Javy/springu pri snaze o zachovani logiky. Nedelame to kvuli zvyseni vykonu.
    Zatim je ta Java casto rychlejsi, kdyz uz pracuje. Ale spousteni netrva 2 sekundy, ale pul minuty. Taky je ted velkym zdrzovadlem logovani behem zpracovavani dat. To zvyseni rychlosti jde videt hlavne na uz hotove komponente/docker containeru, kterej zere data ze zdroje a hazi je do Kafky. Na druhe strane kafky je neco, co se stara o zpracovani dat a zapis do Influxdb, to je teprve ve vyrobe, ale obecne se zda, ze knihovny v Jave jsou optimalizovanejsi, nez ty pythonovy.
    XCHAOS
    XCHAOS --- ---
    MARASAN: tak koukám od benchmarků jsme rychle postoupili k optimalizacím a to rovnou k optimalizacím skrz paralelizovatelnost :-) ok, to je fakt už "vyšší dívčí", tam asi hraje roli podíl toho, kolik je fakt počítání (takže se použije více threadů v procesoru) a kolik třeba přístupy do paměti (kde je úzke hrdlo sběrnice)
    MARASAN
    MARASAN --- ---
    nebude to hned, az to zmerim, dam vysledky.
    MARASAN
    MARASAN --- ---
    MARASAN: v RUSTu to mam uplne bez paralelizace.
    MARASAN
    MARASAN --- ---
    XCHAOS: ja hodne pracuju s datama v XML, takze bych udelal neco, co veme gz fajl, 1 XML dokument na radku - ruzny druhy - a tech radku je par milionu na soubor. To bych promeril a muzu to srovnat i s implementaci, kterou mam v RUSTu.
    XCHAOS
    XCHAOS --- ---
    MARASAN: ano, no tak benchmarky masivně paralelizovatelných algoritmů, to je teprve kapitola sama pro sebe. tenhle klub je zatím podle mě někde na úrovni toho, aby si lidi dokázali srovnat aspoň třeba algoritmu na fibonacciho čísla (ne, že by jim byl dobrej k něčemu jinýmu, než k prolezení písemky někde na gymplu) v bashi vs. v PHP v céčku... ale pokud to tu přeskočí na vyšší level, tak jedině dobře!
    MARASAN
    MARASAN --- ---
    XCHAOS: otazka je, jestli to mam masivne paralelizovat, coz je snadny a pouzivam to hodne, anebo se to projevi v sekvencnim zpracovani.
    XCHAOS
    XCHAOS --- ---
    MARASAN: no tak právě proto je potřeba prohnat nějaký vzorový benchmarkový kód oběma variantami a výsledky postnout sem :-)
    MARASAN
    MARASAN --- ---
    DEFILA: tu praci by mel dodat prave JIT.
    DEFILA
    DEFILA --- ---
    MARASAN: bez práce?:)
    MARASAN
    MARASAN --- ---
    Erlang 24 prave prichazi s JITem, RabbitMQ slibuje bez prace az 30% narust propustnosti. Mohl bych protestovat nejaky ulohy mezi verzema.
    RUTHAN
    RUTHAN --- ---
    Uz se "tesim", jak tu nejaky fanatik bude rikat, ze se v Jave, pythonu da psat stejne rychle jako v C. Ano je mozny, extreme narocne tyhle smilaky optimalizovat, ale zadny velka rychla velka vec v tom asi neexistuje, jen nejaky optimalizovany steky.. Byt jsem teda videl nejaky release notes novy verze Javy a byla tam moznost pouzit ASM, ale to predpokladam, driv snad pres nejaky wrappery slo taky..

    Urcite existuje neco lepsiho a meli bychom to postupne datav na nastenku, protoze se to relativne spatne hleda, ale pro zacatek:
    Programming Languages Benchmarks
    https://attractivechaos.github.io/plb/
    https://github.com/kostya/benchmarks
    http://hildstrom.com/projects/langcomp/index.html
    https://thenewstack.io/which-programming-languages-use-the-least-electricity/
    XCHAOS
    XCHAOS --- ---
    K čemu je myšlený tenhle klub: je pro šílence, kteří si dají tu práci napsat nějaký složitější algoritmus ve více různých programovacích jazycích/prostředích, a pak srovnávají, jak na jinak stejné platformě se stejnými daty běží dlouho. Založeno jako nový klub, aby to nezaclánělo jinde.
    TORI
    TORI --- ---
    Vítejte a ať se vám tu líbí.

    Můžete pozvat své přátele.
    Kliknutím sem můžete změnit nastavení reklam