HEAL DSpace

Σχεδίαση και υλοποίηση ενός μεταγλωττιστή κώδικα μηχανής για τη γλώσσα Erlang με χρήση της LLVM

DSpace/Manakin Repository

Show simple item record

dc.contributor.advisor Σαγώνας, Κωστής el
dc.contributor.author Σταυρακάκης, Χρήστος Γ. el
dc.contributor.author Stavrakakis, Christos G. el
dc.contributor.author Τσιούρης, Γιάννης Φ. en
dc.contributor.author Tsiouris, Ioannis F. en
dc.date.accessioned 2011-11-22T10:27:43Z
dc.date.available 2011-11-22T10:27:43Z
dc.date.copyright 2011-11-13 -
dc.date.issued 2011-11-22
dc.date.submitted 2011-11-13 -
dc.identifier.uri https://dspace.lib.ntua.gr/xmlui/handle/123456789/5425
dc.identifier.uri http://dx.doi.org/10.26240/heal.ntua.8057
dc.description 65 σ. el
dc.description.abstract Στις μέρες μας, οι υπάρχοντες μεταγλωττιστές ανοιχτού κώδικα χρησιμοποιούν απαρχαιωμένες τεχνικές παραγωγής κώδικα μηχανής και δεν μοιράζονται μεταξύ τους κώδικα υλοποίησης. Επιπλέον, αποτελούνται από πολύπλοκο κώδικα υλοποίησης, γεγονός που καθιστά δύσκολο το να μελετηθούν και ακόμα πιο δύσκολο το να αλλάξουν. Η Low Level Virtual Machine (LLVM) είναι μια βιβλιοθήκη τελευταίας τεχνολογίας για μεταγλωττιστές. Παρέχει ένα σύνολο από επαναχρησιμοποιήσιμα εργαλεία που υλοποιούν τις καλύτερες τεχνικές μεταγλώττισης και στατικής ανάλυσης, εστιάζοντας στην επίδοση του παραγόμενου κώδικα και στο χρόνο μεταγλώττισης. Ο απώτερος στόχος της LLVM είναι να παρέχει ανεξάρτητα εξαρτήματα για την κατασκευή υψηλής ποιότητας μεταγλωττιστών για πολλές διαφορετικές γλώσσες. Η διπλωματική αυτή περιγράφει την παρούσα αρχιτεκτονική, τις βασικές σχεδιαστικές αποφάσεις και κάποιες λεπτομέρειες υλοποίησης ενός νέο οπίσθιου τμήματος για τον HiPE, το μεταγλωττιστή κώδικα μηχανής του συστήματος της Erlang/OTP, που χρησιμοποιεί την υποδομή της LLVM. Διαπιστώθηκε πως μία από τις ενδιάμεσες γλώσσες του HiPE, η Register Transfer Language (RTL), έχει πολύ απλή και προφανή απεικόνιση στη συμβολική γλώσσα της LLVM. Παρόλα αυτά, υπήρχαν κάποια λεπτά σημεία, όπως η σύμβαση κλήσης συναρτήσεων, ο μηχανισμός χειρισμού εξαιρέσεων και η συλλογή σκουπιδιών, που απαιτούσαν ειδικούς χειρισμούς για να διατηρηθεί η συμβατότητα με το Application Binary Interface (ABI) του Συστήματος Χρόνου-Εκτέλεσης της Erlang (Erlang Run-Time System) και κατ' επέκταση η ενσωμάτωση της δουλειάς μας να γίνει διατηρώντας την υπάρχουσα αρχιτεκτονική της Εικονικής Μηχανής. Γι' αυτούς τους λόγους χρειάστηκε να αλλάξουμε τo Εξάρτημα Παραγωγής Κώδικα της LLVM, εφαρμόζοντας τους κανόνες που επέβαλλε το ABI στον παραγόμενο κώδικα. Στο κεφάλαιο της αξιολόγησης αναλύουμε λεπτομερώς την τρέχουσα πολυπλοκότητα και την επίδοση του νέου οπίσθιου τμήματος που υλοποιήσαμε με χρήση της LLVM για την οικογένεια επεξεργαστών AMD64. Οι χρόνοι εκτέλεσης των μετρο-προγραμμάτων που μεταγλωττίστηκαν στο δικό μας οπίσθιο τμήμα ήταν συγκρίσιμοι με εκείνους των προγραμμάτων που μεταγλωττίστηκαν στο υπάρχων οπίσθιο τμήμα του HiPE, και σημαντικά πιο μικροί από εκείνων της Eικονικής Mηχανής BEAM και της Erjang, η οποία είναι μια εικονική μηχανή για την Erlang βασισμένη στην Εικονική Μηχανή της Java (JVM). Η πολυπλοκότητα του τμήματός μας αποδείχθηκε σημαντικά μικρότερη. Ιδιαιτέρως αν λάβει κανείς υπόψιν του ότι, με σχετικά απλές επεκτάσεις, το οπίσθιο τμήμα που υλοποιήσαμε μπορεί να καλύψει όλες τις αρχιτεκτονικές επεξεργαστών που σήμερα υποστηρίζει ο HiPE. Αρκετές βελτιώσεις έχουν ήδη προγραμματιστεί ως αντικείμενο μελλοντικής εργασίας. el
dc.description.abstract Existing open-source compilers are based on old code generation technology, with code bases that are difficult to learn and hard to change, and share no code between each other. The Low Level Virtual Machine (LLVM) is a state-of-the-art compiler infrastructure providing a set of reusable components that implement the best known techniques focusing on compile time and performance of the generated code. The goal of LLVM is to provide modular components for building high quality compilers for many different languages. This thesis describes the current architecture, design decisions and implementation details of a new back end for HiPE, the native code compiler of Erlang/OTP, that targets the LLVM infrastructure. One of HiPE's intermediate representation, called Register Transfer Language (RTL), was found to have a very straightforward translation to LLVM assembly. However, there were a few subtle points, such as the calling convention, the exception handling mechanism and the garbage collection, that needed to be handled in order to retain Application Binary Interface (ABI) compatibility with the Erlang Run-Time System (ERTS) and integrate our work in the existing Virtual Machine architecture. For these reasons we patched the LLVM Code Generator and imposed the appropriate rules on the generated binary code. In the evaluation we detail the current complexity and performance of the new LLVM back end for the AMD64 architecture. The run-time performance was found to be comparable with HiPE and signifficantly faster than BEAM virtual machine and Erjang, a virtual machine for Erlang based on the Java Virtual Machine (JVM). The complexity of the LLVM back end proved to be far simpler; especially, if you take into consideration that, with rather plain extensions, it can support all hardware architectures that HiPE currently targets. Various performance improvements are planned for future work. en
dc.description.statementofresponsibility Χρήστος Γ. Σταυρακάκης el
dc.description.statementofresponsibility Γιάννης Φ. Τσιούρης el
dc.language.iso el en
dc.rights ETDFree-policy.xml en
dc.subject Erlang el
dc.subject Μεταγλωττιστής HiPE el
dc.subject Μεταγλώττιση κώδικα μηχανής el
dc.subject Βιβλιοθήκη LLVM el
dc.subject Οπίσθιο τμήμα el
dc.subject Συμβολική γλώσσα υψυλού επιπέδου el
dc.subject Μετάφραση ενδιάμεσης απεικόνισης el
dc.subject Βελτιστοποιήσεις χρόνου μεταγλώττισης el
dc.subject Erlang en
dc.subject HiPE compiler en
dc.subject Native code compilation en
dc.subject LLVM framework en
dc.subject Back end en
dc.subject High-level assembly en
dc.subject Intermediate representation transformation en
dc.subject Compile-time optimizations en
dc.title Σχεδίαση και υλοποίηση ενός μεταγλωττιστή κώδικα μηχανής για τη γλώσσα Erlang με χρήση της LLVM el
dc.title.alternative Design and implementation of a native code compiler for Erlang with LLVM en
dc.type bachelorThesis el (en)
dc.date.accepted 2011-11-07 -
dc.date.modified 2011-11-13 -
dc.contributor.advisorcommitteemember Παπασπύρου, Νικόλαος el
dc.contributor.advisorcommitteemember Κοζύρης, Άρης el
dc.contributor.committeemember Σαγώνας, Κωστής el
dc.contributor.committeemember Παπασπύρου, Νικόλαος el
dc.contributor.committeemember Κοζύρης, Άρης el
dc.contributor.department Εθνικό Μετσόβιο Πολυτεχνείο. Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών. Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών. Εργαστήριο Τεχνολογίας Λογισμικού el
dc.date.recordmanipulation.recordcreated 2011-11-22 -
dc.date.recordmanipulation.recordmodified 2011-11-22 -


Files in this item

This item appears in the following Collection(s)

Show simple item record