Konstrukcija kompilatora

I smer

Kurs Konstrukcija kompilatora je izborni kurs na četvrtoj godini I smera u okviru kojeg se proučavaju osnovni koncepti konstrukcije kompilatora (ili kompajlera, eng. compiler):

  • Semantička analiza
  • Optimizacija koda
  • Generisanje koda
  • LLVM infrastruktura
U okviru studija postoje i drugi kursevi koji se bave bliskim temama.

Predmetni nastavnik:

Asistent:

Tekući rezultati

Tekuće rezultate možete pratiti preko naredne tabele.

Izborni predmet

  • 6 ESPB bodova
  • 2 časa predavanja
  • 3 časa vežbi

Završni ispit

  • teorija: 50 poena, radi se 60 minuta
  • zadaci: 50 poena, radi se 120 minuta
BITNO: Da bi se položio ispit, potrebno je da se ostvari najmanje 51 poen, od čega najmanje 20 poena na teoriji (minimalno 30% poena na svakom pitanju) i najmanje 25 poena na zadacima.

Ispitna pitanja

Spisak ispitnih pitanja možete pronaći ovde (moguće su izmene tokom semestra, proverite). U okviru ispita, izvlačite četiri pitanja sa spiska ispitnih pitanja. Svako pitanje se boduje sa 12.5 poena. Odgovarate pismeno. Teoriju možete polagati u istom roku sa praktičnim delom ispita (u istom terminu, odmah nakon završenog praktičnog dela) ili u nekom od narednih rokova, u terminima praktičnog dela ispita.

Teoriju možete da polažete i iz dva puta - prva dva ispitna pitanja u jednom roku i druga dva ispitna pitanja u drugom roku. Podela pitanja po ispitnim pitanjima će biti objavljena kasnije.

Teorijski deo ispita možete polagati i u toku godine, putem testova, u okviru regularnih termina predavanja. Prvi test će biti sredinom semestra, obuhvataće prva dva ispitna pitanja. Drugi test će biti krajem semestra, i obuhvataće drugi deo gradiva.

Primeri prakitčnog dela ispita

Seminarski rad

Seminarski rad može zameniti praktični deo ispita, ukoliko student to želi. Seminarski rad se izrađuje u grupama od dva do četiri studenta, a tema se dogovara sa predmetnim asistentom.

Seminarski rad nosi maksimalno 25 poena. Odbrana seminarskog rada nosi maksimalno 25 poena. Za polaganje je potrebno ostvariti najmanje 25 poena ukupno, računajući zbir poena osvojenih na seminarskom radu i njegovoj odbrani, pri čemu je uslov da student na odbrani osvoji najmanje 10 poena.

Odbrana obuhvata predstavljanje i objašnjenje urađenog seminarskog rada, osnovna teorijska pitanja iz oblasti koje su obrađene na vežbama, kao i pitanja o potencijalnim izmenama i dopunama optimziacije koja je obrađena kao tema seminarskog rada.

Ukoliko student ne odbrani seminarski rad, odnosno ukoliko je potrebna ponovna odbrana, neophodno je izabrati potpuno novu temu i uarditi novi seminarski rad od početka, pri čemu se svakom narednom odbranom maksimalan broj poena koje je moguće osvojiti smanjuje za 10.

Materijali sa časova

Napomena: ovi materijali biće dopunjavani i menjani u toku godine.

Snimci sa vežbi.

Kratko uputstvo za kreiranje novog pass-a u LLVM-u.

Skripta za skidanje verzije llvm projekta koja se koristi na vezbama.


Materijali sa časova

Literatura za predavanja

Literatura za vežbe

  • C++: Klasa razlomak, C++ kroz primere, Saša Malkov (pdf)
  • Yacc-skripta, Filip Marić (pdf)
  • GNU programerski alati, Aleksandar Samardžić (pdf)
  • Skripta iz C++-a (pdf)
  • LLVM tutorijal (link)
  • Video materijali (link)

Prijavljivanje za prvi teorijski test

Prijava za prvi teorijski test moguća je preko naredne forme. Prijavite se ukoliko planirate da izađete na test i odjavite se ukoliko se kasnije predomislite. Rezultati prijave/odjave dostupni su u narednoj tabeli. Prijava i odjava su mogući do 10. maja u 13h.

Prvi test iz teorije biće održan u utorak 12. maja u terminu predavanja. Tačni termini polaganja biće objavljeni nakon završetka prijava za test.

Na testu će biti pitanja iz obrađenih oblasti. Konkretno, na testu će biti dva pitanja sa spiska ispitnih pitanja, od 1-27.

  • Prvo ispitno pitanje: 4-17.
  • Drugo ispitno pitanje: 1-3, 18-27.
Ispitna pitanja izvlačite pojedinačno i nezavisno.

Test zamenjuje pola ispita. Ko ne izađe na test, polagaće taj deo gradiva na ispitu. Takođe, ko ne izađe na test, može da izađe na drugi test koji će biti održan u poslednjoj nedelji nastave. Položen test može da se iskoristi u bilo kojem ispitnom roku i važi čak i ako padnete praktični deo ispita.

06.05.2026.

Ukidanje grupe ponedeljkom od 8h

Zbog slabe posećenosti i u dogovoru sa studentima, grupa ponedeljkom od 8h se ukida. Vežbe će se regularno održavati ponedeljkom od 15h.

30.04.2026.

Rezultati mini provere znanja

Rezultati svake mini provere znanja biće uvek dostupni u tabeli sa rezultatima. Proveravajte redovno i ukoliko uočite neke nepravilnosti, javite.

29.04.2026.

Gostujuće predavanje kompanije AMD, utorak 28. 04. 2026. u 14h

U utorak 28. aprila u 14h, Mirko Brkušanin će održati predavanje:

Kompilacija za GPU: Od shader koda do mašinskih instrukcija korišćenjem LLVM AMDGPU backend-a

Na ovom predavanju upoznaćemo se sa načinom na koji se kod kompajlira za moderne AMD grafičke procesore. Biće predstavljen LLVM AMDGPU backend, kompajlerska infrastruktura otvorenog koda koja se koristi u igrama, filmskoj industriji, veštačkoj inteligenciji i naučnom računarstvu.

Sadržaj:

  • Osnove GPU arhitekture: Upoznaćemo se sa arhitekturom modernih GPU-a koji, za razliku od CPU-a, imaju hiljade malih jezgara optimizovanih za paralelno izvršavanje. Objasnićemo koncept wavefront-a, grupe od 32 ili 64 thread-a koji istovremeno izvršavaju istu instrukciju.
  • Registri i memorija: GPU koristi dva tipa registara: VGPR (vektorski registri koji čuvaju različite vrednosti za svaki thread) i SGPR (skalarni registri sa istom vrednošću za ceo wavefront). Izbor registara direktno utiče na performanse programa.
  • Shader kod: Shader je program koji se izvršava na GPU-u za svaki piksel, verteks ili radnu jedinicu. Jezici poput GLSL i HLSL se kroz niz transformacija prevode u mašinske instrukcije koje GPU izvršava.
  • LLVM kompilacija za GPU: Biće objašnjen proces kompilacije kroz LLVM AMDGPU backend, od visokog nivoa do finalnih GPU instrukcija. Posebna pažnja biće posvećena problemu divergencije, situaciji kada različiti thread-ovi u wavefront-u žele da izvrše različite grane if naredbe.
  • Praktični primer: Pratićemo jednostavan shader od izvornog koda do mašinskih instrukcija i videćemo kako kompajler donosi odluke o alokaciji registara i optimizaciji.

Primena: AMD grafički procesori se koriste u gaming konzolama (PlayStation 5, Xbox Series X), filmskoj industriji za renderovanje, veštačkoj inteligenciji za obuku modela, i superračunarima poput "Frontier"-a i "El Capitan"-a koji su trenutno najbrži na svetu.

Predznanje: Osnove kompajlera (frontend, IR, backend) i osnovna arhitektura računara.

Kome je namenjeno: Predavanje je namenjeno studentima koji žele da razumeju kako funkcionišu moderni grafički procesori i koji se interesuju za oblast kompajlera i optimizacije koda. Takođe je korisno za sve koji žele da vide kako izgleda rad na velikom open-source projektu poput LLVM-a.

Ukratko o kompaniji AMD

AMD (Advanced Micro Devices) je globalna tehnološka kompanija koja dizajnira i proizvodi mikroprocesore (CPU), grafičke procesore (GPU) i ostale poluprovodničke komponente. AMD je lider u oblastima gaming hardvera, visoko-performansnog računarstva (HPC) i veštačke inteligencije. Kompanija aktivno doprinosi open-source zajednici kroz projekte poput LLVM AMDGPU backend-a i ROCm platforme za GPU računarstvo.

Ukratko o predavaču: Mirko Brkušanin

Mirko Brkušanin je Senior Member of Technical Staff u kompaniji AMD, gde radi na razvoju kompajlerske infrastrukture LLVM. Sa više od 7 godina iskustva u oblasti kompajlera, od kojih 6 godina u AMD-u, Mirko se specijalizovao za GPU kompilaciju i LLVM backend. Diplomirao je i završio master studije na Matematičkom fakultetu Univerziteta u Beogradu.

20.04.2026.

Rezultati druge mini provere znanja

Rezultati druge mini provere znanja su dostupni na narednoj adresi. Rezultati su upisani i u tabelu sa rezultatima - proverite i ukoliko uočite neke nepravilnosti, javite.

17.04.2026.

Rezultati prve mini provere znanja

Rezultati prve mini provere znanja su dostupni na narednoj adresi.

10.04.2026.

Prvi test

Prvi test će biti održan 12. maja u terminu predavanja. Test nije obavezan. Ko ne izađe na test nadoknadiće to na ispitu. Ko ne izađe na prvi test, može da izađe na drugi test koji će biti održan u poslednjoj nedelji predavanja. Na testu će biti rađena dva ispitna pitanja, odnosno prva polovina pređenog gradiva. Tačna ispitna pitanja će biti poznata nedelju dana pre testa, a sada okvirno možete da pogledate tekuća ispitna pitanja (neće biti velikih izmena). Tekuća ispitna pitanja su dostupna u okviru kartice Obaveze studenata.

10.04.2026.

Početak semestra

Svim studentima želimo veseo i uspešan prolećni semestar!

24.03.2026.

Matematički fakultet, Univerzitet u Beogradu
školska 2024/25. godina