• ú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ů
    SUK
    SUK --- ---
    JANFROG: a to jsi ani nezminoval, ze nativni interface nebyva tak uplne stabilni. Cimz teda nechci nodejs pomlouvat...
    RUTHAN
    RUTHAN --- ---
    KING: Profiler - ma problem v tom, ze vetsina programatoru, ho minimalne donedavna neumela pouzivat vubec, nevim mozna uz se dneska na skolach uci a ze zbytku vetsina poradne nerozumi jak z jeho vystupy pracovat a pokud se na to nespecializujou, takze to "tupy" zalogovani timestampu a hlidani si sezranyho heapu/cpu na urovni OS rucne ma svoje opodstatneni.

    JANFROG: C# svet z myho pohledu minimalne vic propagoval a pouzivalo se to, podle myho daleko vic, nez jsem videl vsude jinde.. navic na to nebylo potreba stahovat nekde nejaky wrapper, knihovny nejak to lepit. Byl to vpodstatne ekvivalent to ASM v C/C++ , v Java / Python svete tohle podle me zdaleka tak bezny nebylo. . ale samozrejme mohl jsem mit jen "smulu" na to s jakymi informacni prameny jsem prisel do styku.

    C# - ten pocit, ze by si to delalo to chce nemam.. naopak mam pocit, ze se to ladi nejlip, protoze Visual studio, byt je to dneska silenej bloatware se vsema tema obrovkejma SDK kvuli kdyz blbosti. Tim to nechci nejak moc obhajovat, ale nejaky domaci zvykani to staci..
    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: jasne, nesmi se to delat kvuli nejakym predpokladum ktere muzou byt (a casto jsou) chybne. Prave proto jsem zminoval ten profiler ktery se pak samozrejme opet pusti na vyslednou hybridni implementaci aby se overilo, zda je efekt skutecny
    RUTHAN
    RUTHAN --- ---
    KING: Jako ono to dava smysl, ale chce to nejaky cisla jaka je rezije a tak. Odecist nejaky 2 timestampy pro nativni a C implementaci a zaplat je to pole a jednou za cas hodit do logu, by nemela byt velka prace..
    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.
    Kliknutím sem můžete změnit nastavení reklam