This shows you the differences between two versions of the page.
cpl:unpub [2015/12/23 22:58] octavian.moraru [Hints/FAQ] |
cpl:unpub [2015/12/23 23:17] (current) octavian.moraru [Hints/FAQ:] |
||
---|---|---|---|
Line 25: | Line 25: | ||
Premisa acestul concurs este că avem la dispoziție o arhitectură fictivă care execută instrucțiuni LLVM IR. Pentru a executa o instrucțiune LLVM IR pe procesorul fictiv este necesar un anumit număr de cicluri de ceas. Astfel, putem estima cât de costisitoare este execuția unei instrucțiuni. | Premisa acestul concurs este că avem la dispoziție o arhitectură fictivă care execută instrucțiuni LLVM IR. Pentru a executa o instrucțiune LLVM IR pe procesorul fictiv este necesar un anumit număr de cicluri de ceas. Astfel, putem estima cât de costisitoare este execuția unei instrucțiuni. | ||
- | Pentru aceasta fiecare pass va folosi un fișier de intrare care conține pe fiecare linie numele unei instrucțiuni LLVM IR și un cost/scor asociat. | + | Pentru aceasta fiecare pas va folosi un fișier de intrare care conține pe fiecare linie numele unei instrucțiuni LLVM IR și un cost/scor asociat. |
Exemplu: | Exemplu: | ||
<code> | <code> | ||
Line 66: | Line 66: | ||
<note tip> | <note tip> | ||
- | * **Q:** Cum pot prelua o opțiune din linia de comandă în cadrul pass-ului LLVM? | + | * **Q:** Cum pot prelua o opțiune din linia de comandă în cadrul pasului LLVM? |
* **A:** Folosind API-ul [[http://llvm.org/releases/3.6.2/docs/CommandLine.html|CommandLine]] | * **A:** Folosind API-ul [[http://llvm.org/releases/3.6.2/docs/CommandLine.html|CommandLine]] | ||
Line 125: | Line 125: | ||
<note tip> | <note tip> | ||
* **Q:** Cum minimizez numărul de branch-uri? | * **Q:** Cum minimizez numărul de branch-uri? | ||
- | * **A:** Un număr mare de instrucțiuni de control-flow sunt exeutate în cadrul buclelor. Va trebui să implementați o variantă de "loop unrolling". Această optimizare țintită pe bucle reduce numărul de instrucțiuni ''br'' executate, crescând însă dimensiunea codului. | + | * **A:** Un număr mare de instrucțiuni de control-flow sunt executate în cadrul buclelor. Va trebui să implementați o variantă de "loop unrolling". Această optimizare țintită pe bucle reduce numărul de instrucțiuni ''br'' executate, crescând însă dimensiunea codului. |
* **Q:** Cum primesc punctajul pentru această parte? | * **Q:** Cum primesc punctajul pentru această parte? | ||
Line 139: | Line 139: | ||
===== Concurs ===== | ===== Concurs ===== | ||
- | Regula este simplă: cine obține cel mai mic scor pentru benchmark-ul dat, câștigă. Pentru a micșora costul de execuție puteți implementa orice pași de optimizare doriți, pe care îi puteți apela în orice ordine. **Atenție** însă: nu aveți voie să folosiți pașii LLVM, nici direct (nu aveți voie să îi apelați), nici indirect (nu aveți voie să preluați cod - verificați ce înseamnă [[cpl:meta:notare##penalizare_pentru_teme_copiate|temă copiată]]). Aceeași regulă se aplică și pentru pașii de analiză. Pentru mai multe detalii, consultați [[:cpl:teme:general|regulamentul]], secțiunea //Reguli de realizare a temelor//. | + | Regula este simplă: cine obține cel mai mic scor pentru benchmark-ul dat, câștigă. Pentru a micșora costul de execuție puteți implementa orice pași de optimizare doriți, pe care îi puteți apela în orice ordine. **Atenție** însă: nu aveți voie să folosiți pașii LLVM, nici direct (nu aveți voie să îi apelați), nici indirect (nu aveți voie să preluați cod - verificați ce înseamnă [[cpl:meta:notare##penalizare_pentru_teme_copiate|temă copiată]]). Aceeași regulă se aplică și pentru pașii de analiză. |
===== Implementare ===== | ===== Implementare ===== | ||
Line 155: | Line 154: | ||
* {{:cpl:concurs-arhiva.zip|Arhiva de start}} | * {{:cpl:concurs-arhiva.zip|Arhiva de start}} | ||
* [[http://llvm.org/releases/3.6.2/docs/index.html|Documentația]] LLVM | * [[http://llvm.org/releases/3.6.2/docs/index.html|Documentația]] LLVM | ||
+ | * Loop Unrolling: | ||
+ | * Dragon Book: Capitolele 10.4.5, 9.6 | ||
+ | * Muchnik: Capitolul 18 (Secțiunea 18.4), Capitolul 14 | ||
* Testare: **TODO** | * Testare: **TODO** |