Obszar kompilatorów oraz machine learningu

0

Cześć,

czy ktoś z was może kiedyś natknął się na używanie MLa do kontrolowania działania garbage collector'a albo do JIT'a?

Pytam, ponieważ przymierzam się do magisterki z tych tematów o ile taki ma sens - pomysł wpadł mi do głowy teraz dlatego nie pytałem jeszcze promotora ale... obawiam się że ciężko może być znaleźć kogokolwiek kto robił tego typu rzeczy. Być może znacie powody dla którego takich prac nie było.. chyba że wiecie że takie były.

Temat wydaje być się ciekawy i dość ciężki do ugryzienia dla typowego zjadacza chleba.

2
  1. W ekosystemie Javy te rzeczy (te =JIT, GC) są szeroko udokumentowane, prezentowane na konferencjach itd. Mniej w .NET
  2. Statystyka wykonania (konieczna co do JIT) to tak, ale napisana przez ludzi, a nie ML. Po pierwsze byłoby zbyt wolne, po drugie kiedy by baza wiedzy miała urosnąć - i gdzie być przechowywana do następnego uruchomienia. Po trzecie, wiadomo jaki są miary oceny, nie ma potrzeby na sztuczną inteligencję

Aha, po czwarte, nie ma zainteresowania absulutnie najlepszymi algorytmami top of the top - maja byćś statystycznie w miarę najlepsze, ale niskim kosztem uzyskania

Jak odnajdę, to był fajny YT porównujący statyczne kompilowanie do kodu maszynowego "ahead" i JIT zady i walety... jak odnajdę zamieszczę - tam były nawet elementy przechowywania statystyk, wygenerowanego kodu JIT itd z poprzedniego uruchomienia, dzielenia sie tym w clustrze - ale to nie miało nic wspólnego z ML, najwyżej taki lepszy caching

0

Dodam:

Schemat JIT jaki ja znam, wręcz jest bardzo daleki od wykorzystania wiedzy z (dalekiej) przeszłości: statystyka z wykonania programu tu i teraz, w takich ścieżkach jakie wykonuje obecnie (np zamkniecie bilansu rocznego - czego JVM oczywiście nie odgadnie, bo skąd)
JIT ustawiony wg dalekiej przeszłości nie byłby JIT-em, ale specyficznym AOT-em

1

O ile nie kojarzę zastosowań ML w dziedzinie GC oraz JIT, to sam pomysł wykorzystania sieci neuronowych do przybliżenia rozwiązań złożonych algorytmów jest ewaluowany np. przez Nvidię:

https://developer.nvidia.com/blog/designing-arithmetic-circuits-with-deep-reinforcement-learning/

W podobnym temacie jest również https://arxiv.org/abs/1912.03700 (Deep Learning-based Hybrid Graph-Coloring Algorithm for Register Allocation) - nie jest to JIT per se, ale alokacja rejestrów jest jednym z istotnych (oraz obliczeniowo złożonych) procesów, który większość kompilatorów musi wykonać, a który można sieciami neuronowymi spróbować zoptymalizować.

Jeśli zechcemy rzucić okiem trochę dalej, to odnajdziemy również https://arxiv.org/pdf/1808.03196.pdf (Learning to Optimize Join queries With Deep Reinforcement Learning), a odchodząc nieco od głównego tematu (ale za to z praktycznym zastosowaniem) - https://www.postgresql.org/docs/current/geqo-pg-intro.html (Genetic Query Optimization (GEQO) in PostgreSQL).

Edit: być może zainteresuje Cię jeszcze machine learning program synthesis :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1