7

Szukam projektowania równoległego języka z obsługą lekkich procesów ("zielonych wątków") w stylu Erlanga przy użyciu LLVM jako natywnego generatora kodu. Lekkie procesy są przydzielane do natywnych wątków systemu operacyjnego w trybie M: N, a kradzież pracy między wątkami powinna być możliwa (to znaczy procesy powinny być reprezentowane przez strukturę danych, która może być przekazywana między wątkami, jeśli to konieczne). Bardzo duża liczba procesów może istnieć od razu, więc procesy nie powinny zajmować dużo pamięci, a przełączanie kontekstów między nimi powinno odbywać się tak szybko, jak to możliwe. Ponadto powinno być raczej proste "pauzowanie" lekkiego procesu podczas przełączania kontekstu lub w przypadku zbierania śmieci. Rozumiem, że Erlang ma backend LLVM, ale mogę znaleźć bardzo mało literatury na temat jego implementacji; Czy ktoś może mi opisać, jak to możliwe?Czy LLVM zapewnia wszelkie możliwości implementacji "zielonych wątków"/lekkich procesów?

+0

Możesz chcieć podzielić stosy. GCC je ma, więc prawdopodobnie także LLVM –

Odpowiedz

0

Nie mam konkretnego doświadczenia z LLVM lub Erlangiem.

Ale wdrożyłem taki system w języku programowania o nazwie PARLANSE. Tak, ustawienie przełączników kontekstu na tanie jest trudne.

Więcej szczegółów na ten SO odpowiedzieć: https://stackoverflow.com/a/999610/120163

Co mam trochę wiedzy o LLVM sugeruje, może to być trudne. Co trzeba wygenerować to kod przełączania kontekstu. Nie jestem pewien, czy LLVM obsługuje bezpośrednio, to jest . Z pewnością nie jest to łatwe do zrobienia podczas generowania czystego kodu C , ponieważ prymitywy językowe nie pozwalają uzyskać bardzo dobrze stanu maszyny/wątku .

Odwróć stronę tutaj jest Clang, próbując wspierać funkcje C++ 14, musi z pewnością natknąć się na wątki "C++ native". Aby to umożliwić, musi istnieć obsługa przełączania kontekstów, więc być może ktoś już jest lub już rozwiązał problem.

0

LLVM nie ma bezpośredniego związku z wdrażaniem tego typu systemu. Istnieje wiele frontendów dla języków z takimi konstrukcjami, które obniżają się do IR LLVM.

LLVM to po prostu kompilator do generowania natywnego kodu dla pojedynczego wątku wykonania. Wdrożenie przełączania kontekstu, odpowiednie ustawienie stosu (stosy kaktusów lub inne techniki) oraz inne problemy leżą przede wszystkim w gestii środowiska wykonawczego i środowiska.

Jednym z wyjątków jest wspieranie syntezy wywołań środowiska wykonawczego w celu zwiększenia stosu, gdy jest to konieczne, oraz potencjalnego podziału stosu na nieciągłe regiony. Jak wskazano w komentarzach, LLVM ma na to pewne poparcie, chociaż jest gorzej przetestowane. Jednak twój frontend może również kontrolować użycie stosu, aby uniknąć potrzeby obsługi w LLVM.

Powiązane problemy