Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cpl:teme:tema2 [2015/11/11 10:49]
bogdan.nitulescu
cpl:teme:tema2 [2018/01/19 13:23] (current)
bogdan.nitulescu [Informații organizatorice]
Line 1: Line 1:
-====== Tema de casă 2 - Analiza semantică și generarea de cod ======+====== Tema 2 - Optimizari ​====== 
 +Obiectivul acestei teme este să scrieți unul sau mai mulți pași de optimizare, folosind framework-ul LLVM, astfel încât să reduceți cât mai mult dimensiunea codului rezultat.
  
 +===== Informații organizatorice =====
 +  * **Deadline**:​ Termenul limită până când se poate participa la concurs este **27 ianuarie 2018, ora 23:59**. Deadline-ul este final - după această oră nu se vor mai accepta soluții.
 +  * **Colaborare**:​ Fiecare soluție este **individuală**.
 +  * **Condiții** de punctare
 +    * Soluția generează cod corect pentru toate testele din benchmark. (Nu se modifica semantica codului, rezultatul executiei este acelasi)
 +    * Soluția face cel putin doua transformari non-triviale ale codului.
 +    * Codul soluției nu este copiat dintr-un [[http://​releases.llvm.org/​3.8.1/​docs/​Passes.html#​transform-passes|pass de transformare existent din LLVM]]
 +    * Arhiva trebuie sa contina un fisier README in care sa fie descrise optimizarile propuse si modul de implementare.
 +
 +===== Infrastructură =====
 +  * Codul va folosi **LLVM 3.8**
 +  * Soluțiile vor fi trimise prin vmchecker
 +===== Enunț =====
 +Premisa acestei teme este să scrieți un optimizor care va obține un rezultat bun in benchmarkul "​CPLMark"​ . Veți extinde utilitarul **opt** din LLVM, adăugând o bibliotecă ce conține pașii voștri de optimizare.
 +
 +Scorul CPLMark este dimensiunea totală a secțiunilor .text din fișierele din benchmark, după ce au trecut prin optimizorul vostru si apoi au fost compilate cu **llc** pentru arhitectura ARM.
 +
 +Fișierele din benchmark sunt în format .ll , dar pentru referință am adăugat și fișierele C originale.
 +
 +<​note>​**opt** nu va rula decât pașii voștri de optimizare, nu și cei "​built-in"​. Toate transformările codului vor fi scrise de voi. O strategie posibilă ar fi să examinați fișierele din benchmark, să estimați care sunt optimizările care ar putea aduce reduce dimensiunea codului - de exemplu eliminarea codului mort, optimizarea salturilor, eliminarea subexpresiilor comune - și să le implementați pe cele mai promițătoare.</​note>​
 +
 +Pentru a calcula scorul unui test se folosește următoarea secvență de comenzi:
 +
 +<code bash>
 +# Transform the test .ll file in binary format
 +llvm-as test.ll -o test.bc
 +# Run your optimization passes
 +opt -load=./​libLLVMCpl-Contest.so -cpl-my-1st-pass -cpl-my-2nd-pass test.bc > test-optimized.bc
 +# Generate an optimized object file for the ARM architecture
 +llc test-optimized.bc -march=arm -filetype=obj -o test.o
 +# Compute the size of the text section in the object file
 +llvm-size -A test.o
 +</​code>​
 +
 +Scorul final este suma scorului individual pentru fiecare test.
 +
 +
 +
 +
 +
 +
 +
 +
 +===== Implementare =====
 +
 +Pentru a începe implementarea pașilor LLVM, puteți urmării pașii de mai jos:
 +
 +  - Descărcați {{:​cpl:​concurs-arhiva.zip|arhiva de start}} și dezarhivați-o
 +  - Creați un director de build și intrați în el (Exemplu: ''​mkdir build; cd build''​)
 +  - Rulați ''​cmake''​ cu calea directorului unde ați dezarhivat arhiva (Exemplu: ''​cmake ..''​)
 +  - Compilați pasul (Exemplu: ''​make''​)
 +  - Dacă totul s-a compilat cu succes, ar trebui să se genereze biblioteca ''​libLLVMCpl-Contest.so''​ în directorul de build.
 +
 +Arhiva de start conține trei fișiere sursă, fiecare dintre acestea conținând scheletul de cod pentru un tip de pas de optimizare. Puteți să ii modificați,​ să îi ștergeți sau să adăugați alți pași. Dacă adăugați sau scoateți fișiere din proiect, trebuie să modifcați fișierul **CMakeLists.txt**
 +
 +Numele fiecărui pas trebuie să inceapă cu **cpl-** . Linia de comandă cu care va fi apelat **opt** va conține acești pași în ordine alfabetică.
 +
 +Din infrastructura existentă LLVM puteți folosi [[http://​releases.llvm.org/​3.8.1/​docs/​Passes.html#​analysis-passes|pașii de analiză]], dar nu și pe cei de transformare;​ nici direct (nu aveți voie să îi apelați), nici indirect (nu aveți voie să preluați cod).
 +
 +Pentru a rula testele, dezarhivați arhiva ce conține {{:​cpl:​concurs-teste.zip|benchmarkul CPLMark}} în directorul de build, si apoi rulați **./​cplmark.sh**
 +
 +
 +===== Resurse =====
 +
 +  * {{:​cpl:​concurs-arhiva.zip|Arhiva de start}}
 +  * {{:​cpl:​concurs-teste.zip|CPLMark}}
 +  * [[http://​llvm.org/​docs/​WritingAnLLVMPass.html|Writing an LLVM Pass]] ​
  
cpl/teme/tema2.1447231772.txt.gz · Last modified: 2015/11/11 10:49 by bogdan.nitulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0