Differences

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

Link to this comparison view

cpl:teme:concurs [2017/11/28 05:47]
bogdan.nitulescu removed
— (current)
Line 1: Line 1:
-====== Concurs ====== 
-Obiectivul acestui concurs 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 **17 ianuarie 2016, ora 23:59**. Deadline-ul este final - după această oră nu se vor mai accepta soluții. 
-  * **Colaborare**:​ Fiecare soluție este **individuală**. 
-  * **Premii** în puncte (100p = 10 puncte din nota finală) 
-    * Premiul 1 - **200p** 
-    * Premiul 2 - **150p** 
-    * Premiul 3 - **125p** 
-    * Premiul de participare - **100p** 
-    * Top 5 - șansa de a primi nota 10 la CPL! 
-  * **Condiții** de calificare 
-    * Soluția generează cod corect pentru toate testele din benchmark. 
-    * Soluția face o transformare non-trivială a 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]] 
-    * Pentru a primi nota 10 la CPL trebuie, în plus față de concurs, ca toate temele să fie trimise și toate testele din teme să se execute cu succes. 
- 
-===== Infrastructură ===== 
-  * Codul va folosi **LLVM 3.8.1** 
-  * Soluțiile vor fi trimise prin vmchecker, similar cu temele. 
-  * Clasamentul curent se regăsește la adresa [[http://​elf.cs.pub.ro/​cpl/​concurs]] 
- 
-===== Enunț ===== 
-Premisa acestul concurs este să scrieți un optimizor care va obține cel mai bun rezultat 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/concurs.1511840841.txt.gz · Last modified: 2017/11/28 05:47 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