Jestem obecnie w trakcie wyboru projektu na kurs kompilatora na poziomie gradu, który ma zostać ukończony w ciągu najbliższych 8 tygodni. Chciałbym zrobić coś związanego z optymalizacją, ponieważ nie pracowałem zbyt wiele w tej dziedzinie, ale wszystko w tej dziedzinie jest uczciwą grą.Interesujące projekty kompilatorów
Jaki był najciekawszy projekt związany z kompilatorem, który zrobiłeś? Czego nauczyłeś się najbardziej?
Edit: Dziękuję wszystkim za wielkie sugestie. Przepraszam, że nie aktualizowałem tego tak długo.
Projekt, który wykonałem, to prosta optymalizacja autovectorization na LLVM. LLVM ma typy wektorowe, ale wydaje się, że nie ma sposobu na ich wykorzystanie bez wsparcia dla front-endu. Ta optymalizacja przekształciła normalny kod skalarny w kod wektorowy.
Ponieważ auto-wektoryzacja jest dość trudną optymalizacją do wdrożenia, ograniczyliśmy nasz zakres tak bardzo, jak tylko mogliśmy. Po pierwsze, w celu pokazania paralelizmu poziomu instrukcji w kodzie, szukaliśmy pętli jednoblokowych, które pasowały do naszych kryteriów, a następnie rozwijano je określoną liczbę razy, aby były wygodnie wektoryzowane. Następnie wdrożyliśmy algorytm pakowania określony w Exploiting Superword Level Parallelism with Multimedia Instruction Sets autorstwa Larsena i Amarasinga.
Nawet uproszczona wersja tej optymalizacji jest dość skomplikowana. Istnieje wiele ograniczeń; na przykład nie chcesz wektoryzować zmiennej, która żyje poza pętlą, ponieważ reszta programu oczekuje, że będzie skalarna. W ciągu ostatnich kilku tygodni poświęciliśmy wiele godzin. Projekt był jednak zabawny i wiele się nauczyliśmy.
A więc Jay ma już ponad 8 tygodni. Daj nam znać, co się stało. –
Jakieś nowiny Jay? Wkrótce zacznę uczyć się na undergradowym kursie kompilacji i będzie ciekawie wiedzieć, co zrobiłeś. – fbinder