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 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.

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.

Pentru a calcula scorul unui test se folosește următoarea secvență de comenzi:

# 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

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:

  1. Descărcați arhiva de start și dezarhivați-o
  2. Creați un director de build și intrați în el (Exemplu: mkdir build; cd build)
  3. Rulați cmake cu calea directorului unde ați dezarhivat arhiva (Exemplu: cmake ..)
  4. Compilați pasul (Exemplu: make)
  5. 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 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 benchmarkul CPLMark în directorul de build, si apoi rulați ./cplmark.sh

Resurse

cpl/teme/tema2.txt · Last modified: 2018/01/19 13:23 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