Υπολογιστική Επιστήµη και Τεχνολογία Μιχ. ρακόπουλος Τµήµα Μαθηµατικών Εαρινό εξάµηνο 2004
Κεφάλαιο 1 Εισαγωγή 1.1 Προσοµοίωση Η κλασσική επιστήµη και τεχνολογία στηρίζεται : 1. Θεωρία/σχεδιασµός. 2. Πείραµα/κατασκευή. Περιορισµοί : υσκολία κατασκευή µεγάλων αεροδυναµικών σηράγγων. Κόστος κατασκευή αεροσκαφών µόνο για πειραµατισµό. Χρόνος αναµονή για κλιµατολογικές ή γαλαξιακές µεταβολές. Επικινδυνότητα νέα ϕάρµακα, κλιµατολογικά πειράµατα. Υπολογιστική επιστήµη και τεχνολογία : 3. Προσοµοίωση ϕυσικών ϕαινοµένων σε ισχυρούς υπολογιστές...... µε ϐάση γνωστούς ϕυσικούς νόµους και...... αποτελεσµατικές αριθµητικές µεθόδους. 1.2 Υπολογιστική επιστήµη και τεχνολογία (ΥΕΤ) Συνδυάζει και συµπληρώνει τη γνώση από άλλες εφαρµοσµένες επιστήµες. Συγκεκριµένα η ΥΕΤ προυποθέτει/περιλαµβάνει : γνώση περιοχής του προβλήµατος κατασκευή µαθηµατικών µοντέλων αριθµητική ανάλυση 1
ΕΦΑΡΜ. ΜΑΘΗΜΑΤΙΚΑ ΠΛΗΡΟΦΟΡΙΚΗ ΥΕΤ ΕΠΙΣΤΗΜΕΣ/ΤΕΧΝΟΛΟΓΙΑ Σχήµα 1.1: Η ϑέση της υπολογιστικές επιστήµης στις εφαρµοσµένες/θετικές επιστήµες. ανάπτυξη αλγορίθµων προγραµµατισµός, ανάπτυξη λογισµικού υπολογιστική προσοµοίωση (εκτέλεση προγραµµάτων) ανάλυση, αξιολόγηση και γραφική επεξεργασία αποτελεσµάτων 1.3 Πεδία εφαρµογών Μετεωρολογικές και κλιµατολογικές προβλέψεις. Καύση : σχεδιασµός µηχανών. Ρευστοδυναµική : σχεδιασµός αεροσκαφών. Αυτοµατοποίηση ηλεκτρονικού σχεδιασµού Τεχνολογία νέων υλικών οκιµές σύγκρουσης αυτοκινήτων Αστροφυσική : κοσµικά µοντέλα. Βιολογία : γονιδίωµα, δοµή πρωτεινών, σχεδιασµός ϕαρµάκων. Οικονοµικά µοντέλα αγορών Κρυπτογραφία 2
Υπηρεσίες διαδικτύου, µηχανές αναζήτησης. Σεισµικά µοντέλα, εξόρυξη πετρελαίου. 1.4 Μονάδες µέτρησης υπολογισµών και µνήµης Flop: αριθµητική πράξη µε πραγµατικούς (floating point operation) Flop/s: αριθµός flop ανά δευτερόλεπτο. Bytes: µέγεθος δεδοµένων ( Τυπικά µεγέθη : για πραγµατικούς διπλής ακρίβειας) Mega Mflops/s = flop/sec Mbyte = bytes Giga Gflops/s = flop/sec Gbyte = bytes Tera Tflops/s = flop/sec Tbyte = bytes Peta Pflops/s = flop/sec Pbyte = bytes Exa Eflops/s = flop/sec Ebyte = bytes 1.5 Κλιµατολογική πρόβλεψη Κλασσικό παράδειγµα µοντέλων µε πολύ υψηλές υπολογιστικές απαιτήσεις (χρόνος και µνήµη). Πρόβληµα : Υπολογισµός της συνεχούς συνάρτησης κλίµατος C x, y, z, t T, p, h, v, v, v εδοµένα : x, y, z γεωγραφικό µήκος, γεωγραφικό πλάτος και υψόµετρο t χρόνος T ϑερµοκρασία p ατµοσφαιρική πίεση h υγρασία v, v, v συνιστώσες της ταχύτητας του ανέµου. Αντιµετώπιση : ιακριτοποίηση του συνεχούς προβλήµατος : Υπολογισµός των τι- µών της συνάρτησεις σε διαθριτά σηµεία/κόµβους του πεδίου ορισµού της C, π.χ. ενός ορθογωνίου πλέγµατος που καλύπτει την επιφάνεια της γής και εκτείνεται µέχρι κάποιο ύψος στην ατµόσφαιρα (Σχ. 1.2) Αλγόριθµος πρόβλεψης για χρόνο t dt µε δεδοµένες τις συνθήκες για t. 3
Σχήµα 1.2: ιακριτοποίηση 1.6 Υπολογισµοί για κλιµατολογικές προβλέψεις Ενα µόνο µέρος του προβλήµατος είναι το µοντέλο της ϱοής αερίων µαζών (µε αριθµητική επίλυση των εξισώσεων Navier-Stokes). Για κάλυψη της επιφάνειας της Γης ανά 1km 1km σε 10 υψοµετρικά επίπεδα σηµεία. Αποθήκευση 6 πραγµατικών ανά σηµείο. ΤΒ 100Flop για κάθε διακριτό σηµείο. Υπολογιστικές απαιτήσεις για πρόβλεψη : σε πραγµατικό χρόνο : flop/ sec µετεωρολογική (7 ηµέρες σε 24 ώρες Gflop/s Gflop/s κλιµατολογική (50 χρόνια σε 30 ηµέρες). Tflop/s Για διπλάσια πυκνότητα σηµείων, υπολογιστικός χρόνος Ακριβή µοντέλα χρειάζονται επιπλέον να συµπεριλάβουν και άλλους πα- ϱάγοντες (ατµόσφαιρα, ωκεανοί, ϑάλασσα-πάγοι, συνθήκες ξηράς, κύκλος του άνθρακα, όζον, γεωθερµία κ.α.). Τα σηµέρινά µοντέλα της τάξης km km. 1.7 Γρήγοροι υπολογιστές/υπολογισµοί Για την αντιµετώπιση προβληµάτων αυτής της τάξης µεγέθους, χρειάζονται προφανώς γρηγορότεροι υπολογιστές, αλλά και η όσο κατά το δυνατόν καλύτερη αξιοποίηση των δυνατοτήτων τους. 4
Για παράδειγµα, αν ένα πρόγραµµα P κλιµατολογικής πρόβλεψης είναι 10 ϕορές αργότερο (λόγω ανεπαρκούς προγραµµατισµού) από ένα πρόγραµ- µα P, είναι προφανές ότι στο ίδιο υπολογιστικό σύστηµα, το P µπορεί να αντιµετωπίσει µεγαλύτερα (άρα και ακριβέστερα) µοντέλα. 1.8 Απόδοση υπολογιστικών συστηµάτων Ταχύτητα : Χρόνος ή καλύτερα Mflop/s. 1 Mflop/s = floating point operations / sec Benchmarks: Προγράµµατα για µέτρηση υπολογιστικών επιδόσεων (ταχύτητα επεξεργασίας, µνήµης, προσπέλασης περιφερειακών κ.λ.π) Peak: Μέγιστη ϑεωρητική ταχύτητα επεξεργασίας (δίνεται από τον κατασκευαστή) Linpack: Benchmark για ταχύτητα επεξεργασίας (επίλυση γραµµικών συστηµάτων µε µ. Gauss) Στην πράξη : PEAK >> LINPACK > πραγµατικές εφαρµογές 1.9 NEC Earth Simulator Ο ισχυρότερος υπολογιστής σήµερα (Ιαπωνία) Αρχισε να κατασκευάζεται το 1997 µε στόχο την διερεύνηση παγκόσµιων κλιµατολογικών και περιβαλλοντολογικών µοντέλων. Ολοκληρώθηκε και άρχισε να λειτουργεί το 2002. 35.86Tflop/s (87.5% της µέγιστης ϑεωρητικά απόδοσης του) σύµφωνα µε το Linpack benchmark (µόλις 700Mflop/s για ένα Pentium 4, 2GHz). 26.58Tflop/s από κώδικα ατµοσφαιρικών µοντέλων. 1.10 Benchmark: επίλυση γραµµικών συστηµάτων Το παρακάτω πρόγραµµα Matlab, υλοποιεί ένα τυπικό benchmark τύπου Linpack (ταχύτητα επίλυσης γραµµικών συστηµάτων). function megaflops = bench(n) A=rand(n,n); b=rand(n,1); flops(0); tic; x=a\b; t=toc; megaflops = flops/t/1.e6 ; 5
1.11 Benchmark: αποτελέσµατα 250 MATLAB A\b benchmark 1.2GHz x86 CPU, 256K cache 200 150 Mflop/s 100 50 0 0 100 200 300 400 500 600 700 800 900 1000 n Παρατηρούµε ότι ϱυθµός υπολογισµού (Mflop/s) δεν είναι σταθερός (παρά µόνο για n > ) όπως ϑα περίµενε κανείς (ο αριθµός των πράξεων κινητής υποδιαστολής που εκτελεί ένας επεξεργαστής σε ένα δευτερόλεπτο, αλλάζει ανάλογα µε το µέγεθος του προβλήµατος!) Η συµπεριφορά αυτή οφείλεται στην ύπαρξη ιεραρχιών µνήµης στα σύγχρονα υπολογιστικά συστήµατα. 6
Κεφάλαιο 2 Ιεραρχίες µνήµης 2.1 Κατηγορίες υπολογιστικής µνήµης Ανάλογα µε την ταχύτητα προσπέλασης και την χωρητικότητα τους σχηµατί- Ϲουν την ιεραρχία που ϕαίνεται στο Σχ. 2.1. BYTES 100s Ks Ms Gs ΜΕΓΑΛΥΤΕΡΗ ΧΩΡΗΤΙΚΟΤΗΤΑ (bytes) ΚΜΕ ΚΑΤΑΧΩΡΗΤΕΣ CACHE RAM ΙΣΚΟΣ ΜΕΓΑΛΥΤΕΡΗ ΤΑΧΥΤΗΤΑ (nanosec) XPONOS 1s 10s 100s 10,000,000s Σχήµα 2.1: Ιεραρχίες µνήµης 2.2 Μνήµη Cache Γρήγορη µνήµη, συνήθως ενσωµατωµένη στον επεξεργαστή. Cache hit Αναφορά σε διεύθυνση µνήµης που ϐρίσκεται ήδη στο cache - ελάχιστο κόστος. Cache miss Η διέυθυνση µνήµης ΕΝ ϐρίσκεται στο cache, πρέπει να ϕέ- ϱουµε τα δεδοµένα από άλλη µνήµη (RAM, δίσκο, κλπ) - υψηλό κόστος 7
Η λειτουργίας της µνήµης cache (αλλά και άλλων κατηγοριών µνήµης) ϐασί- Ϲεται στην αρχή της τοπικότητας της αναφοράς (locality of reference). Σε ενα πρόγραµµα είναι πολύ µεγάλη, η πιθανότητατα αναφοράς σε δεδοµένα D: που χρησιµοποίησε προσφάτως (χρονική αναφορά), ή που ϐρίσκονται σε γειτονικές στη µνήµη ϑέσης µε τα δεδοµένα D (τοπική αναφορά). Παράδειγµα χρονικής αναφοράς είναι τα δεδοµένα σε µια επαναληπτική δοµή (for loop) που χρησιµοποιούνται πολλές ϕορές στο ίδιο χρονικό διάστηµα. Παράδειγµα τοπικής αναφοράς είναι η χρησιµοποίηση διανυσµάτων. Αν ένα πρόγραµµα, επεξεργάζεται το στοιχείο w i ένος διανύσµατος, είναι πολύ πιθανό στο επόµενο ϐήµα να χρειάζεται το w i. Οταν µεταφέρονται δεδοµένα στη µνήµη cache από την RAM, µεταφέρονται σε οµάδες (ϕορτώνονται και γειτονικές ϑέσεις στη µνήµη), µε σκοπό την πιθανή αξιοποίηση τοπικών αναφορών. 2.3 Αποθήκευση πινάκων στη µνήµη Απεικόνιση 2 πινάκων στην ΜΟΝΟ ΙΑΣΤΑΤΗ µνήµη : Fortran, Matlab 1 2 3 4 5 9 6 10 7 11 8 12 13 14 15 16 C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 MNHMH 1 2 3 4 5 6 7... 2.4 Βέλτιστη πρόσθεση πινάκων ιαστάσεις A(n,n), B(n,n), C(n,n) Αποθήκευση κατά στήλες (Fortran, Matlab) Αλγόριθµος 1 for i=1:n, for j=1:n, A(i,j) = B(i,j) + C(i,j); 8
Αλγόριθµος 2 for j=1:n, for i=1:n, A(i,j)= B(i,j) + C(i,j); Πως διατρέχει την µνήµη ο κάθε αλγόριθµος? Ποιός από τους 2 είναι ποιό αποτελεσµατικός (γρήγορος) στη Fortran? Ο αλγόριθµος 2, γιατί διαχειρίζεται στοιχεία που ϐρίσκονται σε συνεχόµενες ϑέσεις της µνήµης (άρα έχουν κατά πάσα πιθανότητα ϕορτωθεί και στην cache). Τι συµβαίνει στη C (σε αποθήκευση των A, B, C κατά γραµµές)? 2.5 Ιεραρχίες µνήµης και υπολογιστικοί πυρήνες Αναγνώριση ϐασικών, σχετικά απλών πυρήνων (πράξεων) ικανών να διατυπώσουν πολύπλοκους αλγορίθµους. Π.χ. πράξεις γραµµικής άλγε- ϐρας αποτελούν τη ϐάση αριθµητικών υπολογισµών. Καθορισµός κατάλληλου interface (τρόπος κλήσης) των συναρτήσεων που υλοποιούν τους πυρήνες, και συνφωνία πάνω σε αυτό (standard). Αποτελεσµατικός προγραµµατισµός των πυρήνων σε συναρτήσεις, µε εκ- µετάλλευση των ιεραρχιών µνήµης για συγκεκριµένο υπολογιστή! (συνήθως παρέχονται από τον κατασκευαστή). BLAS: Basic Linear Algebra Subprograms: συναρτήσεις για ϐασικές πράξεις γραµµικής άλγεβρας (υπολογιστικοί πυρήνες). Σύνθετοι αριθµητικοί αλγόριθµοι προγραµµατίζονται µε κλήση σε συναρτήσεις BLAS Υπάρχουν 3 επίπεδα συναρτήσεων BLAS. 2.6 BLAS 1 Πράξεις µεταξύ διανυσµάτων (1 πίνακες) Για διανύσµατα n στοιχείων : O n πράξεις Επιστρέφουν διάνυσµα ή αριθµό Βασικές πράξεις (x, y διανύσµατα, α αριθµός): saxpy: y scal: y αx αx y (daxpy, caxpy, zaxpy) rot: x cx sy και y sx cy µε c, s κάποιο συνηµίτονο και ηµίτονο αντίστοιχα. dot: Εσωτερικό γινόµενο x T y 9
2.7 BLAS 2 Πράξεις µεταξύ ενός πίνακα (2 ) και διανύσµατος (ή διανυσµάτων). Για πίνακα n n: O n πράξεις Επιστρέφουν διάνυσµα ή πίνακα Βασικές πράξεις (x, y διανύσµατα, A πίνακας): Γινόµενο πίνακα µε διάνυσµα : y y Ax, γενικά ο A είναι m n. (sgemv, dgemv,...) A A yx T Επίλυση τριγωνικών συστηµάτων : Επιλύει Tx y ως προς το x, όπου T τριγωνικός πίνακας. 2.8 BLAS 3 Πράξεις µεταξύ πινάκων που επιστρέφουν πίνακες. διανυσµάτων). Βασικές πράξεις (A, B, C πίνακες): Γινόµενο πινάκων : C C AB (συµφωνία διαστάσεων). Ο πυρήνας gemm στην πράξη είναι πιο γενικός και υπολογίζει C ϐc α A B µε α, beta αριθµούς και για δυνατότητα αναστρο- ϕής. Επίλυση τριγωνικών συστηµάτων µε πίνακες : Επιλύει TX Y ως προς το X, για τριγωνικό πίνακα T. 2.9 Ιστορική ανάπτυξη των πυρήνων BLAS Μαθηµατικά οι αλγόριθµοι είναι ισοδύναµοι (BLAS1 BLAS2 BLAS3). Αλλά η υπολογιστική τους απόδοση διαφέρει όπως ϕαίνεται και από το παρακάτω σχήµα. Mflop/s BLAS3 BLAS2 BLAS1 k n 10
Ιστορικά αναπτύχθηκαν για µέγιστη απόδοση στους υπολογιστές της εποχής τους (BLAS1 (ca 1970), BLAS2 (ca. 1985), BLAS3 (1990)) 2.10 Ενα απλό µοντέλο µνήµης Εστω ιεραρχία µνήµς 2 επιπέδων : µόνο γρήγορη (ΓΜ) και αργή µνήµη (ΑΜ). Ολα τα δεδοµένα αρχικά στην αργή µνήµη. m αριθµός δεδοµένων που κινούνται ανάµεσα στις 2 µνήµες t m χρόνος για πράξεις µε δεδοµένα στην αργή µνήµη f αριθµός αριθµητικών πράξεων t f χρόνος ανά αριθµητική πράξη (στη γρήγορη µνήµη) << t m. q f/m µέσος όρος flop ανά προσπέλαση της αργής µνήµης. Ελάχιστος δυνατός χρόνος : τ ft f όταν όλα τα δεδοµένα είναι στη γρήγορη µνήµη. Πραγµατικός χρόνος : T ft f nt m τ t m / t f q q T τ 2.11 Ανάλυση ταχύτητας στους πυρήνες BLAS m Αιτιολογία για m f q saxpy n ιάβασε x, y, γράψε y n 2/3 sgemv n O n ιάβασε A n 2 sgemm n ιάβασε A, B, C, γράψε C n n/ Η σηµασία του q: για κάθε λέξη που ϕέρνουµε απο ΑΜ, µπορούµε να κάνουµε το πολύ q πράξεις στη γρήγορη µνήµη. Οσο µεγαλύτερο το q τόσο περισσότερο ο αλγόριθµος δουλεύει στην ΓΜ. Αν κάθε flop χρειάζεται 2 αναφορές στη µνήµη (ΑΜ ή ΓΜ): miss ratio q πλήθος αναφορών στην ΑΜ σύνολο αναφορών σε ΑΜ και ΓΜ m f q 2.12 Παράδειγµα Ο υπολογισµός της συνάρτησης H στα στοιχεία του διανύσµατος x, και εύρεση του αθροίσµατος των τιµών i H x i : 11
Παραδοχές : s = 0; for i = 1:n, s = s + H(x(i)); end t f Mflop/s στη γρήγορη µνήµη t m H κοστίζει q flops Το διάνυσµα x ϐρίσκεται στην ΑΜ Συµπεράσµατα : m n και f qn T διάβασµαx υπολογισµοί n qn Mflop/s f/t q/ q q T τ 2.13 Πολ/σµός πίνακα µε διάνυσµα y = y + A*x y(i) A(i,:) = + * y(i) x(:) Αλγόριθµος : Ανάλυση : for i=1:n for j=1:n y(i) = y(i) + A(i,j)*x(j) end end 12
% read x(1:n) into fast memory % read y(1:n) into fast memory for i = 1:n % read A(i,:) into fast memory for j=1:n y(i) = y(i) + A(i,j)*x(j) end end % write y(1:n) back to slow memory m αναφορές στην ΑΜ n n f αριθµός flops n q f/m. Ο αλγόριθµος περιορίζεται από την προσπέλαση σε ΑΜ. 2.14 Πολ/σµός πινάκων C = C + A*B C(i,j) C(i,j) A(i,:) B(:,j) Αλγόριθµος : Ανάλυση : = + for i=1:n for j=1:n for k=1:n C(i,j) = C(i,j) + A(i,k)*B(k,j) end end end for i=1:n % read A(i,:) into fast memory for j=1:n % read C(i,j) into fast memory % read B(:,j) into fast memory for k=1:n C(i,j) = C(i,j) + A(i,k)*B(k,j) end % write C(i,j) back to slow memory end end * 13
Αναφορές σε ΑΜ ιάβασε κάθε στήλη του B n ϕορές ιάβασε κάθε στήλη του A µια ϕορά για κάθε i ιάβασε και γράψε κάθε στοιχείο του C µια ϕορά n n m n n q f/m n / n n εν υπάρχει ϐελτίωση σε σχε ση µε πολ/σµο πίνακα µε διάνυσµα. n 2.15 Πολ/σµός πινάκων - µε χρήση υποπινάκων Εστω A, B, C N N πίνακες από b b υποπίνακες µε b n/n (blocksize) b n C(i,j) C(i,j) A(i,k) = + * B(k,j) n = b*n Μαθηµατικά ισοδύναµος τρόπος 2.16 Πολ/σµός πινάκων - µε χρήση υποπινάκων for i=1:n for j=1:n % read C(i,j) into fast memory for k=1:n % read A(i,:) into fast memory % read B(:,j) into fast memory C(i,j) = C(i,j) + A(i,k)*B(k,j) %blocks end % write C(i,j) back to slow memory end end Αναφορές σε ΑΜ ιάβασε κάθε block του B, N ϕορές (N n/n n/n) ιάβασε κάθε block του A, N ϕορές ιάβασε και γράψε κάθε block του C µια ϕορά m N n N n n N n 14
q f/m n / N n n/n b για n >>> Βελτίωση της απόδοσης µε αύξηση του b (σύγκρ. µε πολ/σµό πίνακα διάνυσµα, η πίνακα πίνακα χωρίς blocks, q ). Περιορισµός : Και οι 3 υποπίνακες των A, B, C πρέπει να «χωράνε» στην ΓΜ (cache): b < M, άρα q b M/ Θεώρηµα : Οποιαδήποτε προσεταιριστική αναδιοργάνωση του παραπάνω αλγορίθµου περιορίζεται από q O M 2.17 Ο αλγόριθµος του Strassen Ο συνήθης αλγόριθµος πολ/σµού πινάκων (µε ή χωρίς χρήση υποπινάκων) έχει O n flop Ο Strassen ανακάλυψε ένα ασυµπτωτικά καλύτερο αλγόριθµο µε O n. flop Για πίνακες (σύνήθως απαιτούνται 8 πολ/σµοί), Εστω M AB και Τότε p a a b b p a b b p a a b b p a b b p a a b b p a a b p a a b m p p p p m p p m p p m p p p p Γενίκευση για n n πίνακες µε υποπίνακες : χωρισµός σε υποπίνακες κάθε ϕορά και χρήση αναδροµικής συνάρτησης, για n, n/, n/,..., Αλγόριθµος : function M = strassen(a, B, n) if n==1, M = A*B; return else % partition A = [A11 A12; A21 A22] % partition B = [B11 B12; B21 B22] P1 = strassen(a12-a22, B21+B22, n/2); P2 = strassen(a11+a22, B11+B22, n/2); P3 = strassen(a11-a21, B11+B12, n/2); 15
Ανάλυση : P4 = strassen(a11+a12, B22, n/2); P5 = strassen(a11, B21-B11, n/2); P6 = strassen(a22, B21-B11, n/2); P7 = strassen(a21+a22, B11, n/2); M = [P1+P2-P4+P6, P4+P5; P6+P7, P2-P3+P5-P7]; return end T n Κόστος για πίνακες n n T n/ Με αλλαγή µεταβλητής m n, και T m T n : T m T m m n/ δίνει τελικά T n O n log O n. 100δες ϕορές γρηγορότερος για µεγάλα n. ιαθέσιµος σε πολλές ϐιβλιοθήκες Λιγότερο ακριβής (σφάλµατα στρογγύλευσης) Αλλοι αλγόριθµοι πολ/σµου (παγκόσµιο record O n.... 2.18 Τεχνικές για ϐελτίωση απόδοσης επεξεργαστών A B C D 30 40 20 6 7 8 9 t Σχήµα 2.2: Pipelining Ιεραρχίες µνήµης 16
Παράλληλη επεξεργασία µέσα σε ένα επεξεργαστή Πολλαπλές λειτουργικές µονάδες που δουλεύουν παράλληλα. Π.χ. αν ένας επεξεργαστής διαθέτει δύο µονάδες για πολλαπλασιασµούς, τότε ο υπολογισµός των γινοµένων ac και bd στην έκφραση D ac bd γίνεται παράλληλα. Pipelining Αν ένας υπολογισµός αποτελείται από διακριτές ϕάσεις που εκτελούνται πολλές ϕορές και από διαφορετικές µονάδες επεξεργασίας, τότε είναι δυνατή η ταυτόχρονη λειτουργία διαφορετικών µονάδων από διαφορετικές διεργασίες ή δεδοµένα. Για παράδειγµα αν καθένας από τους υπολογισµούς A, B, C, D του Σχ. 2.2 εκτελείται σε 3 στάδια µε χρονική διάρκεια 30, 40 και 20 µονάδες χρόνου σε κάθε στάδιο, τότε : Αν για παράδειγµα ο B ξεκίναγε µόνο όταν ο προηγούµενος του A είχε ολοκληρώσει ΚΑΙ τα 3 στάδια, τότε ο D ϑα τέλειωνε 360 µονάδες χρόνου µετά την έναρξη του A (ή µε άλλα λόγια η εκτέλεση των A, B, C, D ϑα διαρκούσε 360 µ.χ.) Αν όµως εκµεταλλευτούµε την επικάλυψη υπολογισµών σε διαφο- ϱετικές µονάδες (pipelining) τότε και οι 4 υπολογισµοί ολοκληρώνονται σε 180 µονάδες χρόνου. Συνήθως τα παραπάνω αξιοποιούνται απο compilers αλλά ϐοηθάει και η «αν- ϑρώπινη» επέµβαση (ϐλ. ιεραρχίες µνήµης) 45000 40000 MOORE S LAW Pentium 4 35000 30000 x1000s transistors 25000 20000 15000 Pentium 3 10000 Pentium 2 5000 Pentium Pro Pentium 0 386DX 80486 1984 1986 1988 1990 1992 1994 1996 1998 2000 Year Σχήµα 2.3: Ο νόµος του Moore 17
2.19 Η εξέλιξη των υπολογιστών Ο νόµος του Moore: Ο αριθµός των transistors σε ένα επεξεργαστή (άρα και η υπολογιστική ισχύς του) διπλασιάζεται καθε 18 περίπου µήνες. Υπάρχει όριο ταχύτητας σε συµβατικούς υπολογιστές? Για ϱεαλιστικά µοντέλα χρειαζόµαστε απόδοση στην τάξη τουtera (π.χ. στην κλιµατολογική πρόβλεψη) 1 Tflop/s, 1Tbyte r = 0.3mm Σχήµα 2.4: Επεξεργαστής δυνατοτήτων Tera Για συµβατικό υπολογιστή 1Tflop/s Τα δεδοµένα πρέπει να ταξιδέψουν απόσταση r από τη µνήµη στον επεξεργαστή. Για ένα δεδοµένο ανά κύκλο : ϕορές το δευτερόλεπτο µε την ταχύτητα του ϕωτός c m/s, άρα r < c/. mm Αν ϐάλουµε 1Tbyte µνήµης σε εµβαδό. mm. mm: Μια λέξη (4bytes) καταλαµβάνει 3 τετραγωνικά Angstroms, δηλ. το µέγεθος ενός µικρού ατόµου! ΛΥΣΗ: Παράλληλοι υπολογιστές / Παράλληλη επεξεργασία 18
Κεφάλαιο 3 Παράλληλοι υπολογιστές Η ιδέα πίσω από την παράλληλη επεξεργασία είναι απλή : δύο ή περισσόεροι επεξεργαστές που συνεργάζονται επιλύουν δεδοµένο πρόβληµα γρηγορότερα από ότι ένας. 3.1 Αρχιτεκτονικές παράλληλων επεξεργαστών Ανάλογα µε τη ϑέση/ρόλο της µνήµης του παράλληλου υπολογιστικού συστή- µατος διακρίνουµε δυο µεγάλες κατηγορίες : Υπολογιστές µε κοινή µνήµη. Ολοι οι επεξεργαστές έχουν πρόσβαση σε κοινή µνήµη µέσω κάποιου δικτύου διασύνδεσης. Οι επεξεργαστές επικοινωνούν µεταξύ τους γράφοντας σε κοινές µεταβλητές στην κοινή µνήµη (Σχ. 3.1). Υπολογιστές µε κατανεµηµένη µνήµη. Κάθε επεξεργαστής έχει αποκλειστική πρόσβαση στη µνήµη του. Οι επεξεργαστές επικοινωνούν (συνδέονται) µεταξύ τους µέσω κάποιου δικτύου διασύνδεσης (Σχ. 3.2). Ανάµεσα στα δύο αυτά άκρα υπάρχουν διάφορες παραλλαγές (π.χ. επεξεργαστές µε δική τους µνήµη αλλά και πρόσβαση σε κάποιο είδος κοινής µνήµης). Μια κατηγορία παράλληλων υπολογιστών που αξίζει να αναφερθεί είναι οι Beowulf clusters. Οι υπολογιστές αυτοί δεν είναι τίποτα άλλο από προσωπικοί υπολογιστές και σταθµοί εργασίας (workstations) που συνδέονται µεταξύ τους µε κάποιο δίκτυο και λειτουργούν σαν ένας παράλληλος υπολογιστής. Οι clusters έχουν πολύ χαµηλό κόστος (αφού αποτελούνται στην ουσία από συµβατικούς υπολογιστές) και προγραµµατίζονται σχεδόν αποκλειστικά µε ελεύθερο λογισµικό (πράγµα που µειώνει ακόµα περισσότερο το κόστος του συστήµατος). Παρά το χαµηλό κόστος τους, συναγωνίζονται σε απόδοση ειδικευµένους παράλληλους υπερυπλογιστές που κοστίζουν πολύ περισσότερο. Το δίκτυο διασύνδεσης συνδέει µεταξύ τους είτε Ϲεύγη επεξεργαστών/µνη- µών, είτε επεξεργαστές µε µνήµες. Μερικά από τα πιο συνηθισµένα δίκτυα διασύνδεσης ϕαίνονται στο Σχ. 3.3. 19
P0 P1 Pn ΙΚΤΥΟ ΙΑΣΥΝ ΕΣΗΣ MNHMH Σχήµα 3.1: Παράλληλοι υπολογιστές κοινής µνήµης ΙΚΤΥΟ ΙΑΣΥΝ ΕΣΗΣ P0 P1 Pn M0 M1 Mn Σχήµα 3.2: Παράλληλοι υπολογιστές κατανεµηµένης µνήµης 20
Σχήµα 3.3: Παραδείγµατα δικτύων διασύνδεσης Μια ιδιαίτερη κατηγορία δικτύων διασύνδεσης είναι η οικογένεια των υπερκύβων (Σχ. 3.4). Ενας υπερκύβος διάστασης d αποτελείται από d επεξεργαστές. Κάθε επεξεργαστής συνδέεται άµεσα µε d γειτονικούς του επεξεργαστές. Υπολογιστές µε κοινή µνήµη προγραµµατίζονται ευκολότερα από ότι εκείνοι µε κατανεµηµένοι µνήµη, αλλά είναι αποτελεσµατικοί µόνο για σχετικά µικρό αριθµό επεξεργαστών. Καθώς αυξάνεται ο αριθµός των επεξεργαστών δηµιουργείται συµφόρηση στην προσπέλαση της κοινής µνήµης. 3.2 Η ταξινόµηση του Flynn Τα υπολογιστικά συστήµατα κατατάσσονται ανάλογα µε τον αριθµό των ϱευ- µάτων οδηγιών και ϱευµάτων δεδοµένων σε µιά από τις παρακάτω κατηγορίες : SISD (Single Instruction Single Data) Ενα ϱεύµα εντολών που εκτελείται µε ένα µόνο ϱεύµα δεδοµένων. Είναι το µοντέλο των συµβατικών σειριακών υπολογιστών. SIMD (Single Instruction Multiple Data) Ολοι οι επεξεργαστές εκτελούν συγχρονισµένα την ίδια εντολή σε δεδοµένη χρονική στιγµή αλλά σε διαφο- ϱετικά δεδοµένα. Ενας συντονιστής επεξεργαστής καθορίζει την εντολή που ϑα εκτελέσουν όλοι οι υπόλοιποι σε διαφορετικά δεδοµένα. Το µοντέλο αυτό έιναι γνωστό και σαν data parallel και προγραµµατιστικά είναι ανάλογο µε τη γλώσσα του Matlab. Αν για παράδειγµα Ϲητήσουµε να προσθέσουµε δύο πίνακες µε την οδηγία C=A+B, κάθε επεξεργαστής προσθέτει διαφορετικούς υποπίνακες. 21
d = 2 d = 3 d = 4 Σχήµα 3.4: Υπερκύβοι MIMD (Multiple Instruction Multiple Data) Είναι η γενικότερη περίπτωση, όπου κάθε επεξεργαστής µπορεί να εκτελεί σε δεδοµένη χρονική στιγµή διαφορετικές εντολές σε διαφορετικά ϱεύµατα δεδοµένων. Στην κατηγορία αυτή µπορεί για παράδειγµα κάθε επεξεργαστής να εκτελεί διαφορετικό πρόγραµµα. Συνηθέστερη παραλλαγή αυτής της κατηγορίας το µοντέλο SPMD (Single Program Multiple Data όπου όλοι οι επεξεργαστές εκτελούν το ίδιο πρόγραµµα (όχι κατ ανάγκη συγχρονισµένα και µε δυνατότητα να ακολουθήσουν διαφορετικές διαδροµές π.χ. σε ένα if-else) µε διαφορετικά δεδοµένα. 22
Κεφάλαιο 4 Το µοντέλο BSP 4.1 Το µοντέλο BSP Το µοντέλο BSP (Bulk Synchronous Parallel) περιγράφει µε γεινκούς όρους πως υλοποιείται ένας παράλληλος υπολογισµός. Το µοντέλο δεν καθορίζει τον τρόπο µε τον οποίο υλοποιούνται οι τοπικοί υπολογισµοί (δηλ. υπολογισµοί που εκτελούνται τοπικά σε κάποιο επεξεργαστή) ούτε το είδος των επικοινωνιών. Εποµένως κάθε επεξεργαστής αντιµετωπίζεται, συνήθως, σαν ένας συµβατικός σειριακός επεξεργαστής όσον αφορά τους υπολογισµούς, που έχει επίσης τη δυνατότητα να επικοινωνεί µε οποιονδήποτε τρόπο µε τους υπόλοιπους. Ολοι οι επεξεργαστές εκτελούν το ίδιο πρόγραµµα µε διαφορετικά δεδοµένα (SPMD λειτουργία). 4.1.1 Υπολογιστής BSP Σύµφωνα µε το µοντέλο, ένας bulk synchronouc parallel (BSP) υπολογιστής αποτελείται από : 1. Ενα σύνολο επεξεργαστών µε τοπική µνήµη. Η συνθήκη αυτή ικανοποιείται προφανώς σε συστήµατα κατανεµηµένης µνήµης, αλλά και σε συστήµατα κοινής µνήµης µε κατάλληλες προγραµµατιστικές παραδοχές που εξασφαλίζουν ότι κάθε επεξεργαστής έχει αποκλειστική πρόσβαση σε κάποια περιοχή της µνήµης. 2. Ενα δίκτυο επικοινωνίας µεταξύ επεξεργαστών. Η συνδεσµολογία του δικτύου και ο τρόπος µε τον οποίο εκφράζονται οι επικοινωνίες δεν απασχολούν το µοντέλο BSP. Η µόνη προυπόθεση είναι να υπάρχει η δυνατότητα επικοινωνίας µε οποιονδήποτε τρόπο, µεταξύ δυο οποιωνδήποτε επεξεργαστών. 3. Εναν αποτελεσµατικό µηχανισµό συγχρονισµού τύπου ϕράγµατος (barrier). Κανένας επεξεργαστης δεν µπορεί να υπερβεί το ϕράγµα, αν δεν έχουν ϕτάσει σε αυτό και όλοι οι υπόλοιποι. Τα ϕράγµατα συγχρονισµόυ 23
παρεµβάλλονται µεταξύ οµάδων εντολών (υπερβήµατα). Κάθε επεξεργαστής περιµένει τους υπόλοιπους στο ϕράγµα. Εποµένως οι επεξεργαστές λειτουργούν γενικά ασύγχρονα κατά τη διάρκεια των υπολογισµών ένος υπερβήµατος και συγχρονίζονται µαζικά στο ϕράγµα (bulk synchronous). Κάθε υπολογιστής µπορεί να ϑεωρηθεί σαν υπολογιστής BSP 4.1.2 Υπερβήµατα Η πεµπτουσία του µοντέλου BSP είναι η έννοια του υπερβήµατος. Ενας υπολογισµός BSP συνίσταται από υπερβήµατα (supersteps). Κάθε υπερβήµα διαπαράλληλες διεργασίες τοπικοί υπολογισµοί καθολικές επικοινωνίες συγχρονισµός ϕράγµατος κρίνεται από 3 ϕάσεις (Σχ. 4.1): Σχήµα 4.1: Το µοντέλο BSP Τοπικοί υπολογισµοί µε τοπικά δεδοµένα µέσα σε κάθε παράλληλη διεργασία Αιτήµατα για non-blocking επικοινωνίες µε άλλους επεξεργαστές για ανταλλαγή δεδοµένων. 24
Ενας συγχρονισµός τύπου ϕράγµατος µεταξύ όλων των διεργασιών που χρησιµοποιείται για να δηλώσει το τέλος του υπερβήµατος και που εγγυάται την ολοκλήρωση όλων των επικοινωνιών που Ϲητήθηκαν κατά τη διάρκεια του υπερβήµατος. Σύµφωνα µε το µοντέλο BSP η επικοινωνία είναι εντελώς ανεξάρτητη από τον συγχρονισµό. 4.1.3 Ιεραρχία µνήµης στο µοντέλο BSP Ενας υπολογιστής BSP έχει δυο επίπεδα µνήµης. Κάθε επεξεργαστής έχει : 1. τη δική του τοπική µνήµη (ταχείας προσπέλασης), 2. πρόσβαση στη µνήµη των άλλων µε οµοιόµορφο και αποτελεσµατικό τρόπο. Οµοιόµορφη πρόσβαση σηµαίνει ότι ο χρόνος που χρειάζεται ένας επεξεργαστής να διαβάσει από, ή να γράψει σε µη τοπική µνήµη (άλλων επεξεργαστών) είναι ανεξάρτητος από την µεταξύ τους συνδεσµολογία και απόσταση. Προφανώς η οµοιόµορφη πρόσβαση είναι µια απλουστευτική παραδοχή του µοντέλου, που γενικά δεν ισχύει στην πράξη παρά µόνο σε ειδικές περιπτώσεις (π.χ. υπολογιστικά συστήµατα κοινής µνήµης µε σχετικά µικρό αριθµό επεξεργστών). Το µοντέλο BSP αντισταθµίζει τις όποιες αποκλίσεις ϑα προέκυπταν στη ϑεωρητική µελέτη παράλληλων αλγορίθµων µε την εισαγωγή κατάλληλων παραµέτρων (ϐλ. 6). 4.2 Η ϐιβλιοθήκη BSPlib Η πιο διαδεδοµένη υλοποιήση του µοντέλου BSP είναι η ϐιβλιοθήκη BSPlib, που αποτελεί και διεθνές standard. Η BSPlib τρέχει σε ένα µεγάλο αριθ- µό παράλληλων υπολογιστών (από υπερυπολογιστές έως δίκτυα προσωπικών υπολογιστών) και καλείται από προγράµµατα γραµµένα σε C ή Fortran. Η BSPlib είναι µια µικρή ϐιβλιοθ κη µε 20 περίπου συναρτήσεις (Πιν. 4.1). Συγκριτικά, άλλες standard ϐιβλιοθήκες παράλληλου προγραµµατισµού είναι σαφώς µεγαλύτερες (MPI-1: 129 MPI-2: 202 PVM: 90). 4.2.1 Είδη επικοινωνίας στη BSPlib Η ϐιβλιοθήκη BSPlib υποστηρίζει τα παρακάτω είδη επικοινωνίας. Direct Remote Memory Access (DRMA) Αµεση πρόσβαση σε µη τοπική µνήµη, όπου µια διεργασία µπορεί να διαβάσει ή να γράψει δεδο- µένα από/στην µνήµη µιας άλλης διεργασίας χωρίς τη συµµετοχή της τελευταίας. 25
Class Operation Meaning Initialisation bsp_begin Start of SPMD code bsp_end End of SPMD code bsp_init Simulate dynamic processes Halt bsp_abort One process halts all Enquiry bsp_pid Find my process id bsp_nprocs Number of processes bsp_time Local time Superstep bsp_sync Barrier synchronisation DRMA bsp_push_reg Make region globally visible bsp_pop_reg Remove global visibility bsp_put Copy to remote memory bsp_get Copy from remote memory BSMP bsp_set_tag_size Choose tag size bsp_send Send to remote queue bsp_qsize Number of messages in queue bsp_get_tag Match tag with message bsp_move Move from queue High Performance bsp_hpput Unbuffered versions bsp_hpget of communication bsp_hpmove primitives Πίνακας 4.1: Οι συναρτήσεις της BSPlib 26
Bulk Synchronous Message Passing (BSMP) όπου µια διεργασία A µπορεί να στείλει ένα µήνυµα σε µια άλλη διεργασία B. Το µηνύµατα που προορίζονται για την B µπαίνουν σε ουρά αναµονής και γίνονται διαθέσιµα στη B κατά το επόµενο υπερβήµα. (Σχ. 4.2) bsp_send bsp_send bsp_move bsp_move Σχήµα 4.2: Bulk Synchronous Message Passing (BSMP) Η επιλογή ανάµεσα σε επικοινωνίες DRMA ή BSMP εξαρτάται από το πρόβλη- µα και ποιο συγκεκριµένα από τις πληροφορίες που έχει ένας επεξεργαστής για τις δοµές δεδοµένων στη µνήµη των άλλων : DRMA χρησιµοποιείται σε προβλήµατα που κάθε διεργασία γνωρίζει την ύπαρξη και το µέγεθος περιοχών της αποµακρυσµένης µνήµης. BSMP καλύτερο σε ακανόνιστα προβλήµατα όπου µόνο ο λήπτης των δεδο- µένων γνωρίζει που/πως ϑα αποθηκευτούν. Στο µάθηµα ϑα χρησιµοποιήσουµε αποκλειστι κα επικοινωνίες DRMA. 4.2.2 BSPlib: DRMA Η επικοινωνία DRMA είναι µονόπλευρη επικοινωνία : µια διεργασία µπορεί να γράψει/διαβάσει δεδοµένα στη/από τη µνήµη µιάς άλλης διεργασίας χω- 27
ϱίς τη συµµετοχή της τελευταίας. Υλοποιείται µε δυο συµµετρικές ενέργειες (συναρτήσεις): get: ιαβάζει/φέρνει δεδοµένα από αποµακρυσµένη διεργασία. put: Γράφει/φορτώνει δεδοµένα στην µνήµη αποµακρυσµένης διεργασίας. Μια επικοινωνία εκφράζεται µε put αν την ξεκινάει ο επεξεργαστής A που ϑέλει να στείλει κάποια δεδοµένα του στον B. Εναλλακτικά, η ίδια επικοινωνία µπορεί να εκφραστεί από την µεριά του B µέσω της get για να πάρει τα δεδοµένα από τον A. ιακρίνουµε επίσης δυο παραλλαγές ανάλογα µε την ερµηνεία του υπερ- ϐήµατος, δηλ. αν οι επικοινωνίες είναι : buffered: γίνονται στο τέλος του υπερβήµατος unbuffered: γίνονται οποιαδήποτε στιγµή κατά τη διάρκεια του υπερβήµατος. Και οι δυο παραλλαγές υποστηρίζοναται στην BSPlib. Η έννοια του buffering απαντάται σε διάφορες µορφές στην Πληροφορική. Ενας buffer είναι µια οποιαδήποτε δοµή δεδοµένων που χρησιµεύει σαν προσωρινός χώρος αποθήκευσης µε σκοπό τη συλλογή και κα υτερη διαχείριση δεδοµένων. Για παράδειγµα, αντί ο επεξεργαστής A να στείλει µεµονωµένα τα δεδοµένα του a, b, c και d στον B κατά τη διάρκεια ενός υπερβήµατος, ϑα µπορούσε να τα στείλει συγκεντρωνένα στο διάνυσµα (array) a, b, c, d (τον buffer). Η διαδικασία του buffering γίνεται αυτόµατα από την ϐιβλιοθήκη όταν επιλεγεί αυτό το είδος της επικοινωνίας. Στην περίπτωση unbuffered DRMA επικοινωνίας (Σχ. 4.3), υπάρχει επικάλυψη επικοινωνίας και υπολογισµών, αλλά : Τα δεδοµένα που ανταλλάσσονται δεν επιτρέπεται να αλλάξουν τοπικά στο ίδιο υπερβήµα. Ο σχεδιασµός προγραµµάτων είναι δυσκολότερος, καθώς δεν είναι πάντα δυνατόν να προβλέψουµε αλλαγές που µπορεί να γίνουν σε τοπικά δεδοµένα ή την αλληλεπίδραση των gets και puts. Στην περίπτωση buffered DRMA επικοινωνίας (Σχ. 4.4), δεν υπάρχει επικάλυψη επικοινωνίας και υπολογισµών, και κατά συνέπεια : Τα δεδοµένα που ανταλλάσσονται µπορούν να αλλάξουν τοπικά. Η µόνη απροσδιοριστία προκύπτει όταν πολλές διεργασίες γράφουν στις ίδιες ϑέσεις µνήµης. 28
bsp_hpput bsp_hpput bsp_hpget Σχήµα 4.3: Unbuffered DRMA επικοινωνία bsp_put bsp_put bsp_get Σχήµα 4.4: Buffered DRMA επικοινωνία 29
4.2.3 Συναρτήσεις της ϐιβλιοθήκης BSPlib 4.2.4 Αρχικοποίηση και τερµατισµός #include "bsp.h" void bsp_begin(int maxprocs); void bsp_end(); Παράλληλη εκτέλεση των εντολών µεταξύ των bsp_begin και bsp_end σε maxprocs το πολύ επεξεργαστές. Ο ιδιωµατισµός bsp_begin(bsp_nprocs()) χρησιµοποιεί όλους τους διαθέσιµους επεξεργαστές. #include "bsp.h" bsp_abort(char *format,...); Αν κάποιος επεξεργαστής καλέσει την bsp_abort τερµατίζεται η εκτέλεση του παράλληλου προγράµµατος σε όλους τους επεξεργαστές, και εκτυπώνεται κάποιο µήνυµα (σύνταξη, όπως και η printf). Πληροφορίες για το περιβάλλον εκτέλεσης #include "bsp.h" int bsp_nprocs(); int bsp_pid(); Αν η bsp_nprocs κληθεί πριν από την bsp_begin επιστρέφει τον συνολικό διαθέσιµο αριθµό επεξεργαστών. Αν κληθεί µετά, επιστρέφει τον αριθµό p των επεξεργαστών ( p n όπου n ο αριθµός των επεξεργαστών που Ϲητήθηκαν από την bsp_begin. Καθένας από τους p επεξεργαστές που διατέθηκαν στο παράλληλο πρόγραµµα προσδιορίζεται από ένα µοναδικό ακέραιο i, i < p που µπορού- µε να µάθουµε καλώνας την bsp_pid() (0 <= bsp_pid() < bsp_nprocs()). Παράδειγµα : Hello world #include "bsp.h" void main(void) { int i; bsp_begin(bsp_nprocs()); 30
for(i=0; i<bsp_nprocs(); i++) { if (bsp_pid()==i) printf("hello BSP from %d of %d\n", i, bsp_nprocs()); fflush(stdout); bsp_sync(); } bsp_end(); } Buffered DRMA: η συνάρτηση put #include "bsp.h" void bsp_put(int pid,void *src,void *dst,int offset,int nbytes); void bsp_hpput(int pid,void *src,void *dst,int offset,int nbytes); Ο επεξεργαστής που καλεί µια από τις put ϐαζει nbytes bytes που αρχίζουν στην διεύθυνση της µνήµης του src, στον επεξεργαστή pid offset bytes από την εκεί διεύθυνση µνήµης dst. Παραδείγµατα : Η int µεταβλητή a στη µεταβλητή b του επεξεργαστή 4 bsp_put(4, &a, &b, 0, sizeof(int)); Το στοιχείο x[2] του διανύσµατος double x στη µεταβλητή b του επεξεργαστή 1 bsp_put(1, &x[2], &b, 0, sizeof(double)); Τα στοιχεία x[3], x[4], x[5] του διανύσµατος int x στις ϑέσεις y[7], y[8], y[9] του διανύσµατος y του επεξεργαστή 0 bsp_put(0, &x[3], &y, 7*sizeof(int), 3*sizeof(int)); Buffered DRMA: η συνάρτηση get #include "bsp.h" void bsp_get(int pid,void *src,int offset,void *dst,int nbytes); void bsp_hpget(int pid,void *src,int offset,void *dst,int nbytes); Ο επεξεργαστής που καλεί µια από τις get παίρνει nbytes bytes που αρχί- Ϲουν στην διεύθυνση της µνήµης του dst, από τον επεξεργαστή pid offset bytes από την εκεί διεύθυνση µνήµης src. Παραδείγµατα : 31
Η int µεταβλητή a του επεξεργαστή 1, στη µεταβλητή b του επεξεργαστή που καλεί την get bsp_get(1, &a, 0, &b, sizeof(int)); Το στοιχείο x[3] του διανύσµατος double x από τον επεξεργαστή 2 στη µεταβλητή b του επεξεργαστή που κάλεσε την get bsp_get(2, &x, 3*sizeof(int), &b, sizeof(double)); Τα στοιχεία x[3], x[4], x[5] του διανύσµατος int x του επεξεργαστή 0 στις ϑέσεις y[7], y[8], y[9] του διανύσµατος y του επεξεργαστή που κάλεσε την get. bsp_put(0, &x[3], 3*sizeof(int), &y[7], 3*sizeof(int)); DRMA registration Οταν η διεργασία A εκτελεί : bsp_put(b, x, y, 0, sizeof(x)); τότε τα δεδοµένα x στη διεργασία A µεταφέρονται στα δεδοµένα y της διεργασίας B, όπου x, y είναι π.χ. ονόµατα πινάκων, µεταβλητώς ή άλλων δοµών δεδοµένων στο πρόγραµµα. Η BSPlib είναι ϐιβλιοθήκη SPMD, εποµένως τα x και y υπάρχουν σε όλες τις διεργασίες. Ολα τα x όµως ϐρίσκονται σε διαφορετικές ϑέσεις στη µνήµη κάθε επεξεργαστή (Σχ. 4.5). Οπως είδαµε, οι εντολές put και get διαχειρίζονται διευθύνσεις µνήµης. Χρειάζεται εποµένως ένας µηχανισµός (rex x y y ΜΝΗΜΗ Α ΜΝΗΜΗ Β Σχήµα 4.5: Η εικόνα της µνήµης σε διαφορετικούς επεξεργαστές gistration) µε τον οποίο το παράλληλο πρόγραµµα συσχετίζει (πληροφορεί την 32
BSPlib για) τα ονόµατα δυο δοµών δεδοµένων σε διαφορετικές διεργασίες. Ο µηχανισµός του registration επιτρέπει την επικοινωνία µεταξύ δεδοµένων σε heap (π.χ. δυναµικοί πίνακες) την επικοινωνία µεταξύ δεδοµένων σε stack (π.χ. συναρτήσεων), καθώς και τη τοπικές µεταβλητές λειτουργία σε ετερογενή περιβάλλοντα (µε διαφορετικά είδη επεξεργαστών). #include "bsp.h" void bsp_push_reg(void *ident, int size); void bsp_pop_reg(void *ident); Μια περιοχή µνήµης από size bytes που αρχίζει στη διεύθυνση ident γίνεται διαθέσιµη για DRMA επικοινωνία µε την bsp_push_reg. Η περιοχή παύει να είναι διαθέσιµη για επικοινωνία µε την bsp_put_reg. Παράδειγµα : registration Το αποτέλεσµα της result στη διεργασία i ϑα είναι η τιµή της παραµέτρου x από τη διεργασία bsp_nprocs()-i+1., όπως ϕαίνεται στο Σχ. 4.6. ΠΡΙΝ 1 2 3 4 ΜΕΤΑ 4 3 2 1 Σχήµα 4.6: Παράδειγµα registration int reverse(int x) { bsp_push_reg(&x,sizeof(int)); bsp_sync(); bsp_put(bsp_nprocs()-bsp_pid()-1,&x,&x, 0,sizeof(int)); bsp_sync(); bsp_pop_reg(&x); 33
return x; } Παράδειγµα : put Η συνάρτηση put_array υλοποιεί την ταυτόχρονη ανάθεση : i,..., xs xs i xs i π.χ. για το διάνυσµα 16 ϑέσεων κατανεµηµένο σε 4 επεξεργαστές του Σχ. 4.7 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Σχήµα 4.7: Παράδειγµα put void put_array(int *xs, int n) { int i,pid,local_idx,n_over_p= n/bsp_nprocs(); if (n % bsp_nprocs()) bsp_abort("{put_array} n=%d not divisible by p=%d", n,bsp_nprocs()); bsp_push_reg(xs,n_over_p*sizeof(int)); bsp_sync(); for(i=0;i<n_over_p;i++) { pid = xs[i]/n_over_p; local_idx = xs[i]%n_over_p; bsp_put(pid,&xs[i],xs,local_idx*sizeof(int), sizeof(int)); } bsp_sync(); bsp_pop-reg(xs); } Παράδειγµα : get Η συνάρτηση get_array υλοποιεί την ταυτόχρονη ανάθεση : i,..., xs i xs xs i π.χ. για το διάνυσµα 16 ϑέσεων κατανεµηµένο σε 4 επεξεργαστές του Σχ. 4.8 34
0 8 1 9 2 10 3 11 4 12 5 13 6 14 7 15 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15 Σχήµα 4.8: Παράδειγµα get void get_array(int *xs, int n) { int i,pid,local_idx,n_over_p=n/bsp_nprocs(); if (n % bsp_nprocs()) bsp_abort("{get_array} %d not divisable by %d", n,bsp_nprocs()); bsp_push_reg(xs,n_over_p*sizeof(int)); bsp_sync(); for(i=0;i<n_over_p;i++) { pid = xs[i]/n_over_p; local_idx = xs[i]%n_over_p; bsp_get(pid,xs,local_idx*sizeof(int),&xs[i], sizeof(int)); } bsp_sync(); bsp_pop_reg(xs); } Παράδειγµα : unbuffered get Πρόσθεση n αριθµών κατενεµηµένων σε p επεξεργαστές (n > p) int bsp_sum(int *xs, int nelem) { int *local_sums,i,j,result=0; for(j=0;j<nelem;j++) result = result + xs[j]; bsp_push_reg(&result,sizeof(int)); bsp_sync(); local_sums = calloc(bsp_nprocs(),sizeof(int)); if (local_sums==null) bsp_abort("{bsp_sum} no memory for %d int",bsp_nprocs()); for(i=0;i<bsp_nprocs();i++) bsp_hpget(i,&result,0,&local_sums[i],sizeof(int)); bsp_sync(); 35
0 1 2 3 4 5 6 7 8 9 10 11 Ε ΟΜΕΝΑ 6 15 45 ΤΟΠΙΚΗ ΠΡΟΣΘΕΣΗ 6 6 6 15 15 15 45 45 45 ΟΛΙΚΗ ΑΝΤΑΛΛΑΓΗ 66 66 66 ΤΟΠΙΚΗ ΠΡΟΣΘΕΣΗ Σχήµα 4.9: Πρόσθεση n κατανεµηµένων αριθµών result=0; for(i=0;i<bsp_nprocs();i++) result = result+ local_sums[i]; bsp_pop_reg(&result); free(local_sums); return result; } 36
Κεφάλαιο 5 Σχεδιασµός παράλληλων αλγορίθµων 5.1 Βήµατα στο σχεδιασµό παράλληλων αλγορίθµων ιαµερισµός : ανάλυση του προβλήµατος σε ελάχιστες µονάδες παράλληλου έργου (tasks) µε σκοπό τη µεγιστοποίηση της δυνατότητας για παράλληλη επεξεργασία. Επικοινωνία : καθορισµός επικοινωνιακών αναγκών ανάµεσα σε tasks. Σύνθεση : Συνδυασµός πολλών tasks σε διεργασίες µε σκοπό τη µείωση των απαιτήσεων σε επικοινωνία ή άλλο κόστος. Ανάθεση : διεργασιών σε επεξεργαστές, µε γνώµονα την αποτελεσµατικότερη επίλυση στο διαθέσιµο παράλληλο σύστηµα. ΙΑΜΕΡΙΣΜΟΣ ΕΠΙΚΟΙΝΩΝΙΑ ΣΥΝΘΕΣΗ ΑΝΑΘΕΣΗ ΠΡΟΒΛΗΜΑ TASKS ΙΕΡΓΑΣΙΕΣ ΕΠΕΞΕΡΓΑΣΤΕΣ Σχήµα 5.1: Βήµατα στο σχεδιασµό παράλληλων αλγορίθµων 37
5.2 ιαµερισµός : καθορισµός tasks Η πρώτη και ϐασική ενέργεια στο σχεδιασµό παράλληλων αλγορίθµων είναι καθορισµός των ελάχιστων µονάδων παράλληλου έργου, tasks, που συνθέτουν τον παράλληλο υπολογισµό. Για παράδειγµα αν ϑελουµε να υπολογίσουµε το άθροισµα N s f x i i µε x N και f συνάρτηση στο, τότε κάθε task i είναι ουσιαστικά ο υπολογισµός της f x i. Ισχύουν τα παρακάτω : Οποιοσδήποτε παράλληλος υπολογισµός εκφράζεται από δύο ή περισσότερα tasks που εκτελούνται ταυτόχρονα. Κάθε task αποτελείται από σειριακό κώδικα (π.χ. υπολογισµός της f ) και τοπική µνήµη (x i ). Η ανάθεση tasks σε επεξεργαστές µπορεί να γίνει µε πολλούς τρόπους συνήθως πολλά tasks σε κάθε επεξεργαστή. ύο tasks µπορεί να συνδέονται µε ένα δίαυλο όταν χρειάζεται να ανταλλάξουν µηνύµατα (δεδοµένα). Στο παράδειγµα µας, όταν τα tasks υπολογίσουν τη συνάρτηση για τα δεδοµένα τους, πρέπει να επικοινωνήσουν µεταξύ τους για το σχηµατισµό του αθροίσµατος. Οι επιπτώσεις της διατύπωσης παράλληλων υπολογισµών µέσω των tasks έχει τις παρακάτω επιπτώσεις : Η σηµειολογία ενός παράλληλου προγράµµατος είναι ανεξάρτητη από ανάθεση σε επεξεργαστές. Ο σχεδιασµός παράλληλων προγραµµάτων, γίνεται ανεξάρτητα από τον αριθµό των επεξεργαστών που τελικά ϑα χρησιµοποιήσουµε. Η αποτελεσµατικότητα όµως εξαρτάται από την ανάθεση των tasks σε επεξεργαστές, λόγω κατανοµής του υπολογιστικού ϕορτίου, δυνατότητας για παράλληλη εκτέλεση και αναγκών επικοινωνίας. Οι δίαυλοι δεν αντιστοιχούν κατ ανάγκη στην υπάρχουσα συνδεσµολογία επεξεργαστών. ύο επικοινωνούντα tasks µπορεί να ανατεθούν σε : ένα επεξεργαστή δεν υπάρχει επικοινωνία σε δυο άµεσα συνδεδεµένους επεξεργαστές άµεση επικοινωνία σε δυο επεξεργαστές που δεν συνδέονται άµεσα ανάγκη για δια- ϐίβαση πολλαπλών µηνυµάτων. 38
Οδηγίες σχεδιασµού για τη ϕάση του διαµερισµού : Πολύ περισσότερα tasks από ότι επεξεργαστές. Αποφυγή «περιτών» υπολογισµών ή δεδοµένων. Tasks περίπου του ίδιου µεγέθους (υπολογισµοί/δεδοµένα). Ο αριθµός των tasks και όχι το µέγεθος τους, πρέπει να µεγαλώνει όταν αυξάνει το µέγεθος του προβλήµατος. 5.2.1 Παράδειγµα : εξίσωση Laplace σε µια διάσταση Εστω η εξίσωση Laplace σε µια διάσταση y t, a t b, (5.1) µε συνοριακές συνθήκες y a α, y b ϐ. Η λύση της (5.1) ϑα µπο- ϱούσε να είναι για παράδειγµα η κατανοµή της ϑερµοκρασίας στο εσωτερικό αγώγιµης ϱάβδου που υπόκειται σε σταθερές ϑερµοκρασίες α και ϐ στα άκρα της. Για την αριθµητική επίλυση (5.1) αντικαθιστούµε το συνεχές πρόβληµα µε ένα διακριτό και Ϲητάµε να προσδιορίσουµε τις τιµές της y σε n ισαπέχοντα διακριτά σηµεία στο εσωτερικό της ϱάβδου. Η προσέγγιση της (5.1) µε τη µέθοδο των πεπερασµένων διαφορών δίνει : y i y i y i, i,..., n, (5.2) µε y α, y n ϐ. Οι εξισώσεις (5.2) µαζί µε τις συνθήκες στα άκρα, είναι ουσιαστικά ένα τριδιαγώνιο γραµµικό σύστηµα n εξισώσεων µε αγνώστους τα y i που επιλύουµε συνήθως µε κάποια επαναληπτική µέθοδο, εδώ την µέθοδο Jacobi k y i k yi k y i, i,..., n 1 2 3 n y y y y 1 2 3 n Σχήµα 5.2: Η εξίσωση Laplace σε µια διάσταση 39
Καθορισµός n tasks, ένα για κάθε y i Πρόγραµµα για task i, i,..., n y i for k,... if i >, put(i if i < n, put(i sync(); y i = (left + right)/2; end, y i, right, 0, sizeof(...)); end, y i, left, 0, sizeof(...)); end 5.3 Επικοινωνία Οδηγίες σχεδιασµού για τη ϕάση της επικοινωνίας. Η επικοινωνία πρέπει να : είναι οµοιόµορφη σε συχνότητα και όγκο ανάµεσα στα tasks είναι τοπική (ανάµεσα σε δυο tasks αν είναι δυνατό, είναι ταυτόχρονη επικαλύπτεται από υπολογισµούς, αν είναι δυνατό µην εµποδίζει την ταυτόχρονη εκτέλεση των tasks Πολλές ϕορές οι επικοινωνιακές ανάγκες ενός αλγορίθµου δεν καλύπτονται από τοπική µόνο ανταλλαγή δεδοµένων : Συλλογική επικοινωνία όταν συµ- µετέχουν πολλοί επεξεργαστές ταυτόχρονα, µε κοινό στόχο. Συνηθέστερες µορφές : broadcast ένας σε όλους reduction όλοι σε ένα, και αρκετές άλλες... 5.3.1 Broadcast Ενας πηγαίος κόµβος (επεξεργαστής) στέλνει ένα µήµυµα στους υπόλοιπους p Τα µηνύµατα µπορούν να σταλούν σειριακά Αλλά συνήθως πιο αποτελεσµατικό να εκµεταλλευτούµε την παράλληλη συνδεσµολογία και να σταλούν (σε µεγάλο ϐαθµό) παράλληλα. 40
Στο Σχ. 5.3 ϕαίνεται πως υλοποιείται η επικοινωνία τύπου broadcast ανάλογα µε τη συνδεσµολογία των επεξεργαστών. Στην πράξη, η συνδεσµολογία των επεξεργαστών λαµβάνεται υπόψη από τους σχεδιαστές ϐιβλιοθηκών πα- ϱάλληλης επεξεργασίας και όχι σε επίπεδο προγραµµατισµού εφαρµογών. Βιβλιοθήκες όπως η BSPlib ή το MPI παρέχουν συναρτήσεις για αποτελεσµατικό broadcasting χωρίς να απαιτείται γνώση της συνδεσµολογίας από τον προγραµµατιστή. 4 3 2 1 2 3 4 4 4 4 3 3 3 3 3 3 2 1 2 2 2 4 4 4 4 3 3 1 Σχήµα 5.3: Broadcast σε διάφορες συνδεσµολογίες 5.3.2 Reduction εδοµένα απο p κόµβους συνδυάζονται εφαρµόζοντας κάποια προσεται- ϱιστική πράξη (π.χ. πρόσθεση, πολ/σµός, max, min, λογικά OR και AND) και δίνουν το αποτέλεσµα. Αντίθετα απο broadcast έχουµε ϱοή δεδοµένων ΠΡΟΣ ένα κόµβο. Σε κάθε κόµβο τα εισερχόµενα δεδοµένα συνδυάζονται µε τα τοπικά προτού προωθηθούν παραπέρα. Το τελικό αποτέλεσµα καταλήγει σε ένα κόµβο. Αν χρειάζεται, ακολου- ϑείται από broadcast Στο Σχ. 5.4 ϕαίνεται πως υλοποιείται η επικοινωνία τύπου reduction ανάλογα µε τη συνδεσµολογία των επεξεργαστών. Οπως και µε την broadcast, σπάνια η συνδεσµολογία µας απασχολεί στον προγραµµατισµό εφαρµογών όπου απαιτείται reduction, αφού η λειτουργία αυτή παρέχεται από κατάλληλες συναρτήσεις των παράλληλων ϐιβλιοθηκών. 41
1 2 3 4 2 1 1 1 1 1 1 1 2 2 2 2 3 4 3 2 2 1 1 1 1 1 1 3 Σχήµα 5.4: Reduction σε διάφορες συνδεσµολογίες 5.4 Σύνθεση Μεγάλες διεργασίες : λιγότερη επικοινωνία, αλλά και λιγότερη παραλληλία. Tasks που δεν µπορούν να εκτελεστούν παράλληλα, κατάλληλα να συνδυαστούν σε µια διεργασία. Η επικοινωνία µπορεί συχνά να αποφευχθεί µε επανάληψη υπολογισµών σε πολλαπλές διεργασίες. Η επικοινωνία ανάλογη µε την επιφάνεια των δεδοµένων, ενώ οι υπολογισµοί µε τον όγκο. 5.4.1 Παράδειγµα σύνθεσης : εξίσωση Laplace Καθορισµός p tasks, καθένα µε n/p κόµβους y i (Σχ. 5.5) Πρόγραµµα για επεξεργαστή j, j,..., p y l,..., y h for k,... if j >, put(j if j < p, put(j sync(); y l = (left + y l )/2; y h = (right + y h )/2;, y l, right, 0, sizeof(...)); end, y h, left, 0, sizeof(...)); end 42
for i=l :h y i y i y i / end y y end y y l 1 l y y h h+1 Σχήµα 5.5: Σύνθεση : εξίσωση Laplace 5.5 Ανάθεση 2 στρατηγικές : διεργασίες που µπορούν να εκτελεστούν παράλληλα, σε διαφορετικούς επεξεργαστές. ιεργασίες που επικοινωνούν συχνά, στον ίδιο επεξεργαστή. ΠΡΟΒΛΗΜΑ : Συχνά, οι παραπάνω στρατηγικές είναι ασυµβίβαστες. Η εύρεση ϐέλτιστης ανάθεσης είναι N-P ανοικτό πρόβληµα (heuristics). υναµικές και στατικές στρατηγικές. 43
Κεφάλαιο 6 Κόστος παράλληλων αλγορίθµων 6.1 Απόδοση παράλληλων προγραµµάτων T T p χρόνος εκτέλεσης σε ένα επεξεργαστή «παράλληλος» χρόνος εκτέλεσης σε p επεξεργαστές Ορισµός Speedup: S p T /T p (Πόσο πιο γρήγορα εκτελείται ο αλγό- ϱιθµος σε p επεξεργαστές). Ορισµός Αποτελεσµατικότητας : E p T / pt p Εποµένως : E p S p /p και S p pe p Ψευδοθεώρηµα : S p p και E p Αλλά διάφορες ανωµαλίες στο S p µπορούν να παρατηρηθούν (π.χ. cache) 6.2 Ο νόµος του Amdahl Εστω ότι ένας αλγόριθµος περιλαµβάνει ένα τµήµα που δεν µπορεί να εκτελεστεί παράλληλα, παρά µόνο σειριακά. Ακόµα και αν ο υπόλοιπος αλγόριθµος εκτελείται πλήρως παράλληλα (χωρίς ανάγκη επικοινωνίας), το σειριακό µέρος του καθορίζει ένα άνω ϕράγµα για το speedup που δεν µπορούµε να το υπερ- ϐούµε όσο και αν αυξήσουµε την παραλληλία (τον αριθµό των επεξεργαστών που δουλεύουν στο παράλληλο τµήµα του αλγορίθµου). Υποθέσεις Σειριακή εκτέλεση s, s (Το ποσοστό του χρόνου T που αντιστοιχεί σε κώδικα που δεν µπορεί να εκτελεστεί παράλληλα.) 44
Παράλληλη εκτέλεση σε p επεξεργαστές s Συµπεράσµατα T p st s T /p S p p/ sp s E p / sp s Εποµένως : S p /s και E p καθώς p Παράδειγµα : αν s., τότε S p για κάθε p Είναι η παράλληλη επεξεργασία χαµένη υπόθεση? 1024 S_p = 1/(s+(1-s)/p) S_p 512 0 0.01 0.02 0.03 0.04 s Σχήµα 6.1: Ο νόµος του Amdahl Σύµφωνα µε το νόµο του Amdahl η κλιµάκωση της απόδοσης ενός πα- ϱάλληλου αλγορίθµου µε αύξηση του αριθµού των επεξεργαστών περιορίζεται από τους υπολογισµούς που εκτελούνται σειριακά. Αλλά : Ο ν. Amdahl υποθέτει σταθερό µέγεθος του προβλήµατος, δηλ. ότι το σειριακό ποσοστό s είναι ανεξάρτητο του µεγέθους τους προβλήµατος, πράγµα που σπάνια επαληθεύεται στην πράξη Μεγαλύτεροι υπολογιστές (µεγαλύτερο p) χρησιµοποιούνται για να επιλυθούν µεγαλύτερα προβλήµατα, και το s συνήθως µειώνεται µε την αύξηση του µεγέθους του προβλήµατος (π.χ. εσωτερικό γινόµενο) 45
Το µοντέλο του Gustafson (Σχ. 6.2): s το σειριακό ποσοστό του T p για επίλυση µεγάλου προβλήµατος. Ο (προβλεπόµενος) σειριακός χρόνος για την επίλυση του ίδιου προβλήµατος είναι : T s T p p s T p Το προβλεπόµενο speedup: S p s s p 1024 Scaled S_p 512 Scaled S_p = s +(1-s )p$ 0 0 0.01 0.02 0.03 0.04 s Σχήµα 6.2: Το µοντέλο του Gustafson 6.3 Μοντέλο κόστους BSP Η κοστολόγηση σειριακών αλγορίθµων γίνεται µε ϐάση τους υπολογισµούς που εκτελούν. Για την αξιολόγηση σειριακών αλγορίθµων αρκεί να µετρήσουµε τον αριθµό πράξεων που εκτελούνται σαν συνάρτηση του µεγέθους του προβλήµατος. Για αριθνµητικούς αλγορίθµους µετράµε συνήθως τον αριθµό πράξεων κινητής υποδιαστολής (flop). Η κοστολόγηση παράλληλων αλγορίθµων είναι γενικά δύσκολη υπόθεση καθώς εµπλέκονται επιπλέον παράγοντες, όπως είναι η επικοινωνία και ο συγχρονισµός. Η συνάρτηση κόστους επίσης εξαρτάται εκτός από το µέγεθος του προβλήµατος και από τον αριθµό των επεξεργαστών που χρησιµοποιεί ο παράλληλος αλγόριθµος. Η αξιολόγηση των παράλληλων αλγορίθµων γίνεται ευκολότερη αν τους εκφράσουµε σε σχέση µε κάποιο µοντέλο παράλληλου υπολογισµού όπως το µοντέλο BSP. 46
Για την αξιολόγηση αλγορίθµων BSP, χρησιµοποιούµε 4 µόνο επιπλέον παραµέτρους από ότι στη σειριακή επεξεργασία (κοινή παράµετρος είναι το µέγεθος του προβλήµατος N). Οι παράµετροι BSP εξαρτώνται από το είδος των επεξεργαστών και την αρχιτεκτονική του παράλληλου υπολογιστικού συστήµατος. Αυτές είναι : s η ταχύτητα υπολογισµού του επεξεργαστή εκφρασµέη σε flop/s p ο αριθµός των επεξεργαστών l το κόστος ενός συγχρονισµού ϕράγµατος σε flop. g ο αριθµός flop/word που χρειάζονται όλοι οι επεξεργαστές για να επικοινωνήσουν ταυτόχρονα. Είναι χαρακτηριστικό ότι το µοντέλο BSP εκφράζει το κόστος τις επικοινωνίας και του συγχρονισµού όχι σε χρόνο, αλλά σε ισοδύναµο αριθµό flop που ϑα έκανε ο υπολογιστής κατά τη διάρκεια τους. Χρησιµοποιώντας τον αριθµό των flop και την παράµετρο s µπορούµε να υπολογίσουµε τον υπολογιστικό χρόνο όπου τον χρειαζόµαστε. Πως µπορούµε να εκφράσουµε το speedup ενός παράλληλου αλγορίθµου, όταν έχουµε στη διάθεση µας µόνο µετρήσεις flop και δεν γνωρίζουµε την παράµετρο s; Η παράµετρος g αντιστοιχεί ουσιαστικά στη συχνότητα πρόσβασης µητοπικής µνήµης. Ενα πακέτο δεδοµένων είναι ένας ακέραιος ή ένας πραγ- µατικός αριθµός (µια λέξη). Ορίζουµε σαν σχέση h το εξής πρόβληµα routing: κάθε επεξεργαστής στέλνει το πολύ h πακέτα σε διάφορους άλλους επεξεργαστές του δικτύου του και λαµβάνει το πολύ h πακέτα από τους άλλους. Αν έχουµε συνολικά p επεξεργαστές, µια κατάσταση επικοινωνίας εκφράζεται από ένα πίνακα H, p p. Το στοιχείο h ij αντιστοιχεί στον αριθµό των πακέτων που ϕεύγουν από τον επεξεργαστή i µε προορισµό τον επεξεργαστή j. Η σχέση h είναι : h h in, h out όπου και h in i h out i p j p j h ij, i,,... p h ji, i,,... p Το κόστος c ένος υπερβήµατος BSP στο οποίο ο επεξεργαστής i εκτελεί w i 47
w w w σχέση h barrier latency l Σχήµα 6.3: Κόστος υπερβήµατος και οι επικοινωνίες καθορίζουν µια σχέση h (Σχ. 6.3) είναι : c w i Υπολογισµός h g l Επικοινωνία όπου h h i h i µέγιστη ποσότητα δεδοµένων µέσα ή έξω από τη διεργασία i Κατά συνέπεια, το κόστος πολλαπλών υπερβηµάτων C (εκφρασµένο σε flop) είναι : C υπολογισµός επικοινωνία συγχρονισµός α ϐg γl όπου α, ϐ και γ κόστος που εξαρτάται από την παράλληλη εφαρµογή. Τα µοντέλα κόστους µπορούν να χρησιµοποιηθούν : στο σχεδιασµό προγραµµάτων BSP για να προβλέψουν το χρόνο εκτέλεσης ενός αλγορίθµου σε διαφορετικές παράλληλες αρχιτεκτονικές, ή για διαφορετικό αριθµό επεξεργαστών. Οι παράµετροι s, g, l είναι µετρήσιµα µεγέθη που χαρακτηρίζουν ένα παράλληλο υπολογιστικό σύστηµα (Πιν. 6.1, Πιν. 6.2) 48
Machine s p l l/s g g/s flops µs flops/word µs/word Origin 2000 101 2 4 804 1789 7.9 17.9 8.26 10.24 0.08 0.10 8 3914 39.8 15.10 0.15 16 15961 158.5 44.9 0.45 32 62 39057 138836 386.6 1374.2 66.7 121.2 0.66 1.20 PowerChallenge 74 2 1132 15.3 10.2 0.14 4 1902 25.7 9.3 0.13 Cray T3E 46.7 2 269 5.7 2.14 0.05 4 357 7.6 1.77 0.04 8 506 10.8 1.64 0.03 16 751 16.0 1.66 0.04 Sp2 switch 26 2 1903 73.2 7.8 0.30 4 3583 137.8 8.0 0.31 8 5412 208.2 11.4 0.43 Cray T3D 12 2 5.6 0.3 0.02 8 64 175 148 14.4 12.3 0.8 1.7 0.07 0.14 256 387 32.1 2.4 0.20 Πίνακας 6.1: Παράµετροι BSP - υπερυπολογιστές Machine s p l l/s g g/s flops µs flops/word µs/word Sp2 switch 26 2 1903 73.2 7.8 0.30 4 3583 137.8 8.0 0.31 8 5412 208.2 11.4 0.43 LPAC Alpha farm 10 2 17202 1703.1 81.1 8.0 3 4 34356 47109 3401.6 4664.3 83.0 81.3 8.2 8.1 Pentium NOW 266MHz, 64Mb 61 2 4 52745 139981 870.4 2309.9 484.5 1128.5 8.00 18.62 10Mbit shared enet 8 826054 13631.3 2436.3 32.91 Pentium II NOW 88 2 13683 155.5 37.8 0.43 400MHz, 128Mb 4 27583 313.4 39.6 0.45 100Mbit switched enet 8 38788 440.8 38.7 0.44 Pentium II Kernel-NOW 88 2 5654 64.2 33.5 0.38 400MHz, 128Mb 4 11759 133.6 31.5 0.36 100Mbit switched enet 8 18347 208.5 30.9 0.35 Πίνακας 6.2: Παράµετροι BSP - clusters 49
6.4 Σχεδιασµός προγραµµάτων BSP Οπως ϕαίνεται από το µοντέλο κόστους, ένα αποτελεσµατικός αλγόριθµος BSP πρέπει να : εξισοροπεί ανάµεσα στις παράλληλες διεργασίες τους υπολογισµούς κά- ϑε υπερβήµατος, αφού ο υπολογιστικός χρόνος για κάθε υπερβήµα είναι ο µέγιστος των διεργασιών και ο συγχρονισµός στο ϕράγµα πρέπει να περιµένει την αργότερη διεργασία εξισοροπεί την επικοινωνία ανάµεσα σε διεργασίες, καθώς το h είναι η µέγιστη ποσότητα δεδοµένων σε µια όλοι-προς-ένα και ένας-προς-όλους επικοινωνία και ελαχιστοποιεί τον αριθµό των υπερβηµάτων, που καθορίζουν πόσες ϕο- ϱές η παράµετρος l εµφανίζεται στο τελικό κόστος. 6.4.1 Παράδειγµα : αλγόριθµος broadcast Αναµετάδοση ένος διανύσµατος N στοιχείων από ένα επεξεργαστή σε όλους τους άλλους. Broadcast σε µια ϕάση Ο επεξεργαστής που έχει αρχικά το διάνυσµα στέλνει p µηνύµατα µεγέθους N σε όλους σε ένα µόνο υπερβήµα (Σχ. 6.4) Υπολογιστικό κόστος : C l png Broadcast σε δέντρο Λογαριθµικός αριθµός υπερβηµάτων. Κάθε διεργασία µεταδίδει το πολύ ένα µήνυµα µεγέθους N σε κάποια άλλη (Σχ. 6.5) Υπολογιστικό κόστος : C p l p Ng Broadcast σε δυο ϕάσεις Στη πρώτη ϕάση (υπερβήµα) ο επεξεργαστής µοιράζει p διαφορετικά υποδιανύσµατα µήκους N/p σε όλους τους άλλους. Στη δεύτερη ϕάση κάθε επεξεργστής στέλνει το υποδιάνυσµα που έλαβε στη ϕάση 1, σε όλους τους άλλους (Σχ. 6.6) Υπολογιστικό κόστος : C l N pg p l N pg l Ng p 50