Ο σκοπός της παρούσας διπλωματικής εργασίας είναι η αξιολόγηση μιας νέας παράλληλης γλώσσας προγραμματισμού με το όνομα Chapel. Η γλώσσα αυτή προέκυψε μέσα από το πρόγραμμα HPCS της DARPA το οποίο έχει ως διακυρηγμένο στόχο την επίλυση του προβλημάτος της χαμηλής παραγωγικότητας που χαρακτηρίζει τον χώρο ανάπτυξης παράλληλου λογισμικού. Ως βάση για σύγκριση, δημιουργήσαμε μια μικρή "βιβλιοθήκη" μετρο-προγραμμάτων που περιλαμβάνει τους εξής γνωστούς αλγορίθμους:
* Γινόμενο πινάκων
* Αλγόριθμος Floyd-Warshall
* Επαναληπτικός αλγόριθμος Jacobi
* Παράλληλος (Black-Red) αλγόριθμος Gauss-Seidel
* Πολλαπλασιασμός αραιού πίνακα με διάνυσμα
Οι ανωτέρω αλγόριθμοι γράφτηκαν στην Chapel 1.4.0 και σε δύο άλλες καθιερωμένες παράλληλες γλώσσες, τις OpenMP και MPI, και έτρεξαν πάνω σε μια συστοιχία εμπορικών πολυπύρηνων επεξεργαστών συνδεδεμένων μέσω Gigabit Ethernet. Η σύγκριση των τριών υλοποιήσεων έδειξε ότι η Chapel είναι πολύ κοντά στην OpenMP τόσο σε απόλυτους χρόνους όσο και σε κλιμακωσιμότητα. Όσον αφορά την εκτέλεση σε πολλούς κόμβους μπορούμε να διακρίνουμε δύο περιπτώσεις: όταν οι αλγόριθμοι δεν απαιτούν επικοινωνία, η Chapel εμφανίζει άριστη κλιμακωσιμότητα και είναι μόλις 4 φορές πιο αργή από την MPI. Στους υπόλοιπους αλγορίθμους οι χρόνοι της είναι ως και χιλιάδες φορές μεγαλύτεροι της MPI που σημαίνει ότι η χρήση της Chapel δεν είναι καθόλου πρακτική, τουλάχιστον σε μη εξειδικευμένο hardware. Διάφοροι λόγοι για την υστέρηση αυτή δίνονται στο κεφάλαιο 6.5. Επίσης, επιχειρήσαμε μία όσο το δυνατόν πιο αντικειμενική σύγκριση για την ευκολία προγραμματισμού (programmability), απ’την οποία η Chapel αναδείχθηκε ως ο ξεκάθαρος νικητής.
Ο δεύτερεύων στόχος της διπλωματικής ήταν η διερεύνηση ενός πολύ σημαντικού χαρακτηριστικού της Chapel, που είναι τα πεδία ορισμού (domains) που δημιουργούνται από τους χρήστες. Με τον όρο domain εννοούμε το σύνολο των δεικτών για τους οποίους ένας πίνακας έχει στοιχεία. Στην Chapel, ο τρόπος που ορίζεται το domain ενός πίνακα καθορίζει την κατανομή του τελευταίου στους διάφορους επεξεργαστικούς κόμβους και τον αριθμό των νημάτων που τον επεξεργάζονται παράλληλα. Εμείς υλοποιήσαμε ένα πεδίο ορισμού για την σχετικά δύσκολη κατανομή δεικτών του αλγόριθμου Black-Red και μετρήσαμε την απόδοσή του έναντι της "απλής" μας υλοποίησης του αλγορίθμου.
The main objective of this thesis is the evaluation of a new parallel programming language called Chapel. This language came out of the HPCS project initiated by DARPA, with the professed purpose of solving the problem of low productivity that plagues development of parallel software. As a basis for comparison, we created a small library of benchmark programs based on the following well-known algorithms:
* Matrix multiplication
* Floyd-Warshall
* Iterative Jacobi
* Parallel (Black-Red) Gauss-Seidel
* Multiplication of sparse matrix with vector
The above algorithms were written in Chapel 1.4.0 and in two other established parallel “languages”, OpenMP and MPI, and were run on a cluster of commodity multi-core processors connected via Gigabit Ethernet. The comparison of the three implementations showed that Chapel’s performance is very close to that of OpenMP both in absolute times and scalability. As far as distributed execution is concerned, we can discern two separate cases: on algorithms that lack any communication, Chapel is only 4 times slower than MPI and displays excellent scalability. Whereas on algorithms with remote accesses, Chapel can be up to a thousand times slower than MPI, thus rendering its use impractical, at least when run on non-special hardware. Various reasons for this lag are given in chapter 6.5. Finally, we also compared the three languages in the programmability domain, where Chapel emerged as the clear winner.
The secondary objective of the thesis was the investigation of a very important feature of Chapel called user-defined domains. In Chapel, "domain" is the name given to the index set that represents the indexes for which an array has elements. The way a domain is defined also determines how the array is to be distributed to the various processing nodes as well as the number of threads that will run when processing it in parallel. We implemented such a domain for the relatively difficult index distribution of the Black-Red algorithm and we measured its performance compared to our vanilla Black-Red algorithm.