RSS Feed

JIT-er

Jak działa .Netowy mechanizm kompilacji:
1. Mamy kod napisany w wysoko abstrakcyjnym języku który jest zgodny ze standardem CLS(Common Language Specification)

2. Kompilator kompiluje kod źródłowy do kodu CIL(Common Intermediate Language).

3. W momencie uruchomienia aplikacji JIT-er pobiera kod w CIL-u i na wyjściu generuje natywny kod zoptymalizowany pod architekturę naszego systemu , procka itp [ fragmenty kodu są często cachowane zwiększając wydajność procesu]. Kompilator nie przetwarza całego kodu. Wyciąga tylko te fragmenty , które są aktualnie używane. Proces ten różni się od mechanizmu C++ – owego , jeden proces kompilacji ,przetworzenie całego piku źródłowego , linkowanie i na wyjsciu plik wykonywalny. W sumie “Just in Time compialtion” jest czymś pośrednim między Kompilatorem standardowym a Interpreterem.

Za każdym razem kompilator działający w trybie normalnym optymalizuje proces kompilacji , dostosowywuje
go do naszego sprzętu.

Mechanizmy optymalizacyjne:

constant folding
Proces upraszczania stałych w czasie kompilacji. Np kompilator wyrażenie 20*20*20 zamieni na liczbe całkowita 8000

copy propagation
Wyszukiwanie przypisań bezpośrednich (np x=y) i zastępowanie ich jedną zmienną.

elimination of range checking
Wyłączenie sprawdzania przekroczenia zakresu np w tablicy w miejscach gdzie to sprawdzenie jest niepotrzebne.

elimination of common subexpressions
Wyszukiwanie podobnych wyrażeń i zastępowanie ich jedną zmienną.

method inlining
Zastępowanie wywołania metody kodem zawartym w funkcji.

Do dyspozycji prócz standardowego JIT-era mamy jeszcze.
EconoJIT -er , który nie przeprowadza optymalizacji i tym samym proces kompilacji jest znacznie szybszy. Dodatkowo można wyłączyć opcję cachowania fragmentów kodu. Jest to szczególnie ważne w sytuacji gdy mamy dostępny niewielki obszar pamięci.

Ciekawym narzędziem dostępnym w ramach platformy .Net jest Ngen (Native Image Generator). Ngen kompiluje kod natywny i trzyma go w plikach zwanych “native images” , które wrzuca do cachu. Dzięki temu przy uruchomeniu konkretnego programu nie musimy przeprowadzać kompilacji JIT-owej ponieważ korzystamy z tego prekompilowanego kodu.

Jeżeli kogoś interesowałoby deployowanie aplikacji skompilowanej do natywnego kodu bez uzywania Jitera i bez konieczności instalowania .Net Frameworka .Istnieją narzędzia które pozwalają to zrobić np. Salamander

Advertisements


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s