Hlavní navigace

Názory k článku LuaJIT – Just in Time překladač pro programovací jazyk Lua (9 – další vlastnosti trasovacího JITu)

  • Článek je starý, nové názory již nelze přidávat.
  • 11. 12. 2014 19:30

    klusacek (neregistrovaný)

    Porad mi neni uplne jasne jak ten JIT pracuje. V pripade ze tracne smycku ve ktere neni nic jineho nez 3 podminky, tak trace (vysledny kod) te smycky vypada jak?

    Znamena to ze budu mit 3 tracy te smycky pro 3 varianty podle toho jake v ni plati podminky? Jak JIT pak poznava ktery trace ma pouzit?

    Uvital bych mensi pocet prikladu, ktere ale pujdou vic do hloubky a napriklad ukazou jak vypada trace prelozeny do assembleru ciloveho CPU. A jak treba vypada predcasne opusteni tracu kdyz selze guard a co se potom zacne dit.

    Nedovolit v JITovanych funkcich skoky sice vypada divne, ale zjednodusi se tim alokace registru procesoru -- je mozne ji provest optimalne v linearnim case protoze graf kolizi je intervalovy (a ten jde snadno obarvit), zatimco v obecnem pripade se skoky muze byt graf libovolny a je to tedy NP-uplne. Takze to asi neni uplne spatny napad, ale rad bych kdybyste podrobneji popsal co se deje kdyz to selze a jestli treba nekdo zmeril kolik % casu se travi v interpretacnim modu tim, ze vsechny skoky je treba vykonavat interpretacne (jestli tomu dobre rozumim). Pak take nejaky overhead bude mit ulozeni a obnoveni registru CPU, ktere pouziva interpret pri kazdem zavolani nejakeho tracu.

    Diky.

  • 13. 12. 2014 11:22

    Pavel Tišnovský

    Zdravim a diky za zajimave otazky. Vypada to zhruba takto - mejme tu smycku se tremi podminkami, z toho vylezou celkem 4 stopy - cela smycka + ty 3 vetve (+dalsi veci, viz dale). Takze doufejme, ze se to moc nerozhazi:

    ---- TRACE 1
    0009  KSHORT   8 100
    0010  ISGE     8   7
    0011  JMP      8 => 0013
    0013  KSHORT   8 200
    0014  ISGE     8   7
    0015  JMP      8 => 0017
    0017  KSHORT   8 300
    0018  ISGE     8   7
    0019  JMP      8 => 0021
    0021  FORL     4 => 0009

    to je klasika, toto se prelozi +- do nativniho kodu pres IR, nejsou tam tedy vetve

    ---- TRACE 2
    0012  ADDVN    1   1   0  ; 1
    0013  KSHORT   8 200
    0014  ISGE     8   7
    0015  JMP      8 => 0017
    0017  KSHORT   8 300
    0018  ISGE     8   7
    0019  JMP      8 => 0021
    0021  JFORL    4   1

    zajimavejsi cast, je tady videt navaznost na zbytek smycky

    ---- TRACE 3
    0016  ADDVN    2   2   0  ; 1
    0017  KSHORT   8 300
    0018  ISGE     8   7
    0019  JMP      8 => 0021
    0021  JFORL    4   1

    ^dalsi navaznost na zbytek smycky

    ---- TRACE 4
    0020  ADDVN    3   3   0  ; 1
    0021  JFORL    4   1

    tak, posledni vetev uz toho moc neobsahuje, jen zvyseni promenne a dalsi iterace

    Uvazuju, ze v pristi casti bych to nejak (jak?) zkusil nakreslit, jeste popremyslim (protoze nez udelam obrazek, tak napisu tech slavnych tisic slov :).

  • 13. 12. 2014 11:23

    Pavel Tišnovský

    (tedy nevim presne, proc jsou v predchozi odpovedy ty scrollbary, skoda, ze to neni reseny pres text areu, kterou jde - alespon ve FF - krasne zvetsovat podle libosti).

  • 14. 12. 2014 20:25

    klusacek (neregistrovaný)

    Uznavam ze jsem asi pomalejsi nebo jsem nedaval pozor, ale porad mi to neni jasne.

    Uz v te prvni trace jsou skoky a to podle me uplne zbytecne protoze skacou na nasledujici instrukci. To me trochu mate. Nebo to jsou ty zminene guardy a kdyz by doslo k tomu ze podminka nebude splnena tak se prerusi provadeni? To znamena ze po prekladu do nativniho kodu tam bude neco jako instrukce ret, pokud se tedy tracy provadi pomoci call.

    Muze byt jedna stopa obsazena v nejake delsi? Rekl bych ze ano, treba kdyz mam podminku z jejihoz vnitrku se stane stopa a pak v dalsich iteracich cyklu bude podminka uz stale splnena takze z cyklu s touto vetvi se stane stopa. Jak se JIT rozhoduje kterou stopu zavola? Vytvari si ke kazdemu radku v programu seznam stop a podminek ktere se predpokladaji ze v nich jsou splneny a pak na zaklade nejake statistiky a toho co uz vi o datech na niz program pracuje se rozhodne pro nejakou ze stop?

    Asi to neni potreba nejak kreslit, spis by mi pomohlo okomentovat po krocich (radcich byte-codu) co ten jit vlastne dela a jak se napr. predavaji data mezi interpretovanym JITem a nativnim kodem.