Δίκτυα Ακτινικής Βάσ ης σ ε Σώματα Δεδομένων Μεγάλου Ογκου σ ε SIMD Υπολογισ τικά Συσ τήματα Η Διπλωματική Εργασ ία παρουσ ιάσ τηκε ενώπιον του Διδακτικού Προσ ωπικού του Πανεπισ τημίου Αιγαίου Σε Μερική Εκπλήρωσ η των Απαιτήσ εων για το Δίπλωμα του Μηχανικού Πληροφοριακών και Επικοινωνιακών Συσ τημάτων του ΠΑΠΑΔΟΠΟΥΛΟΥ ΣΠΥΡΙΔΩΝ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2011
Η ΤΡΙΜΕΛΗΣ ΕΠΙΤΡΟΠΗ ΔΙΔΑΣΚΟΝΤΩΝ ΕΓΚΡΙΝΕΙ ΤΗ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΤΟΥ ΠΑΠΑΔΟΠΟΥΛΟΥ ΣΠΥΡΙΔΩΝ ΜΑΡΑΓΚΟΥΔΑΚΗΣ ΕΜΜΑΝΟΥΗΛ, Επιβλέπων 24/06/2011 Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συσ τημάτων ΜΠΟΥΚΑΣ ΛΑΜΠΡΟΣ, Επιβλέπων Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συσ τημάτων ΤΣΟΚΑΡΟΣ ΑΝΤΩΝΙΟΣ, Μέλος Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συσ τημάτων ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2011 ii
ΠΕΡΙΛΗΨΗ Ενα από τα σ ημαντικότερα προβλήματα της εξόρυξης γνώσ ης από σ ύνθετα, πολυδιάσ τατα δεδομένα μεγάλου όγκου είναι η αδυναμία πολλών αλγορίθμων μάθησ ης να υποσ τηρίξουν υπολογισ τικά μοντέλα που να αφομοιώνουν αποτελεσ ματικά όλα τα δεδομένα εισ όδου. Συγκεκριμένα, ενώ υπάρχουν αλγόριθμοι ταξινόμησ ης με ιδιαίτερα σ ημαντικά αποτελέσ ματα όπως τα δίκτυα ακτινικής βάσ ης (Radial Basis Function Networks), σ ε περιπτώσ εις όπου υπάρχει πληθώρα διαθέσ ιμων δεδομένων εκπαίδευσ ης και ιδιαίτερα μεγάλος αριθμός ιδιοτήτων αναπαράσ τασ ης τους, οι αλγόριθμοι αυτοί παρουσ ιάζουν σ αφή προβλήματα εκτέλεσ ης. Η πλέον σ υνήθης πρακτική είναι η μείωσ η της διασ τατικότητας των δεδομένων, η οποία όμως επιφέρει και την ανάλογη μείωσ η της ακρίβειας και της απόδοσ ης των αλγορίθμων. Με την ανάπτυξη του υλικού των καρτών γραφικών και λογισ μικού που επιτρέπει την εκτέλεσ η πολύπλοκων πράξεων όχι σ τον επεξεργασ τή του Ηλεκτρονικού Υπολογισ τή αλλά σ τους επεξεργασ τές της κάρτας γραφικών, η Διπλωματική αυτή σ τοχεύει σ τον να δημιουργήσ ει μια νέα μορφή του αλγόριθμου RBF που να μπορεί να εκτελεσ θεί σ ε μεγάλου όγκου δεδομένα, με υψηλό βαθμό διασ τατικότητας. Η μελέτη θα πλαισ ιωθεί τόσ ο από την υλοποίησ η όσ ο και από μια σ ειρά πειραματικών μετρήσ εων και αξιολογήσ εων. ΠΑΠΑΔΟΠΟΥΛΟΣ ΣΠΥΡΙΔΩΝ Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συσ τημάτων ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ 2011 iii
ABSTRACT The incapability of many Machine Learning Algorithms to support computational models which have the ability to use eciently all the input data is one of the most serious problems in the extraction of knowledge from complex, multidimensional, large scale data. More specically, while there are classication algorithms with important results, such as Radial Basis Function Networks. In cases, where there are plenty of available training data and a large number of features used for their representation, these algorithms present clear execution problems. The most common practice is the data dimensionality reduction. These practices negatively aect the accuracy and the precision of the algorithms. The improvement in the graphics card hardware allows the execution of complex operations not in the CPU, but in processors of the graphics card. This Diploma Thesis aims to implement a new version of the RBFN Algorithm which has the ability to be executed in high-dimensional, large scale data. This Thesis includes an implementation of the algorithm, experimental measures and evaluation. PAPADOPOULOS SPYRIDON Department of Information and Communication Systems Engineering UNIVERSITY OF THE AEGEAN 2011 iv
Περιεχόμενα 1 Αριθμητική Κινητής Υποδιασ τολής 1 1.1 Εισ αγωγή.......................................... 1 1.2 Σφάλμα Στρογγυλοποίησ ης................................. 1 1.3 Αναπαράσ τασ η Πραγματικών Αριθμών........................... 2 1.4 Σχετικό Σφάλμα και Ulps................................. 3 1.5 Guard Digits........................................ 4 1.6 Ακύρωσ η.......................................... 5 1.7 Πράξεις Επακριβούς Στρογγυλοποίησ ης.......................... 6 1.8 Το Πρότυπο IEEE..................................... 7 1.8.1 Εισ αγωγή...................................... 7 1.8.2 Μορφή και Πράξεις................................. 7 1.8.3 Ειδικές Ποσ ότητες................................. 11 1.8.4 Μέθοδοι Στρογγυλοποίησ ης............................ 16 1.8.5 Διαφοροποιήσ εις των υλοποιήσ εων σ το IEEE 754................ 17 1.8.6 Παρούσ ες υλοποιήσ εις σ το IEEE 754....................... 18 1.8.7 Το Πρότυπο IEEE-754 σ το CUDA........................ 18 2 Αρχιτεκτονική 21 2.1 Ταξινόμησ η κατά Flynn................................... 21 2.2 Η Αξιοποίησ η της SIMD αρχιτεκτονικής.......................... 23 2.2.1 Ισ τορικά Στοιχεία.................................. 23 2.2.2 Πλεονεκτήματα................................... 24 2.2.3 Μειονεκτήματα................................... 24 2.2.4 Εξέλιξη της αρχιτεκτονικής SIMD......................... 24 2.3 Η Αρχιτεκτονική CUDA.................................. 25 2.3.1 Δομή Υλικού.................................... 25 2.3.2 Εκτέλεσ η Νημάτων................................. 26 2.3.3 Διαβαθμίσ εις Μνήμης................................ 28 3 Μοντέλο Προγραμματισ μού 31 3.1 Εισ αγωγή.......................................... 31 3.2 Τα χαρακτηρισ τικά της CUDA C............................. 31 3.2.1 Αναγνωρισ τικά Συναρτήσ εων........................... 32 3.2.2 Αναγνωρισ τικά Μεταβλητών............................ 32 3.2.3 Δεσ μευμένοι Τύποι Διανυσ μάτων......................... 32 3.2.4 Δεσ μευμένες Μεταβλητές............................. 32 3.2.5 Συντακτικό Διαμόρφωσ ης της Εκτέλεσ ης..................... 33 v
3.3 Η Βιβλιοθήκη Runtime................................... 34 3.3.1 Τμήμα Runtime Βιβλιοθήκης για τη CPU..................... 34 3.3.2 Τμήμα Runtime Βιβλιοθήκης για τη GPU.................... 34 3.4 Βοηθητικές Υλοποιήσ εις.................................. 35 3.4.1 Πράξεις Διανυσ μάτων............................... 35 4 Δίκτυα Συναρτήσ εων Ακτινικής Βάσ ης 41 4.1 Εισ αγωγή.......................................... 41 4.2 Το Πρόβλημα του XOR.................................. 43 4.3 Εκπαίδευσ η των Δικτύων Ακτινικής Βάσ ης........................ 44 4.4 Ταξινόμησ η......................................... 46 4.4.1 Περιγραφή Διαδικασ ίας............................... 46 4.4.2 Αξιολόγησ η της Εκπαίδευσ ης........................... 47 5 Υλοποιήσ εις 49 5.1 Εισ αγωγή.......................................... 49 5.2 Σχετική Δρασ τηριότητα.................................. 49 5.3 Εργαλεία........................................... 50 5.4 Μοντελοποίησ η....................................... 50 5.4.1 Περιγραφή Σειριακού Υπολογισ μού του πίνακα Φ................. 51 5.4.2 Περιγραφή Παράλληλου Υπολογισ μού του πίνακα Φ............... 51 5.4.3 Επίλυσ η του Συσ τήματος Φ w = y........................ 52 5.4.4 Βοηθητικές Υλοποιήσ εις.............................. 55 6 Διεξαγωγή Πειραμάτων 57 6.1 Σχεδιασ μός του Συνόλου Δεδομένων........................... 57 6.2 Αποτελέσ ματα Εκπαίδευσ ης................................ 58 6.3 Αποτελέσ ματα Δοκιμής................................... 61 6.4 Συμπεράσ ματα........................................ 63 7 Μελλοντική Εργασ ία 65 vi
Κατάλογος Πινάκων 1.1 Παράμετροι μορφών σ το IEEE 754............................ 8 1.2 Ειδικές Τιμές σ το πρότυπο IEEE............................. 12 1.3 Πράξεις οι οποίες παράγουν NaN............................. 12 2.1 Συνοπτική παρουσ ίασ η των μνημών............................ 29 4.1 Συναρτήσ εις Ακτινικής Βάσ ης............................... 42 4.2 Αποτελέσ ματα σ υναρτήσ εων ακτινικής βάσ ης....................... 44 5.1 Τεχνικά Χαρακτηρισ τικά.................................. 50 5.2 Τεχνικά Χαρακτηρισ τικά GPU............................... 50 6.1 Προδιαγραφές Δειγμάτων.................................. 58 6.2 Χρόνοι Εκτέλεσ ης Σειριακού Δικτύου RBF........................ 59 6.3 Χρόνοι Εκτέλεσ ης Παράλληλου Δικτύου RBF...................... 59 6.4 Επιτάχυνσ η των Υλοποιήσ εων............................... 60 6.6 Χρόνος Εκτέλεσ ης Παράλληλου Δικτύου RBF για πραγματικά δεδομένα........ 61 6.5 Χρόνος Εκτέλεσ ης Σειριακού Δικτύου RBF για πραγματικά δεδομένα......... 61 6.7 Επιτάχυνσ η των Υλοποιήσ εων για πραγματικά δεδομένα................. 61 6.8 Confusion Matrix του Συνολου Δεδομένων 1...................... 62 6.9 Confusion Matrix του Συνολου Δεδομένων 2...................... 62 6.10 Confusion Matrix του Συνολου Δεδομένων 3...................... 62 6.11 Confusion Matrix του Συνολου Δεδομένων 4...................... 62 6.12 Confusion Matrix των Πραγματικών Δεδομένων.................... 63 vii
viii
Κατάλογος Σχημάτων 1.1 Κανονικοποιημένοι αριθμοί όταν β=2, p=3, e min = 1 και e max = 2......... 2 1.2 Υποβάθμισ η σ το μηδέν σ ε σ ύγκρισ η με την Σταδιακή Υποχείλισ η............ 16 2.1 Η σ χηματική ταξινόμησ η κατά Flynn........................... 21 2.2 Σχηματική Αναπαράσ τασ η αρχιτεκτονικής SISD..................... 21 2.3 Σχηματική Αναπαράσ τασ η αρχιτεκτονικής SIMD..................... 22 2.4 Σχηματική Αναπαράσ τασ η αρχιτεκτονικής MISD..................... 22 2.5 Σχηματική Αναπαράσ τασ η αρχιτεκτονικής MIMD..................... 23 2.6 Η διαφορά της GPU από την CPU σ την κατασ κευή ώσ τε να είναι προσ ανατολισ μένη σ την επεξεργασ ία δεδομένων................................ 25 2.7 Η σ χηματική αναπαράσ τασ η του Streaming Multiprocessor............... 26 2.8 Η ιεράρχησ η των νημάτων................................. 27 2.9 Κατανομή των νημάτων................................... 27 2.10 Ανάθεσ η και διαχωρισ μός του block............................ 28 3.1 Η αλληλουχία του λογισ μικού του CUDA......................... 31 3.2 Σταδιακή εκτέλεσ η της τεχνικής των μειώσ εων...................... 40 4.1 Τα επίπεδα του RBF Δικτύου............................... 42 4.2 Γραφική απεικόνισ η των προτύπων............................. 43 4.3 Μετασ χηματισ μένα πρότυπα ως προς τις σ υναρτήσ εις................... 44 5.1 Παράλληλος υπολογισ μός των παραγόντων........................ 52 6.1 Γραφική Αναπαράσ τασ η Συνολικών Χρόνων Εκτέλεσ ης................. 60 ix
x
Λίστα Αλγορίθμων 3.1 Υλοποίησ η Βαθμωτής Πράξης για CUDA......................... 35 3.2 Υλοποίησ η Πράξης μεταξύ διανυσ μάτων για CUDA................... 36 3.3 Υλοποίησ η Μείωσ ης σ ε διάνυσ μα για CUDA....................... 37 3.4 Υλοποίησ η Μείωσ ης σ ε διάνυσ μα για CUDA(Συνέχεια)................. 38 5.1 Αλγόριθμος υπολογισ μού του πίνακα Φ.......................... 51 5.2 Σειριακός Αλγόριθμος Gauss Elimination......................... 54 5.3 Παράλληλος Αλγόριθμος Gauss Elimination....................... 54 xi
Κεφάλαιο 1 Αριθμητική Κινητής Υποδιασ τολής 1.1 Εισ αγωγή Το κεφάλαιο αυτό αναλύει τα μέρη της Αριθμητικής Κινητής Υποδιασ τολής τα οποία σ χετίζονται με τον σ χεδιασ μό υπολογισ τικών σ υσ τημάτων. Το πρώτο μέρος αναφέρεται σ τα ζητήματα της χρήσ ης διαφορετικών σ τρατηγικών σ τρογγυλοποίησ ης για τις βασ ικές πράξεις της πρόσ θεσ ης, της αφαίρεσ ης, του πολλαπλασ ιασ μού και της διαίρεσ ης. Επιπλέον περιέχει βασ ικές πληροφορίες με της δύο μεθόδους μέτρησ ης του σ φάλματος σ τρογγυλοποίησ ης (ulps και Σχετικό Σφάλμα). Το δεύτερο μέρος αναλύει το πρότυπο ΙΕΕΕ κινητής υποδιασ τολής το οποίο είναι ευρέως χρησ ιμοποιούμενο από τους κατασ κευασ τές εμπορικού hardware. Στο κεφάλαιο αυτό εμπεριέχονται και οι μέθοδοι σ τρογγυλοποίησ ης του προτύπου IEEE για τις βασ ικές πράξεις. Στο τρίτο και τελευταίο μέρος αναλύεται η σ ύνδεσ η ανάμεσ α σ την Αριθμητική Κινητής Υποδιασ τολής και σ τους διάφορους τύπους υπολογισ τικών σ υσ τημάτων. 1.2 Σφάλμα Στρογγυλοποίησ ης Η σ υμπίεσ η άπειρων πραγματικών αριθμών σ ε ένα πεπερασ μένο πλήθος από bits απαιτεί μία προσ εγγισ τική αναπαράσ τασ η. Παρά την ύπαρξη άπειρων ακεραίων, το αποτέλεσ μα των υπολογισ μών μεταξύ ακεραίων μπορεί να αποθηκευτεί σ ε 32 ή 64 bits. Αντιθέτως, δεδομένου οποιουδήποτε προκαθορισ μένου πλήθους από bits, οι περισ σ ότεροι υπολογισ μοί με πραγματικούς αριθμούς παράγουν αποτελέσ ματα τα οποία δεν μπορούν να αναπαρασ ταθούν επακριβώς με την χρήσ η αυτού του προκαθορισ μένου πλήθους από bits. Συνεπώς, το αποτέλεσ μα ενός υπολογισ μού με πραγματικούς αριθμούς είναι ανάγκη σ υχνά να σ τρογγυλοποιείται ώσ τε να προσ αρμόζεται σ ε αυτή την πεπερασ μένη αναπαράσ τασ η. Αυτό το σ φάλμα σ τρογγυλοποίησ ης είναι χαρακτηρισ τικό των υπολογισ μών κινητής υποδιασ τολής. Σε κάθε περίπτωσ η, οι περισ σ ότεροι υπολογισ μοί κινητής υποδιασ τολής έχουν σ φάλμα σ τρογγυλοποίησ ης. Σε αρκετές περιπτώσ εις, οι βασ ικές αριθμητικές πράξεις παράγουν λίγο περισ σ ότερο σ φάλμα σ τρογγυλοποίησ ης από όσ ο απαιτείται. Τα Guard Digits είναι ένα μέσ ο μείωσ ης του σ φάλματος όταν αφαιρούνται δύο κοντινοί αριθμοί. Τα Guard Digits θεωρούνταν αρκετά σ ημαντικά από την IBM όταν το 1968 πρόσ θεσ ε ένα Guard Digit σ την αναπαράσ τασ η διπλής ακρίβειας της αρχιτεκτονικής System/360(Η αναπαράσ τασ η μονής ακρίβειας είχε ήδη Guard Digit), ξεπερνώντας κατά πολύ τα υπάρχοντα σ υσ τήματα εκείνης της εποχής. Το πρότυπο IEEE εξελίσ σ εται περισ σ ότερο πέρα από την απλή απαίτησ η για την ύπαρξη ενός Guard 1
Digit. Το πρότυπο εφαρμόζει έναν αλγόριθμο για πρόσ θεσ η, αφαίρεσ η, πολλαπλασ ιασ μό, διαίρεσ η και υπολογισ μό τετραγωνικής ρίζας απαιτώντας οι υλοποιήσ εις να παράγουν το ίδιο αποτέλεσ μα με τον αλγόριθμο. Ετσ ι, όταν ένα πρόγραμμα μεταφέρεται από ένα μηχάνημα σ ε άλλο, τα αποτελέσ ματα των βασ ικών πράξεων θα είναι τα ίδια bit προς bit αν και τα δύο μηχανήματα υποσ τηρίζουν το πρότυπο IEEE. Το γεγονός αυτό, απλοποιεί σ ημαντικά την φορητότητα των προγραμμάτων. 1.3 Αναπαράσ τασ η Πραγματικών Αριθμών Εχουν προταθεί κατά καιρούς αναπαρασ τάσ εις πραγματικών αριθμών αλλά μακράν αυτή η οποία χρησ ιμοποιείται ευρέως είναι η αναπαράσ τασ η κινητής υποδιασ τολής. Η αναπαρασ τάσ εις κινητής υποδιασ τολής αποτελούνται από μία βάσ η β (η οποία υποτίθεται ότι είναι άρτια) και μία ακρίβεια p. Για παράδειγμα, εάν β=10 και p=3 τότε ο αριθμός 0.1 αναπαρίσ ταται ως 1.00 10 1. Εάν έχουμε β=2 και p=24, τότε ο δεκαδικός 0.1 δεν μπορεί να αναπαρασ ταθεί επακριβώς αλλά είναι προσ εγγισ τικά 1.10011001100110011001101 2 4. Γενικότερα, ένας αριθμός κινητής υποδιασ τολής αναπαρίσ ταται ως ±d.dd... dd β e, όπου d.dd... dd ονομάζεται mantissa και αποτελείται από p ψηφία. Για την ακρίβεια, η αναπαράσ τασ η ±d 0.d 1 d 2... d p 1 β e αναπαρισ τά τον αριθμό ± ( d 0 + d 1 β 1 +... + d p 1 β (p 1)) β e, (0 d i < β) (1) Ο όρος Αριθμός Κινητής Υποδιασ τολής χρησ ιμοποιείται όταν εννοούμε έναν πραγματικό αριθμό ο οποίος μπορεί να αναπαρασ ταθεί επακριβώς με την παραπάνω μορφή. Δύο επιπλέον παράμετροι οι οποίες σ χετίζονται με τις αναπαρασ τάσ εις κινητής υποδιασ τολής είναι ο μέγισ τος και ο ελάχισ τος επιτρεπτός εκθέτης e max και e min. Επειδή υπάρχουν β p πιθανές mantissa και e max e min + 1 πιθανοί εκθέτες, ένας αριθμός κινητής υποδιασ τολής κωδικοποιείται σ ε log 2 (e max e min + 1) + log 2 (β p ) + 1 bits, όπου ο όρος +1 είναι το bit προσ ήμου. Υπάρχουν δύο λόγοι για τους οποίους ένας πραγματικός αριθμός μπορεί να μην αναπαρίσ ταται ως αριθμός κινητής υποδιασ τολής. Η πιο πιθανή κατάσ τασ η περιγράφεται με το παράδειγμα το οποίο αναφέρθηκε παραπάνω με τον δεκαδικό 0.1. Παρόλο, που υπάρχει πεπερασ μένη δεκαδική αναπαράσ τασ η, σ το δυαδικό έχει μία άπειρη επαναλαμβανόμενη αναπαράσ τασ η. Ετσ ι όταν β=2, ο αριθμός 0.1 βρίσ κεται αυσ τηρά ανάμεσ α σ ε δύο αριθμούς κινητής υποδιασ τολής και δεν αναπαρίσ ταται από κανέναν από αυτούς. Μία λιγότερο σ υνηθισ μένη κατάσ τασ η είναι όταν ένας πραγματικός αριθμός είναι εκτός ορίων δηλαδή όταν η απόλυτη τιμή του είναι μεγαλύτερη από β β emax ή μικρότερο από 1.0 β emin. Οι αναπαρασ τάσ εις κινητής υποδιασ τολής δεν είναι απαραίτητα μοναδικές. Για παράδειγμα, οι 0.01 10 1 και 1.00 10 1 αναπαρισ τούν και οι δύο το 0.1. Εάν το πρώτο ψηφίο είναι μη μηδενικό (d 0 0 σ την εξίσ ωσ η (1) παραπάνω) τότε η αναπαράσ τασ η λέγεται κανονικοποιημένη. Ο αριθμός κινητής υποδιασ τολής 1.00 10 1 είναι κανονικοποιημένος, ενώ ο 0.01 10 1 δεν είναι. Οταν β=2, p=3, e min = 1 και e max = 2 υπάρχουν 16 κανονικοποιημένοι αριθμοί κινητής υποδιασ τολής όπως φαίνεται σ το Σχήμα 1.1. Σχήμα 1.1: Κανονικοποιημένοι αριθμοί όταν β=2, p=3, e min = 1 και e max = 2 Στο σ χήμα οι έντονες γραμμές σ τον άξονα αντιπροσ ωπεύουν τους αριθμούς σ τους οποίους η mantissa είναι 1.00. Με την απαίτησ η η αναπαράσ τασ η κινητής υποδιασ τολής να είναι κανονικοποιημένη 2
καθισ τά αυτή την αναπαράσ τασ η μοναδική. Δυσ τυχώς, αυτός ο περιορισ μός καθισ τά αδύνατη την αναπαράσ τασ η του μηδέν. Ενας φυσ ικός τρόπος ώσ τε να αναπαρασ ταθεί το 0 είναι σ τη μορφή 1.0 β emin 1, καθώς αυτό διατηρεί την ιδιότητα ώσ τε η αριθμητική διάταξη των μη αρνητικών πραγματικών αριθμών να αντισ τοιχεί σ την λεξικογραφική διάταξη των αναπαρασ τάσ εων κινητής υποδιασ τολής. Οταν ο εκθέτης αποθηκεύεται σ ε ένα πεδίο αποτελούμενο από k bits αυτό σ ημαίνει ότι 2 k 1 τιμές μπορούν να χρησ ιμοποιηθούν ως πιθανοί εκθέτες καθώς ο ένας είναι δεσ μευμένος για την αναπαράσ τασ η του μηδενός. Σημειώνεται ότι το σ ύμβολο σ ε έναν αριθμό κινητής υποδιασ τολής είναι μέρος του σ υμβολισ μού και διαφορετικός από τον τελεσ τή του πολλαπλασ ιασ μού αριθμών κινητής υποδιασ τολής. Για παράδειγμα η έκφρασ η ( 2.5 10 3) ( 4.0 10 2) εμπεριέχει μόνο έναν πολλαπλασ ιασ μό κινητής υποδιασ τολής. 1.4 Σχετικό Σφάλμα και Ulps Το σ φάλμα σ τρογγυλοποίησ ης επειδή είναι εγγενές σ τους υπολογισ μούς κινητής υποδιασ τολής, είναι πολύ σ ημαντικό να υπάρχει ένας τρόπος ώσ τε να μπορεί να μετρηθεί το σ φάλμα. Θεωρώντας μία μορφή κινητής υποδιασ τολής με β=10 και p=3, αν το αποτέλεσ μα του υπολογισ μού κινητής υποδιασ τολής είναι 3.12 10 2 και το αποτέλεσ μα όταν υπολογισ τεί σ ε άπειρη ακρίβεια είναι 0.0314 τότε το σ φάλμα είναι 2 μονάδες σ το τελευταίο ψηφίο. Ομοια, αν ο πραγματικός αριθμός 0.0314159 αναπαρίσ ταται ως 3.14 10 2 τότε το σ φάλμα είναι 0.159 μονάδες σ το τελευταίο ψηφίο. Γενικότερα, αν ο αριθμός κινητής υποδιασ τολής d.dd... d β e χρησ ιμοποιείται ώσ τε να αναπαρασ τήσ ει τον ζ τότε το σ φάλμα είναι d.dd... d (z/β e ) β p 1 μονάδες σ την τελευταία θέσ η. Ο όρος ulps θα χρησ ιμοποιείται ως σ υντομογραφία του units in the last place-μονάδες σ την τελευταία θέσ η. Αν το αποτέλεσ μα των υπολογισ μών είναι αριθμός κινητής υποδιασ τολής κοντά σ το πραγματικό αποτέλεσ μα υπάρχει πιθανότητα να υπάρχει σ φάλμα ίσ ο με 0.5 ulp. Ενας άλλος τρόπος για την μέτρησ η της διαφοράς ανάμεσ α σ ε έναν αριθμό κινητής υποδιασ τολής και ένα πραγματικό αριθμό προσ εγγίζεται με το σ χετικό σ φάλμα, το οποίο είναι η διαφορά των δύο αριθμών διαιρούμενη με τον πραγματικό αριθμό. Για παράδειγμα, το σ χετικό σ φάλμα προσ εγγίζοντας το 3.14159 με το 3.14 10 0 είναι 0.00159/3.14159 0.0005. Με σ τόχο τον υπολογισ μό του σ χετικού λάθους το οποίο αντισ τοιχεί σ ε 0.5 ulp, παρατηρούμε ότι όταν ένας πραγματικός αριθμός προσ εγγίζεται από τον κοντινότερο πιθανό αριθμό κινητής υποδιασ τολής d.dd... d β e, το σ φάλμα μπορεί να είναι τόσ ο μεγάλο όσ ο 0.00... 00β β e, όπου β είναι το ψηφίο β/2, υπάρχουν p μονάδες σ τη mantissa του αριθμού κινητής υποδιασ τολής και p ) ) μονάδες με 0 σ τη mantissa του σ φάλματος. Αυτό το σ φάλμα είναι β p β e. Από τότε που όλοι οι αριθμοί (( β 2 της μορφής d.dd... d β e έχουν το ίδιο απόλυτο σ φάλμα αλλά έχουν((( τιμές) οι οποίες ) βρίσ κονται ) ανά- β 2 β p β e /β e και σ το μεσ α σ το β e και β β e το σ χετικό σ φάλμα βρίσ κεται ανάμεσ α σ το ((( ) ) ) β 2 β p β e /β e+1 έτσ ι ώσ τε: 1 2 β p 1 2 ulp β 2 β p (2) Το σ χετικό λάθος το οποίο αντισ τοιχεί σ ε 0.5 ( ) ulp μπορεί να διαφέρει κατά ένα παράγοντα β. Αυτός ο παράγοντας ονομάζεται wobble. Θέτοντας ε= β β p με το μεγαλύτερο από τα όρια της εξίσ ωσ ης (2) 2 τότε όταν ο πραγματικός αριθμός σ τρογγυλοποιείται σ τον πλησ ιέσ τερο αριθμό κινητής υποδιασ τολής, το σ χετικό σ φάλμα φράσ σ εται πάντα από τον παράγονται ε ο οποίος λέγεται machine epsilon. Στο παραπάνω παράδειγμα, το σ χετικό λάθος ήταν 0.00159 3.14159 0.0005. Για την αποφυγή τόσ ο μικρών αριθμών, το σ χετικό σ φάλμα γράφεται σ αν ένας παράγοντας φορές το ε, ο οποίος σ ε αυτή την περίπτωσ η είναι ε= 0.1ɛ. ( β 2 ) β p = 5 (10) 3 = 0.005. Συνεπώς το σ χετικό σ φάλμα μπορεί να εκφρασ τεί ως 0.00159 3.14159 0.005 ɛ 3
Για να αποτυπωθεί η διαφορά μεταξύ ulps και σ χετικού σ φάλματος, θεωρούμε τον πραγματικό αριθμό x = 12, 35 ο οποίος προσ εγγίζεται από τον x = 1, 24 10 1. Το σ φάλμα είναι 0.5 ulps και το σ χετικό σ φάλμα είναι 0.8ε. Στη σ υνέχεια θεωρούμαι τον υπολογισ μό 8 x. Η ακριβής τιμή είναι 8x = 98.8, ενώ η υπολογιζόμενη αξία είναι 8 x = 9.92 10 1. Το σ φάλμα είναι τώρα 4.0 ulps αλλά το σ χετικό σ φάλμα εξακολουθεί να είναι 0.8ε. Το σ φάλμα που μετράται σ ε ulps, είναι 8 φορές μεγαλύτερο ακόμη και αν το σ χετικό σ φάλμα είναι το ίδιο. Σε γενικές γραμμές, όταν η βάσ η είναι β, ένα σ ταθερό σ χετικό σ φάλμα το οποίο εκφράζεται σ ε ulps μπορεί να ταλαντεύεται κατά ένα παράγοντα το πολύ μέχρι β. Αντισ τρόφως, όπως προκύπτει από την εξίσ ωσ η (2) σ ταθερό σ φάλμα της τάξης του 0.5 ulps έχει σ αν αποτέλεσ μα σ ε σ χετικό σ φάλμα το οποίο μπορεί να ταλαντεύεται κατά β. Ο πιο φυσ ικός τρόπος για τη μέτρησ η του σ φάλματος της σ τρογγυλοποίησ ης είναι σ το ulps. Για παράδειγμα, η σ τρογγυλοποίησ η σ το πλησ ιέσ τερο αριθμό κινητής υποδιασ τολής αντισ τοιχεί σ ε σ φάλμα μικρότερο ή ίσ ο με 0,5 ulp. Ωσ τόσ ο, κατά την ανάλυσ η του σ φάλματος σ τρογγυλοποίησ ης, ο οποίος προκαλείται από διάφορους τύπους, το σ χετικό σ φάλμα είναι ένα καλύτερο μέτρο. Δεδομένου ότι το ε μπορεί να υπερεκτιμήσ ει την επίδρασ η της σ τρογγυλοποίησ ης σ τον πλησ ιέσ τερο αριθμό κινητής υποδιασ τολής κατά ένα παράγοντα ταλάντευσ ης β, οι εκτιμήσ εις σ φάλματος από τύπους θα είναι αυσ τηρότερες σ ε μηχανήματα με μικρό β. Οταν μόνο η τάξη μεγέθους της σ τρογγυλοποίησ ης λάθους μας ενδιαφέρει, το ulps και το ε μπορούν να χρησ ιμοποιηθούν εναλλάξ, δεδομένου ότι διαφέρουν το πολύ κατά ένα σ υντελεσ τή β. Για παράδειγμα, αν ένας αριθμός κινητής υποδιασ τολής έχει σ φάλμα n ulps, αυτό σ ημαίνει ότι το πλήθος των ψηφίων τα οποία επηρεάζονται είναι log β (n). Από την άλλη εάν το σ χετικό σ φάλμα σ ε έναν υπολογισ μό είναι nε, τότε τα ψηφία τα οποία επηρεάζονται είναι περίπου log β (n) (3). 1.5 Guard Digits Μια μέθοδος υπολογισ μού της διαφοράς μεταξύ δύο αριθμών κινητής υποδιασ τολής είναι πρώτα να υπολογισ τεί η διαφορά τους ακριβώς και σ τη σ υνέχεια αυτή να σ τρογγυλοποιηθεί σ τον πλησ ιέσ τερο αριθμό κινητής υποδιασ τολής. Η αυτή η μέθοδος είναι πολύ ακριβή, εάν τα τελούμενα διαφέρουν σ ημαντικά σ το μέγεθος. Θεωρώντας, p=3, 2.15 10 12, 1.25 10 5 τότε αυτό υπολογίζεται ως x= 2.15 10 12 y= 0.00000000000000125 10 12 x-y= 2.1499999999999999875 10 12 το οποίο σ τρογγυλοποιείται σ το 2.15 10 12. Αντί να χρησ ιμοποιούνται όλες αυτές τις θέσ εις, το υλικό το οποίο σ χετίζεται με τις λειτουργίες κινητής υποδιασ τολής κανονικά κάνει πράξεις σ ε ένα σ ταθερό αριθμό ψηφίων. Αν υποθέσ ουμε ότι ο αριθμός των ψηφίων φυλάσ σ ονται είναι p και ότι όταν σ τον μικρότερο τελεσ τή εκτελεσ τεί μία πράξη δεξιάς ολίσ θησ ης, τα ψηφία του απλώς απορρίπτονται σ ε αντίθεσ η με σ τρογγυλοποίησ η. Σύμφωνα με το παραπάνω παράδειγμα η πράξη γίνεται x= 2.15 10 12 y= 0.00 10 12 x-y= 2.15 10 12 Το αποτέλεσ μα είναι ακριβώς το ίδιο όπως και όταν η διαφορά είχε υπολογισ θεί επακριβώς και σ τη σ υνέχεια σ τρογγυλοποιήθηκε. Σε ένα άλλο παράδειγμα, αν p=3, 10.1, 9.93 τότε x= 1.01 10 1 y= 0.99 10 1 x-y= 0.02 10 1 Βέβαια, η σ ωσ τή απάντησ η είναι 0,17 οπότε η διαφορά η οποία υπολογίσ τηκε απέχει κατά 30 ulps και 4
είναι λανθασ μένη σ ε κάθε ψηφίο. υπάρχει πιθανότητα να προκύψει. Για τον λόγο αυτό θα πρέπει να προσ διορίσ ουμε μεγάλο σ φάλμα Εχει υπολογισ τεί μαθηματικά ότι η μορφή κινητής υποδιασ τολής με παραμέτρους β και p και υπολογισ τική διαφορά p ψηφίων, το σ χετικό σ φάλμα του αποτελέσ ματος μπορεί να είναι το πολύ ίσ ο με β-1. Οταν β=2, το σ χετικό σ φάλμα μπορεί να είναι τόσ ο μεγάλο όσ ο το αποτέλεσ μα αλλά όταν β=10, μπορεί να είναι εννέα φορές μεγαλύτερο. Εναλλακτικά, όταν β=2, με την χρήσ η της εξίσ ωσ ης (3) από παραπάνω προκύπτει ότι ο αριθμός των ψηφίων τα οποία επηρεάζονται είναι log 2 ( 1 ε ) = log 2(2 p ) = p. Δηλαδή, το σ ύνολο των p ψηφίων του αποτελέσ ματος είναι λάθος. Ας υποθέσ ουμε τώρα ότι ένα επιπλέον ψηφίο προσ τίθεται για να αποφευχθεί αυτή η κατάσ τασ η(guard Digit). Δηλαδή, ο μικρότερος αριθμός περιορίζεται σ τα p+1 ψηφία σ τη σ υνέχεια το αποτέλεσ μα της αφαίρεσ ης σ τρογγυλοποιείται σ τα p ψηφία. Με την χρήσ η ενός Guard Digit, το προηγούμενο παράδειγμα γίνεται x= 1.010 10 1 y= 0.993 10 1 x-y= 0.17 10 1 και το αποτέλεσ μα είναι το σ ωσ τό. Με ένα Guard Digit το σ χετικό σ φάλμα του αποτελέσ ματος μπορεί να είναι μεγαλύτερο από το ε. Για παράδειγμα αν x=110 και y=8,59 τότε x= 1.10 10 2 y= 0.085 10 2 x-y= 1.015 10 2 Το αποτέλεσ μα σ τρογγυλοποιείται σ το 102 σ ε σ ύγκρισ η με τη σ ωσ τή απάντησ η των 101,41 δηλαδή ένα σ χετικό σ φάλμα της τάξης 0.006, το οποίο είναι μεγαλύτερο από ε = 0.005. Σε γενικές γραμμές, το σ χετικό σ φάλμα του αποτελέσ ματος μπορεί να είναι μόνο ελαφρώς μεγαλύτερο από ε. Πιο σ υγκεκριμένα, Αν x και y είναι δύο αριθμοί, σ ε μορφή κινητής υποδιασ τολής με παραμέτρους β και p και εάν αφαίρεσ η γίνεται με p+1 ψηφία (δηλαδή με ένα Guard Digit), τότε το σ χετικό σ φάλμα της σ τρογγυλοποίησ ης σ το αποτέλεσ μα είναι μικρότερο από 2ε. 1.6 Ακύρωσ η Από το παραπάνω τμήμα μπορούμε να σ υνοψίσ ουμε ότι χωρίς Guard Digit, το σ χετικό σ φάλμα το οποίο σ υμβαίνει κατά την αφαίρεσ η δύο κοντινών ποσ οτήτων μπορεί να είναι πολύ μεγάλο. Με άλλα λόγια, το αποτέλεσ μα κάποιας έκφρασ ης η οποία περιέχει μια πράξη αφαίρεσ ης (είτε πράξη πρόσ θεσ ης ποσ οτήτων με αντίθετα πρόσ ημα) μπορεί να επιφέρει σ χετικό σ φάλμα τόσ ο μεγάλο, ώσ τε όλα τα ψηφία να μην έχουν νόημα. Αφαιρώντας κοντινές ποσ ότητες, τα πιο σ ημαντικά ψηφία σ τα τελούμενα ταιριάζουν και απαλείφουν το ένα το άλλο. Υπάρχουν δύο είδη ακύρωσ ης: η κατασ τροφική και η καλοήθης. Η Κατασ τροφική ακύρωσ η σ υμβαίνει όταν τα τελούμενα υπόκεινται σ ε σ φάλματα σ τρογγυλοποίησ ης. Για παράδειγμα, σ τον τύπο της δευτεροβάθμιας εξίσ ωσ ης υπάρχει η έκφρασ η b 2 4ac. Οι ποσ ότητες b 2 και 4ac υπόκεινται σ ε σ φάλματα σ την σ τρογγυλοποίησ η, δεδομένου ότι είναι τα αποτελέσ ματα των πολλαπλασ ιασ μών κινητής υποδιασ τολής. Ας υποθέσ ουμε ότι έχουν σ τρογγυλοποιηθεί σ το πλησ ιέσ τερο αριθμό κινητής υποδιασ τολής και έτσ ι έχουν ακρίβεια η οποία κυμαίνεται σ τα 0,5 ulp. Οταν αυτοί αφαιρούνται, η ακύρωσ η μπορεί να προκαλέσ ει την εξαφάνισ η πολλών από τα ακριβή ψηφία, αφήνοντας κυρίως ψηφία τα οποία έχουν επηρεασ τεί από σ φάλμα σ τρογγυλοποίησ ης. Ετσ ι, υπάρχει πιθανότητα η διαφορά να έχει σ φάλμα πολλών ulps. Για παράδειγμα, αν θεωρήσ ουμε b=3.34, a=1.22, και c=2.28 γνωρίζουμε ότι ακριβής τιμή της έκφρασ ης b 2 4ac είναι 0.0292. Αλλά το b 2 σ τρογγυλοποιείται σ το 11.2 και το 4ac σ τρογγυλοποιείται σ το 11.1, σ υνεπώς η τελική απάντησ η είναι 0.1 η οποία έχει σ φάλμα 70 ulps, παρόλο που το 11.2 11.1 ισ ούται ακριβώς με 0.1. Η αφαίρεσ η εγγενώς δεν παράγει κάποιο σ φάλμα, αλλά το σ φάλμα δημιουργείται σ τους προγενέσ τερους πολλαπλασ ιασ μούς. 5
Η Καλοήθης ακύρωσ η σ υμβαίνει κατά την αφαίρεσ η γνωσ τών επακριβώς ποσ οτήτων. Αν x και y δεν έχουν κανένα σ φάλμα σ τρογγυλοποίησ ης τότε, σ ύμφωνα με παραπάνω εάν η αφαίρεσ η γίνει με ένα Guard Digit, η διαφορά έχει x y ένα πολύ μικρό σ χετικό σ φάλμα (λιγότερο από 2ε). Μπορούμε να σ υνοψίσ ουμε, λέγοντας ότι ένα Guard Digit εγγυάται ακρίβεια όταν αφαιρούνται ποσ ότητες οι οποίες βρίσ κονται σ ε κοντινή απόσ τασ η. Μερικές φορές, ένας τύπος ο οποίος δίνει ανακριβή αποτελέσ ματα ξαναγράφεται ώσ τε να έχει πολύ μεγαλύτερη αριθμητική ακρίβεια χρησ ιμοποιώντας την καλοήθης ακύρωσ η. Ωσ τόσ ο, η διαδικασ ία αυτή λειτουργεί μόνο εάν η αφαίρεσ η γίνεται χρησ ιμοποιώντας Guard Digit. Η τιμή ενός Guard Digit δεν είναι υψηλή, διότι απαιτεί απλώς την κατασ κευή αθροισ τή μεγαλύτερου κατά ένα bit. Σε έναν 54-bit αθροισ τή διπλής ακρίβειας, το επιπλέον κόσ τος είναι μικρότερο του 2%. Στην τιμή αυτή, αποκτούμε την ικανότητα να εκτελούνται πολλοί απαιτητικοί αλγόριθμοι, όπως η έκφρασ η ln(1 + x). Αν και οι περισ σ ότεροι σ ύγχρονοι υπολογισ τές διαθέτουν Guard Digit, υπάρχουν μερικοί όπως τα σ υσ τήματα Cray οι οποίοι δεν διαθέτουν. 1.7 Πράξεις Επακριβούς Στρογγυλοποίησ ης Οταν εκτελούνται πράξεις κινητής υποδιασ τολής με Guard Digit, δεν είναι τόσ ο ακριβείς όσ ο αν αυτές υπολογισ τούν αρχικά επακριβώς και σ τη σ υνέχεια σ τρογγυλοποιηθούν σ τον πλησ ιέσ τερο αριθμό κινητής υποδιασ τολής. Οι πράξεις οι οποίες εκτελούνται με αυτόν τον τρόπο ονομάζονται επακριβώς σ τρογγυλοποιημένες ή ορθώς σ τρογγυλοποιημένες. Οπως είδαμε σ την παράγραφο 1.5 ένα Guard Digit δεν δίνει πάντα ακριβής σ τρογγυλοποίησ η των αποτελεσ μάτων. Είδαμε παραδείγματα τα οποία απαιτούν Guard Digit προκειμένου να δώσ ουν σ ωσ τά αποτελέσ ματα. Πλέον, θα εξετάσ ουμε παραδείγματα αλγορίθμων τα οποία απαιτούν σ τρογγυλοποίησ η επακριβώς. Μέχρι σ τιγμής, ο ορισ μός της σ τρογγυλοποίησ ης δεν έχει δοθεί. Η σ τρογγυλοποίησ η είναι απλή, με εξαίρεσ η τον τρόπο σ τρογγυλοποίησ ης σ ε περιπτώσ εις οι οποίες σ υμβαίνουν σ την μέσ η. Για παράδειγμα, θα πρέπει το 12,5 να σ τρογγυλοποιείται σ το 12 ή σ το 13 Μία άποψη είναι να διαιρέσ ουμε τα 10 ψηφία σ τη μέσ η, έχοντας {0, 1, 2, 3, 4} σ τρογγυλοποιούμε προς τα κάτω, αντίθετα έχοντας {5, 6, 7, 8, 9} σ τρογγυλοποιούμε προς τα πάνω, έτσ ι το 12,5 σ τρογγυλοποιείται σ το 13. Αυτό είναι ο τρόπος σ τρογγυλοποίησ ης σ τους υπολογισ τές VAX. Μια άλλη άποψη λέει ότι, εφόσ ον οι αριθμοί οι οποίοι λήγουν σ το 5 είναι ανάμεσ α σ ε δύο πιθανές σ τρογγυλοποιήσ εις, θα πρέπει να σ τρογγυλοποιούν προς τα κάτω κάποιες φορές και προς τα επάνω κάποιες άλλες. Ενας τρόπος ώσ τε να επιτυγχάνεται αυτού του είδους η σ τρογγυλοποίησ η, απαιτεί το αποτέλεσ μα να έχει το λιγότερο σ ημαντικό ψηφίο του άρτιο. Ετσ ι, 12,5 σ τρογγυλοποιείται σ το 12 και όχι σ το 13 διότι το 2 είναι άρτιος. Από αυτές τις δύο μεθόδους, η καλύτερη είναι η σ τρογγυλοποίησ η σ ε άρτιο. Αυτό δικαιολογείται από το γεγονός ότι αν θεωρήσ ουμε x και y αριθμούς κινητής υποδιασ τολής και ορίσ ουμε x 0 = x, x 1 = (x 0 y) y,..., x n = (x n 1 y) y. Εάν και σ τρογγυλοποιούνται επακριβώς χρησ ιμοποιώντας σ τρογγυλοποίησ η σ ε άρτιο, τότε είτε x n = x για όλα τα ν, είτε x n = x 1 για όλα τα n 1. Μία εφαρμογή της επακριβούς σ τρογγυλοποίησ ης εμφανίζεται σ την αριθμητική πολλαπλής ακρίβειας. Υπάρχουν δύο βασ ικές προσ εγγίσ εις για μεγαλύτερη ακρίβεια. Η μία προσ έγγισ η, αναπαρισ τά αριθμούς κινητής υποδιασ τολής με την χρήσ ης πολύ μεγάλης mantissa, η οποία είναι αποθηκευμένη σ ε ένα διάνυσ μα από λέξεις, και έχει κωδικοποιημένες ρουτίνες ώσ τε να χειρίζεται αυτούς τους αριθμούς σ ε γλώσ σ α assembly. Η δεύτερη προσ έγγισ η αναπαρισ τά τους αριθμούς κινητής υποδιασ τολής υψηλής ακρίβειας ως ένα διάνυσ μα απλών αριθμών κινητής υποδιασ τολής, προσ θέτοντας τα σ τοιχεία του διανύσ ματος με άπειρη ακρίβεια υποκαθισ τώντας τον υψηλής ακρίβειας αριθμό κινητής υποδιασ τολής. Αυτή η δεύτερη προσ έγγισ η χρησ ιμοποιείται και το πλεονέκτημα της χρήσ ης ενός διανύσ ματος με αριθμούς κινητής υ- 6
ποδιασ τολής είναι ότι μπορεί να υπάρξει φορητότητα σ την κωδικοποίησ η σ ε γλώσ σ α υψηλού επιπέδου απαιτώντας όμως αριθμητική επακριβούς σ τρογγυλοποίησ ης. Πλέον, γνωρίζουμε εάν έχει σ ημασ ία οι βασ ικές αριθμητικές πράξεις προσ θέτουν λίγο περισ σ ότερο σ φάλμα σ τρογγυλοποίησ ης από όσ ο χρειάζεται και έχει σ ημασ ία, γιατί οι ακριβείς βασ ικές πράξεις μας δίνουν τη δυνατότητα να αποδείξουμε ότι οι τύποι είναι σ ωσ τοί, υπό την έννοια ότι έχουν ένα μικρό σ χετικό σ φάλμα. 1.8 Το Πρότυπο IEEE 1.8.1 Εισ αγωγή Υπάρχουν δύο διαφορετικά πρότυπα IEEE για υπολογισ μούς κινητής υποδιασ τολής. Το IEEE 754 είναι ένα δυαδικό πρότυπο το οποίο απαιτεί β=2, p=24 για μονή ακρίβεια και p=53 για διπλή ακρίβεια. Επίσ ης καθορίζει την ακριβή διάταξη των bits σ την μονή και τη διπλή ακρίβεια. Το IEEE 854 επιτρέπει είτε β=2 ή β=10 και σ ε αντίθεσ η με 754, δεν διευκρινίζει πώς οι αριθμοί κινητής υποδιασ τολής κωδικοποιούνται σ ε bits. Δεν απαιτεί σ υγκεκριμένη τιμή για το p, αλλά αντ άυτού ορίζει περιορισ μούς για τις επιτρεπόμενες τιμές του p για τη μονή και τη διπλή ακρίβεια. Ο όρος πρότυπο IEEE θα χρησ ιμοποιηθούν όταν μιλούμε για ιδιότητες οι οποίες είναι κοινές σ τα δύο πρότυπα. Αυτή η ενότητα αναλύει το πρότυπο IEEE και κάθε μέρος αυτής, επεξηγεί κάθε κομμάτι του προτύπου και τους λόγους για τους οποίους σ υμπεριλήφθηκε. Στόχος του παρόντος κειμένου δεν είναι να υποσ τηρίξει ότι το πρότυπο IEEE ως το καλύτερο δυνατό πρότυπο κινητής υποδιασ τολής αλλά να αποδεχθεί το πρότυπο αυτό ως έχει και να παρέχει μια εισ αγωγή σ τη χρήσ η του. 1.8.2 Μορφή και Πράξεις Βάσ η Είναι σ αφές γιατί το IEEE 854 επιτρέπει β=10. Η βάσ η δέκα είναι το πώς οι άνθρωποι ανταλλάσ σ ουν και να σ κέφτονται σ χετικά με τους αριθμούς. Χρησ ιμοποιώντας β=10 είναι κατάλληλο ιδιαίτερα για αριθμομηχανές, όπου το αποτέλεσ μα κάθε πράξης εμφανίζεται σ ε δεκαδική μορφή. Υπάρχουν αρκετοί λόγοι για τους οποίους το IEEE 854 προβλέπει ότι αν η βάσ η δεν είναι 10, πρέπει να 2. Οπως είδαμε παραπάνω, αναφέρθηκε ένας λόγος σ ύμφωνα με τον οποίο τα αποτελέσ ματα των αναλύσ εων σ φάλματος είναι πολύ αυσ τηρότερα όταν η βάσ η είναι 2. Ο λόγος είναι ότι, ένα σ φάλμα σ τρογγυλοποίησ ης των 0,5 ulp ταλαντεύεται κατά ένα παράγοντα β όταν υπολογίζεται ως σ χετικό σ φάλμα και αναλύσ εις σ φάλματος σ χεδόν πάντα είναι απλούσ τερες όταν βασ ίζονται σ το σ χετικό σ φάλμα. Μία σ χετική αιτία έχει να κάνει με την πραγματική ακρίβεια για μεγάλες βάσ εις. Σκεφτείτε β=16, p=1 σ ε σ ύγκρισ η με το β=2, p=4 και τα δύο σ υσ τήματα έχουν 4 bits mantissa. Ας θεωρήσ ουμε την πράξη 15/8. Οταν β=2, το 15 αναπαρίσ ταται ως 1.111 2 3, και 15/8 ως 1.111 2 0. Ετσ ι, 15/8 είναι ακριβές. Ωσ τόσ ο, όταν β=16, το 15 αναπαρίσ ταται ως F 16 0, όπου Φ είναι το δεκαεξαδικό ψηφίο 15 και το 15/8 αναπαρίσ ταται ως 1 16 0, το οποίο έχει μόνο ένα bit σ ωσ τό. Γενικότερα, η βάσ η 16 μπορεί να χάσ ει έως και 3 bits, με αποτέλεσ μα η ακρίβεια των p δεκαεξαδικών ψηφίων να έχει μια αποτελεσ ματική ακρίβεια τόσ ο χαμηλή όσ ο 4p-3 αντί για 4p δυαδικά bits. Δεδομένων των προβλημάτων για μεγάλες τιμές του β, η IBM επέλεξε για τους System/370 να έχει β=16 για δύο πιθανές αιτίες. Η πρώτη είναι το αυξημένο εύρος του εκθέτη. Η μονή ακρίβεια σ το System/370 είχε β=16, p=6 για το λόγο αυτό η mantissa χρειάζεται 24 bits. Δεδομένου ότι αυτό έπρεπε να χωρέσ ει σ ε 32 bits, αυτό άφηνε 7 bits για τον εκθέτη και ένα bit για το πρόσ ημο. Ετσ ι, το εύρος των αριθμών οι οποίοι 7
μπορούσ αν να αναπαρασ ταθούν κυμαίνεται αριθμών από περίπου 16 26 έως περίπου 16 26 =2 28. Αντίσ τοιχα, για παρόμοιο εύρος όταν β=2 απαιτούνται 9 bits σ τον εκθέτη, αφήνοντας μόνο 22 bits για την mantissa. Ωσ τόσ ο, επισ ημάνθηκε ότι, όταν β=16, p=6 η πραγματική ακρίβεια είναι τόσ ο χαμηλή όσ ο 4p-3=21 bits. Ακόμα χειρότερα, όταν β=2, είναι δυνατόν να κερδηθεί ένα επιπλέον bit έτσ ι ώσ τε το σ υγκεκριμένο μηχάνημα να έχει 23 bits ακρίβειας σ ε σ ύγκρισ η με ένα εύρος από 21 έως 24 bits ακρίβειας του μηχανήματος με β=16. Μια άλλη πιθανή αιτία για την επιλογή του β=16 σ χετίζεται με την ολίσ θησ η (shifting). Κατά την πρόσ θεσ η δύο αριθμών κινητής υποδιασ τολής, αν εκθέτες τους διαφέρουν, μία από τις mantissa θα πρέπει να ολισ θήσ ει ώσ τε να ταυτισ τούν οι υποδιασ τολές, επιβραδύνοντας την πράξη. Στο σ ύσ τημα με β=16, p=1, όλοι οι αριθμοί μεταξύ του 1 και του( 15) έχουν τον ίδιο εκθέτη και έτσ ι δεν απαιτείται 15 ολίσ θησ η κατά την πρόσ θεσ η οποιουδήποτε από τα = 105 δυνατά ζεύγη διακριτών αριθμών από 2 αυτό το σ ύνολο. Ωσ τόσ ο, σ το σ ύσ τημα β=2, p=4, οι αριθμοί αυτοί έχουν εκθέτες που κυμαίνονται από 0 έως 3 και απαιτείται μετατόπισ η για τα 70 από τα 105 ζευγάρια. Στα περισ σ ότερα σ ύγχρονα hardware, η απόδοσ η η οποία αποκτήθηκε αποφεύγοντας την ολίσ θησ η σ ε ένα υποσ ύνολο από τελούμενα είναι αμελητέα, και έτσ ι η μικρή ταλάντευσ η όταν το β=2 την καθισ τά προτιμότερη βάσ η. Ενα άλλο πλεονέκτημα όταν β=2 είναι η ύπαρξη ενός τρόπου ώσ τε να κερδηθεί ένα επιπλέον signicant bit. δεδομένου ότι οι αριθμοί κινητής υποδιασ τολής είναι πάντα κανονικοποιημένοι, το πιο σ ημαντικό bit της mantissa είναι πάντα 1 και δεν υπάρχει λόγος να χαθεί ένα bit για αποθήκευσ η αναπαρισ τώντας το. Οι μορφές οι οποίες χρησ ιμοποιούν αυτή την τεχνική, χρησ ιμοποιούν το κρυφό bit. Εχει ήδη επισ ημανθεί ότι απαιτούνταν μια ειδική σ ύμβασ η για το 0. Η μέθοδος η οποία προτάθηκε χρησ ιμοποιούσ ε έναν εκθέτη e min 1 και μία μηδενική mantissa. Η μονή ακρίβεια σ το IEEE 754 αναπαρίσ ταται από 32 bits με 1 bit για το πρόσ ημο, 8 bits για τον εκθέτη, και 23 bits για την mantissa. Ωσ τόσ ο, χρησ ιμοποιεί ένα κρυφό bit, έτσ ι η mantissa είναι 24 bits (p=24), παρόλο που κωδικοποιείται χρησ ιμοποιώντας μόνο 23 bits. Ακρίβεια Το πρότυπο IEEE καθορίζει τέσ σ ερις διαφορετικούς τύπους ακρίβειας: μονή, διπλή, εκτεταμένη μονή και εκτεταμένη διπλή. Στο πρότυπο 754, η μονή και η διπλή ακρίβεια αντισ τοιχεί κατά προσ έγγισ η σ ε οτιδήποτε παρέχει το υλικό το οποίο σ χετίζεται με πράξεις κινητής υποδιασ τολής. Η μονή ακρίβεια δεσ μεύει μία λέξη των 32 bit και η διπλή ακρίβεια δύο διαδοχικές λέξεις των 32 bit. Η εκτεταμένη ακρίβεια είναι μια μορφή η οποία προσ φέρει μια μικρή επιπλέον ακρίβεια και εύρος σ τον εκθέτη. Παράμετροι Μορφή Μονή Ακρίβεια Εκτεταμένη Μονή Ακρίβεια Διπλή Ακρίβεια Εκτεταμένη Διπλή Ακρίβεια p 24 bits 32 bits 53 bit 64 e max +127 1023 +1023 > 16383 e min -126 1022-1022 16382 Μήκος εκθέτη σ ε bits 8 11 11 15 Μήκος μορφής σ ε bits 32 43 64 79 Πίνακας 1.1: Παράμετροι μορφών σ το IEEE 754 Το πρότυπο IEEE προσ διορίζει μόνο το κατώτερο όριο για το πόσ α επιπλέον bits θα παρέχει η εκτεταμένη ακρίβεια. Η ελάχισ τη επιτρεπόμενη μορφή της διπλής εκτεταμένης μορφής αναφέρεται μερικές φορές ως μορφή των 80 bit, αν και ο πίνακας δείχνει χρησ ιμοποιεί 79 bits. Ο λόγος είναι ότι 8
η κατασ κευή του υλικού της εκτεταμένης ακρίβειας σ υνήθως δεν χρησ ιμοποιεί το κρυφό bit και έτσ ι χρησ ιμοποιούνται 80 αντί για 79 bits. Ενα κίνητρο για εκτεταμένη ακρίβεια προέρχεται από τις αριθμομηχανές η οποίες εμφανίζουν 10 ψηφία, αλλά χρησ ιμοποιούν 13 ψηφία εσ ωτερικά. Με την εμφάνισ η μόνο 10 από τα 13 ψηφία, η α- ριθμομηχανή εμφανίζεται σ το χρήσ τη ως ένα μαύρο κουτί όταν υπολογίζει εκθετικές σ υναρτήσ εις, σ υνημίτονα, κλπ. με 10 ψηφία για ακρίβεια. Στην αριθμομηχανή για τον υπολογισ μό τέτοιου είδους σ υναρτήσ εων με ακρίβεια 10 ψηφία με εύλογη αποδοτικότητα, χρειάζεται λίγα επιπλέον ψηφία. Η εκτεταμένη ακρίβεια σ το πρότυπο IEEE εξυπηρετεί μια παρόμοια λειτουργία. Δίνει τη δυνατότητα σ ε βιβλιοθήκες υπολογίζουν αποτελεσ ματικά ποσ ότητες με ακρίβεια περίπου 0,5 ulp με μονή ή διπλή ακρίβεια, δίνοντας σ τον χρήσ τη αυτών των βιβλιοθηκών την εγγύησ η, ότι κάθε πρωτογενής λειτουργία, είτε ένας απλός πολλαπλασ ιασ μός είτε η κλήσ η μίας περίπλοκης σ υνάρτησ ης, θα επισ τρέφει μία τιμή με ακρίβεια περίπου 0,5 ulp. Ωσ τόσ ο, η χρήσ η της εκτεταμένης ακρίβειας, είναι σ ημαντικό να είναι κρυφή από τον χρήσ τη. Για παράδειγμα, σ ε μία αριθμομηχανή, εάν η εσ ωτερική αναπαράσ τασ η της εμφανιζόμενης τιμής δεν έχει σ τρογγυλοποιηθεί με την ίδια ακρίβεια σ την οθόνη, τότε το αποτέλεσ μα των περαιτέρω πράξεων θα εξαρτάται από τα κρυφά ψηφία και εμφανίζονται χωρίς νόημα σ τον χρήσ τη. Με σ κοπό την περαιτέρω ανάλυσ η της εκτεταμένης ακρίβειας, θεωρούμε το πρόβλημα της μετατροπής ενός αριθμού IEEE 754 μονής ακρίβειας σ ε δεκαδικό. Ιδανικά, οι αριθμοί μονής ακρίβειας εμφανίζονται με αρκετά ψηφία, έτσ ι ώσ τε όταν μετατρέψουμε ξανά τον δεκαδικό αριθμό, ο αριθμός μονής ακρίβειας να ανακτηθεί. Εχει αποδειχθεί ότι το εννέα δεκαδικά ψηφία είναι αρκετά ώσ τε να ανακτήσ ουν ένα μονής ακρίβειας δυαδικό αριθμό. Κατά τη μετατροπή ενός δεκαδικού αριθμό πίσ ω σ τη δυαδική αναπαράσ τασ η του, ένα σ φάλμα σ τη σ τρογγυλοποίησ ης της τάξεως 1 ulp είναι μοιραίο, διότι θα δώσ ει λανθασ μένη απάντησ η. Μια τέτοια περίπτωσ η είναι ιδανική για ένα αποτελεσ ματικό αλγόριθμο με την χρήσ η την εκτεταμένης ακρίβειας. Οταν έχουμε αριθμό εκτεταμένης μονής ακρίβειας διαθέσ ιμο υπάρχει μια πολύ απλή μέθοδος μετατρέποντας το δεκαδικό αριθμό σ ε δυαδικό μονής ακρίβειας. Εκθέτης Δεδομένου ότι ο εκθέτης μπορεί να είναι θετικός ή αρνητικός, πρέπει να επιλέξουμε μία μέθοδο η οποία να αναπαρισ τά το πρόσ ημο του. Δύο σ υνήθεις μεθόδους οι οποίοι αναπαρισ τούν προσ ημασ μένους αριθμούς είναι το πρόσ ημο μέτρο και το σ υμπλήρωμα ως προς δύο. Το σ ύσ τημα πρόσ ημο μέτρο χρησ ιμοποιείται σ το πρόσ ημο της mantissa σ τις αναπαρασ τάσ εις του προτύπου IEEE: το ένα bit χρησ ιμοποιείται για πρόσ ημο και τα υπόλοιπα bits αντιπροσ ωπεύουν το μέτρο του αριθμού. Το σ υμπλήρωμα ως προς δύο χρησ ιμοποιείται σ υχνά σ την αριθμητική ακέραιων. Σε αυτό το σ χέδιο, ένας αριθμός σ το διάσ τημα [ 2 p 1, 2 p 1 1 ] αναπαρίσ ταται από το μικρότερο μη αρνητικό αριθμό ο οποίος ταιριάζει σ ε αυτόν modulo 2 p. Το δυαδικό πρότυπο IEEE δεν χρησ ιμοποιεί καμία από αυτές τις μεθόδους ώσ τε να αναπαρασ τήσ ει τον εκθέτη, αλλά χρησ ιμοποιεί μια biased αναπαράσ τασ η. Στην περίπτωσ η της μονής ακρίβειας, όπου ο εκθέτης είναι αποθηκευμένα σ ε 8 bits, το bias είναι 127(για διπλή ακρίβεια είναι 1023). Αυτό σ ημαίνει είναι ότι εάν κ είναι η τιμή σ τα bits του εκθέτη αυτό ερμηνεύεται ως απροσ ήμασ τος ακέραιος, τότε ο εκθέτης του αριθμού κινητής υποδιασ τολής είναι κ-127. Αυτό ονομάζεται σ υχνά unbiased εκθέτης ώσ τε να ξεχωρίσ ει από τον biased εκθέτη κ. Σύμφωνα με τον Πίνακα 1.1, οι αριθμοί μονής ακρίβειας έχουν e max = 127 και e min = 126. Ο λόγος για τον οποίο ισ χύει ότι e min < e max είναι επειδή το αντίσ τροφο του μικρότερου αριθμού 1 ( ) δεν θα υπερχειλίσ ει. Αν και είναι αλήθεια ότι το αντίσ τροφο του μεγαλύτερου αριθμού θα emin 2 υποχειλήσ ει, η υποχείλισ η είναι σ υνήθως λιγότερο σ οβαρή από την υπερχείλισ η. Στο πρότυπο IEEE 9
μονής ακρίβεια, αυτό σ ημαίνει ότι το εύρος των biased εκθετών είναι μεταξύ e min 1 = 127 και e max + 1 = 128, ενώ οι unbiased εκθέτες έχουν εύρος μεταξύ του 0 και του 255, οι οποίοι είναι οι μη αρνητικοί αριθμοί οι οποίοι αναπαρίσ τανται με 8 bits. Πράξεις Στο πρότυπο IEEE απαιτείται ότι το αποτέλεσ μα της πρόσ θεσ ης, της αφαίρεσ ης, του πολλαπλασ ιασ μού και της διαίρεσ ης είναι σ τρογγυλοποιημένο επακριβώς. Δηλαδή, το αποτέλεσ μα πρέπει να υπολογίζεται ακριβώς και σ τη σ υνέχεια να σ τρογγυλοποιείται σ το πλησ ιέσ τερο αριθμό κινητής υποδιασ τολής χρησ ιμοποιώντας σ τρογγυλοποίησ η σ ε άρτιο. Το κομμάτι αυτό εισ άγει Guard Digits, τα οποία παρέχουν έναν πρακτικό τρόπο υπολογισ μού διαφορών εξασ φαλίζοντας παράλληλα ότι μικρό σ χετικό σ φάλμα. Ωσ τόσ ο, οι υπολογισ τές με ένα μόνο Guard Digit δεν δίνουν πάντα το ίδιο αποτέλεσ μα όταν υπολογίζουν το ακριβές αποτέλεσ μα και σ τη σ υνέχεια σ τρογγυλοποιούν. Με την εισ αγωγή ενός δεύτερου Guard Digit και ενός τρίτου sticky bit, οι διαφορές υπολογίζονται με ελάχισ το περισ σ ότερο κόσ τος από ότι με απλό Guard Digit, αλλά το αποτέλεσ μα είναι το ίδιο εάν η διαφορά υπολογίσ τηκε ακριβώς και σ τη σ υνέχεια σ τρογγυλοποιήθηκε. Συνεπώς, το πρότυπο μπορεί να εφαρμοσ τεί αποτελεσ ματικά. Ενας λόγος για τον πλήρη προσ διορισ μό των αποτελεσ μάτων των αριθμητικών πράξεων είναι η βελτίωσ η της δυνατότητας μεταφοράς του λογισ μικού. Οταν ένα πρόγραμμα μεταφέρεται ανάμεσ α σ ε δύο μηχανές οι οποίες υποσ τηρίζουν το πρότυπο IEEE τότε, αν υπάρχει ενδιάμεσ ο αποτέλεσ μα το οποίο διαφέρει, πρέπει να οφείλεται σ ε σ φάλματα λογισ μικού και όχι από διαφορές σ την αριθμητική. Ενα άλλο πλεονέκτημα του λεπτομερών προδιαγραφών είναι ότι καθισ τά ευκολότερη την μελέτη σ χετικά με την αριθμητική κινητής υποδιασ τολής. Οι αποδείξεις σ την αριθμητική κινητής υποδιασ τολής είναι αρκετά δύσ κολες και χωρίς να χρειάζεται κάποιος να ασ χοληθεί με πλήθος περιπτώσ εων οι οποίες προκύπτουν από τις πολλαπλές μορφές της αριθμητικής. Ακριβώς όπως τα προγράμματά ακέραιων σ τα οποία μπορεί να αποδειχθεί η ορθότητα τους, έτσ ι μπορεί να γίνει και σ τα προγράμματα με πράξεις κινητής υποδιασ τολής. Αν και αυτό το οποίο τελικά αποδεικνύεται σ ε αυτή την περίπτωσ η είναι αν το σ φάλμα σ τη σ τρογγυλοποίησ η του αποτελέσ ματος ικανοποιεί σ υγκεκριμένους περιορισ μούς. Οταν για ένα αλγόριθμο έχει αποδειχθεί η ορθότητα του για την αριθμητική του προτύπου IEEE, θα λειτουργεί σ ωσ τά σ ε οποιοδήποτε μηχάνημα υποσ τηρίζει το πρότυπο IEEE. Ο Brown πρότεινε αξιωμάτων σ χετικά με την αριθμητική κινητής υποδιασ τολής τα οποία περιλαμβάνουν την πλειοψηφία του υπάρχοντος υλικού. Ωσ τόσ ο, οι αποδείξεις αυτές δεν πισ τοποιούν αλγορίθμους οι οποίοι απαιτούν χαρακτηρισ τικά τα οποία δεν υπάρχουν σ ε όλο το υλικό. Επιπλέον, τα αξιώματα του Brown είναι πιο σ ύνθετα από τον απλό ορισ μό πράξεων οι οποίοι εκτελούνται με ακρίβεια και σ τη σ υνέχεια σ τρογγυλοποιούνται. Συνεπώς, οι αποδείξεις θεωρημάτων από τα αξιώματα του Brown είναι σ υνήθως πιο δύσ κολες από ότι να αποδειχθούν ν υποθέτοντας ότι οι πράξεις σ τρογγυλοποιημένες επακριβώς. Δεν υπάρχει πλήρης σ υμφωνία σ χετικά με τις πράξεις κινητής υποδιασ τολής τις οποίες το πρότυπο πρέπει να καλύπτει. Εκτός από τις βασ ικές λειτουργίες +,,, / το πρότυπο IEEE προσ διορίζει επίσ ης ότι η τετραγωνική ρίζα, το υπόλοιπο και η μετατροπή μεταξύ ακέραιων αριθμών και αριθμών κινητής υποδιασ τολής είναι σ ωσ τά σ τρογγυλοποιημένες. Επιπλέον, υπάρχει η απαίτησ η ότι η μετατροπή μεταξύ της εσ ωτερικής αναπαράσ τασ ης και των δεκαδικών να είναι σ ωσ τά σ τρογγυλοποιημένης με εξαίρεσ η τις πολύ μεγάλες τιμές. Οι Kulisch και Miranker πρότειναν την προσ θήκη του εσ ωτερικού γινομένου μεταξύ των πράξεων οι οποίες έχουν καθορισ τεί. Επισ ημαίνουν ότι όταν το εσ ωτερικό γινόμενο υπολογίζεται με βάσ η την αριθμητική του προτύπου IEEE, η τελική απάντησ η ενδέχεται να είναι αρκετά λανθασ μένη. Για παράδειγμα, τα αθροίσ ματα τα οποία είναι ειδική περίπτωσ η εσ ωτερικών γινομένων και το άθροισ μα 10
(( 2 10 30 + 10 30) 10 30) 10 30 ισ ούται ακριβώς με 10 30, αλλά σ ε ένα μηχάνημα το οποίο υποσ τηρίζει την αριθμητική του προτύπου IEEE αποτέλεσ μα το οποίο υπολογίζεται ισ ούται με 10 30. Υπάρχει η δυνατότητα να υπολογισ τούν εσ ωτερικά γινόμενα με ακρίβεια 1 ulp με λιγότερο υλικό από όσ ο χρειάζεται για την κατασ κευή ενός γρήγορου πολλαπλασ ιασ τή. Ολες οι πράξεις οι οποίες αναφέρονται σ το πρότυπο απαιτείται να είναι σ τρογγυλοποιημένες επακριβώς, εκτός από τη μετατροπή μεταξύ δεκαδικών και δυαδικών. Ο λόγος είναι ότι υπάρχουν αποδοτικοί αλγόριθμοι επακριβούς σ τρογγυλοποίησ ης για το σ ύνολο των πράξεων, εκτός από τις μετατροπές. Για τις μετατροπές, ο πιο γνωσ τός αποδοτικός αλγόριθμος παράγει αποτελέσ ματα τα οποία είναι ελαφρώς χειρότερα από ότι σ τρογγυλοποιημένα επακριβώς. Στο πρότυπο IEEE δεν απαιτείται οι υπερβατικές σ υναρτήσ εις να σ τρογγυλοποιούνται ακριβώς ε- ξαιτίας του table maker's dilemma. Επεξηγηματικά, αν υποθέσ ουμε ότι δημιουργούμε έναν πίνακα της εκθετικής σ υνάρτησ ης σ ε τέσ σ ερα σ ημεία. Στη σ υνέχεια, e 1.626 = 5.0835 τότε το αποτέλεσ μα πρέπει να σ τρογγυλοποιηθεί σ το 5.083 ή 5.084 Αν το e 1.626 υπολογισ τεί με περισ σ ότερη ακρίβεια, γίνεται 5,08350. Δεδομένου ότι, η εκθετική σ υνάρτησ η είναι υπερβατική, η αύξησ η της ακρίβειας σ υνεχίζεται αυθαίρετα πριν διακρίνουμε αν e 1.626 = 5.083500... 0ddd ή e 1.626 = 5.083499... 9ddd. Ετσ ι, δεν είναι πρακτικός ο προσ διορισ μός της ακρίβειας των υπερβατικών σ υναρτήσ εων και είναι το ίδιο εάν υπολογίζονται με άπειρη ακρίβεια και μετά σ τρογγυλοποιούνται. Μια άλλη προσ έγγισ η θα ήταν να προσ εγγισ τούν οι υπερβατικές σ υναρτήσ εις αλγοριθμικά. Αλλά δεν φαίνεται να υπάρχει ένας ενιαίος αλγόριθμος ο οποίος να λειτουργεί καλά σ ε όλες τις αρχιτεκτονικές του υλικού. Η Ορθολογική προσ έγγισ η, το CORDIC και μεγάλοι πίνακες είναι τρεις διαφορετικές τεχνικές για τον υπολογισ μό των υπερβατικών σ υναρτήσ εων σ ε σ ύγχρονα μηχανήματα. Κάθε μία είναι κατάλληλη για διαφορετική κατηγορία υλικού και επί του παρόντος δεν υπάρχει ενιαίος αλγόριθμος ο οποίος να λειτουργεί αποδεκτά σ το ευρύ φάσ μα του παρόντος υλικού. 1.8.3 Ειδικές Ποσ ότητες Σε ορισ μένο υλικό κινητής υποδιασ τολής, κάθε κάθε σ υσ τάδα από bits αντιπροσ ωπεύει ένα έγκυρο αριθμό κινητής υποδιασ τολής. Το IBM System/370 είναι ένα σ χετικό παράδειγμα. Από την άλλη, ο VAX αντισ τοιχεί κάποιες σ υσ τάδες bit αναπαρισ τώντας ειδικούς αριθμούς οι οποίοι ονομάζονται δεσ μευμένα τελούμενα. Η ιδέα αυτή προέρχεται από το CDC 6600, το οποίο είχε σ υσ τάδες bit για τις ειδικές ποσ ότητες INDEFINITE και INFINITY. Το πρότυπο IEEE σ υνεχίζει αυτή την παράδοσ η έχοντας NaN (Not a Number) και άπειρο. Χωρίς οποιεσ δήποτε ειδικές ποσ ότητες, δεν υπάρχει δυνατότητα να διαχειρισ θούν περιπτώσ εις εξαιρέσ εων όπως η τετραγωνική ρίζα ενός αρνητικού αριθμού με την ματαίωσ η του υπολογισ μού. Σύμφωνα με την FORTRAN του IBM System/370, η ενέργεια η οποία επεσ ήμανε τον υπολογισ μό της τετραγωνικής ρίζας αρνητικού αριθμού, ήταν η εκτύπωσ η ενός μηνύματος σ φάλματος. Δεδομένου ότι κάθε σ υσ τάδα bits αναπαρισ τά ένα έγκυρο αριθμό, η τιμή η οποία επισ τρέφεται σ τον υπολογισ μό της τετραγωνικής ρίζας πρέπει να είναι κάποιος αριθμός κινητής υποδιασ τολής. Στην περίπτωσ η της FORTRAN του System/370, εκτελούνταν η πράξη 4 = 2 αντίθετα σ την αριθμητική του IEEE επισ τρέφεται NaN σ ε όμοια περίπτωσ η. Το πρότυπο IEEE ορίζει τις ακόλουθες ειδικές τιμές (βλέπε πίνακα 1.2): ±0, ±, denormalized αριθμούς και NaN. Αυτές όλες οι ειδικές τιμές κωδικοποιούνται με εκθέτες είτε e max +1 είτε e min 1 (έχει επισ ημανθεί ότι το 0 έχει εκθέτη e min 1). NaN Παραδοσ ιακά, ο υπολογισ μός του 0 0 ή της 1 αντιμετωπιζόταν ως ένα ανεπανόρθωτο σ φάλμα το οποίο προκαλεί τερματισ μό σ τον υπολογισ μό. Ωσ τόσ ο, υπάρχουν περιπτώσ εις όπου υπάρχει νόημα ένας 11
Εκθέτης Κλάσ μα Αναπαράσ τασ η e = e min 1 f = 0 ±0 e = e min 1 f 0 0.f 2 emin e min e e max 1.f 2 e e = e max 1 f = 0 e = e max + 1 f 0 NaN Πίνακας 1.2: Ειδικές Τιμές σ το πρότυπο IEEE υπολογισ μό να σ υνεχίσ ει σ ε μια τέτοια κατάσ τασ η. Σκεφτείτε μια υπορουτίνα η οποία βρίσ κει τα μηδενικά μίας σ υνάρτησ ης f, ονομάζοντας τη zero(f). Τέτοιου είδους σ υναρτήσ εις, απαιτούν από τον χρήσ τη να ορίσ ει ένα διάσ τημα [a, b], όπου ορίζεται η σ υνάρτησ η και θα αναζητηθεί η ρίζα έτσ ι, η υπορουτίνα αυτή ονομάζεται zero(f, a, b). Οι ρουτίνες εύρεσ ης ρίζας, εκτελούνται διερευνώντας διάφορες τιμές για τη σ υνάρτησ η f. Αν διερευνηθεί μία τιμή εκτός του πεδίου ορισ μού της f, ο αλγόριθμος μπορεί να υπολογίσ ει 0 0 ή 1, τερματίζοντας τον υπολογισ μό χωρίς λόγο ματαιώνοντας τη διαδικασ ία εύρεσ ης ρίζας. Αυτό μπορεί να αποφευχθεί, εισ άγοντας μία ειδική τιμή η οποία ονομάζεται NaN και καθορίζοντας ότι ο υπολογισ μός εκφράσ εων όπως 0 0 ή 1 παράγουν NaN, αντί για τερματισ μό. Ο Πίνακας 1.3 δίνει μία σ ειρά με μερικές ενδεικτικές κατασ τάσ εις σ τις οποίες προκαλείται NaN. Πλέον, όταν η zero(f) βρεθεί εκτός του πεδίου ορισ μού της f, η σ υνάρτησ η θα επισ τρέψει NaN και η διαδικασ ία σ υνεχίζεται. Δεδομένων των παραπάνω, είναι εύκολο να εξετάσ ουμε ποιο πρέπει να είναι το αποτέλεσ μα του σ υνδυασ μού NaN με ένα σ υνηθισ μένο αριθμό κινητής υποδιασ τολής. Ας υποθέσ ουμε ότι η τελική δήλωσ η της zero είναι return (-b + sqrt(d)) / (2*a). Αν d < 0, τότε η zero πρέπει να επισ τρέψει NaN. Επειδή d < 0, η sqrt(d) είναι NaN, και -b + sqrt(d) θα είναι NaN, εφόσ ον το άθροισ μα NaN με οποιονδήποτε άλλο αριθμός είναι NaN. Ομοίως, εάν ένα τελούμενο της διαίρεσ ης είναι NaN, το πηλίκο θα είναι NaN. Συνοψίζοντας, όταν ένα NaN σ υμμετέχει σ ε πράξεις κινητής υποδιασ τολής, το αποτέλεσ μα είναι NaN. Πράξη Αιτία NaN + + ( ) 0 / 0/0, / modulo x % 0, % y x, x < 0 Πίνακας 1.3: Πράξεις οι οποίες παράγουν NaN Μια άλλη προσ έγγισ η, σ τη σ ύνταξη ρουτίνας για την εύρεσ η ρίζας δεν απαιτεί από το χρήσ τη να εισ άγει πεδίο ορισ μού αλλά να χρησ ιμοποιεί σ ήματα. Η ρουτίνα χρησ ιμοποιεί ένα πρόγραμμα χειρισ μού σ ημάτων για εξαιρέσ εις οι οποίες σ χετίζονται με κινητή υποδιασ τολή. Το πρόβλημα με αυτήν την προσ έγγισ η είναι ότι κάθε γλώσ σ α έχει διαφορετική μέθοδο χειρισ μού των σ ημάτων και έτσ ι δεν υπάρχει δυνατότητα φορητότητας. Στο πρότυπο IEEE 754, τα NaN σ υχνά αναπαρισ τώνται ως αριθμοί κινητής υποδιασ τολής με εκθέτη e max + 1 και μηδενική mantissa. Στις υλοποιήσ εις δεν υπάρχει περιορισ μός ώσ τε να τεθούν πληροφορίες οι οποίες εξαρτώνται από το σ ύσ τημα σ τη mantissa. Συνεπώς, δεν υπάρχει ένα μοναδικό NaN, αλλά ένα ολόκληρο σ ύνολο NaN. Οταν ένα NaN και ένας σ υνηθισ μένος αριθμό κινητής υποδιασ τολής σ υνδυασ τούν, το αποτέλεσ μα πρέπει να είναι ίδιο με το τελούμενο NaN. Ετσ ι, αν το αποτέλεσ μα ενός μεγάλου υπολογισ μού είναι NaN, πληροφορίες οι οποίες εξαρτώνται από το σ ύσ τημα σ τη mantissa είναι οι πληροφορίες οι οποίες δημιουργήθηκαν όταν σ υνέβη το πρώτο NaN σ τον υπολογισ μό. Πρακτικά, 12
υπάρχει ένα ζήτημα όσ ο αναφορά την παραπάνω πρότασ η. Αν και τα δύο τελούμενα είναι NaN τότε το αποτέλεσ μα είναι ένα από αυτές τα NaN, αλλά μπορεί να μην είναι το NaN το οποίο δημιουργήθηκε πρώτο. Άπειρο Ακριβώς όπως το NaN βοηθάει, ώσ τε ο υπολογισ μός να σ υνεχισ τεί όταν εμφανίζονται εκφράσ εις όπως 0 0 ή 1, το άπειρο παρέχει τον τρόπο ώσ τε ο υπολογισ μός να σ υνεχισ τεί όταν προκύψει υπερχείλισ η. Αυτό είναι ασ φαλέσ τερο από την επισ τροφή απλά του μεγαλύτερου αριθμού ο οποίος μπορεί να αναπαρασ ταθεί. Για παράδειγμα, θεωρήσ ουμε τον υπολογισ μό x 2 + y 2 με β=10, p=3 και e max = 98. Αν x = 3 10 70 και y = 4 10 70 τότε το x 2 θα υπερχειλίσ ει και θα αντικατασ ταθεί από το 9.99 10 98. Ομοίως, το y 2 και x 2 + y 2 θα υπερχειλίσ ουν και θα αντικατασ ταθούν από το 9.99 10 98. Ετσ ι το τελικό αποτέλεσ μα θα είναι 9.99 10 98 = 3.16 10 49 το οποίο είναι εντελώς λανθασ μένο, αφού το σ ωσ τό αποτέλεσ μα είναι 5 10 70. Στην αριθμητική του IEEE, το αποτέλεσ μα του x 2 είναι, όπως και των y 2, x 2 + y 2 και x 2 + y 2. Ετσ ι, το τελικό αποτέλεσ μα είναι, το οποίο είναι προτιμότερο από την επισ τροφή ενός κανονικού αριθμού κινητής υποδιασ τολής ο οποίος απέχει πολύ από τη σ ωσ τή απάντησ η. Η διαίρεσ η 0 επισ τρέφει NaN. Ωσ τόσ ο, ένας αριθμός οποίος διαιρείται με το μηδέν επισ τρέφει άπειρο 0 όπως τα 1 1 =, =. Ο λόγος για αυτή τη διάκρισ η είναι ο εξής: εάν η f(x) 0 και η g(x) 0 0 0 καθώς το x τείνει σ ε κάποιο όριο, τότε f(x) μπορούν να πάρουν οποιαδήποτε τιμή. Για παράδειγμα, αν g(x) f(x) = sin(x) και g(x) = x, τότε f(x) f(x) 1 όταν το x 0. Αλλά όταν f(x) = 1 cos(x), g(x) g(x) 0. Οταν έχουμε 0 0 σ ε μία οριακή κατάσ τασ η ενός πηλίκου δύο πολύ μικρών αριθμών, τότε το 0 0 μπορούσ ε να αντιπροσ ωπεύει οτιδήποτε. Ετσ ι, σ το πρότυπο IEEE το 0 έχει αποτελέσ ματα NaN. Αλλά όταν 0 c > 0, f(x) c και g(x) 0 τότε f(x) ± για κάθε αναλυτική σ υνάρτησ η f και g. Αν g(x) < 0 g(x) για μικρά x, τότε f(x), διαφορετικά το όριο είναι +. Ετσ ι, το πρότυπο IEEE ορίζει ότι g(x) c = ±, εφόσ ον το c 0. Το πρόσ ημο του εξαρτάται από τα πρόσ ημα του ς και του 0 κατά τον 0 σ υνήθη τρόπο, έτσ ι ώσ τε 10 = και 10 = +. Υπάρχει διάκρισ η μεταξύ του το οποίο είναι 0 0 αποτέλεσ μα υπερχείλισ ης και του το οποίο είναι αποτέλεσ μα διαίρεσ ης με το μηδέν ελέγχοντας τους σ ηματοφόρους κατάσ τασ ης. Ο κανόνας για τον προσ διορισ μό του αποτελέσ ματος μιας πράξης η οποία έχει άπειρο ως τελούμενο είναι απλός: αντικαθίσ ταται το άπειρο με έναν πεπερασ μένο αριθμό x και υπολογίζεται το όριο όταν το 3 3 x. Ετσ ι, = 0 διότι lim x = 0. Ομοια και για τα 4 = και =. Οταν το όριο δεν υπάρχει, το αποτέλεσ μα είναι NaN, οπότε θα είναι NaN. Αυτό σ υμφωνεί με την επιχειρηματολογία η οποία χρησ ιμοποιήθηκε ώσ τε να σ υμπεράνουμε ότι 0 θα πρέπει να είναι NaN. 0 Οταν το κομμάτι μίας έκφρασ ης αποτιμάται ως NaN, η τιμή ολόκληρης της έκφρασ ης είναι επίσ ης NaN. Στην περίπτωσ η των ± ωσ τόσ ο η τιμή της έκφρασ ης ενδέχεται να είναι ένα τυπικός αριθμός κινητής υποδιασ τολής, εξαιτίας των κανόνων, όπως του 1 = 0. Ενα πρακτικό παράδειγμα το οποίο χρησ ιμοποιεί κανόνες για τις αριθμητικές πράξεις του απείρου. Αν θεωρήσ ουμε τον υπολογισ μό της σ υνάρτησ ης x (x 2. Αυτό είναι ένας δύσ κολος τύπος, γιατί εκτός του ότι θα υπερχειλίσ ει όταν το x γίνει + 1) μεγαλύτερο από ββ emax 2, αλλά και η αριθμητική απείρου θα δώσ ει λανθασ μένη απάντησ η προκύπτοντας 0, αντί για έναν αριθμό κοντά σ το 1 x. Ωσ τόσ ο, η x (x 2 + 1) μπορεί να ξαναγραφεί ως 1 (x + x 1 ). Η 13
βελτιωμένη έκφρασ η δεν θα υπερχειλίσ ει πρόωρα και αριθμητικής του απείρου υπερχείλισ ης θα έχει την 1 σ ωσ τή τιμή όταν x = 0 : (0 + 0 1 ) = 1 (0 + ) = 1 = 0. Χωρίς τις αριθμητικές πράξεις του απείρου, 1 η έκφρασ η (x + x 1 απαιτεί διερεύνησ η όταν το x = 0, η οποία δεν προσ θέτει μόνο επιπλέον εντολές, ) αλλά μπορεί επίσ ης να αποδιοργανώσ ει το pipelining. Το παράδειγμα αυτό δείχνει ένα γεγονός, ότι δηλαδή με την αριθμητική του απείρου αποφεύγεται σ υχνά η ανάγκη για ειδικές περίπτωσ η ελέγχου. Ωσ τόσ ο, οι τύποι είναι αναγκαίο να ελέγχονται προσ εκτικά για να πισ τοποιείται ότι έχουν κανονική σ υμπεριφορά σ το άπειρο. Προσ ημασ μένο Μηδέν Το μηδέν αναπαρίσ ταται από τον εκθέτη e min 1 και την μηδενική mantissa. Δεδομένου ότι το bit προσ ήμου παίρνει δύο διαφορετικές τιμές, υπάρχουν δύο μηδενικά το +0 και το -0. Αν γινόταν μια διάκρισ η σ υγκρίνοντας το +0 και το -0, απλά τεσ τ όπως if (x==0) θα είχαν πολύ απρόβλεπτη σ υμπεριφορά, ανάλογα με το πρόσ ημο του x. Ετσ ι, το πρότυπο IEEE ορίζει τη σ ύγκρισ η έτσ ι ώσ τε να ισ χύει ότι +0 = 0, αντί για 0 < +0 παρόλο που το πρότυπο IEEE δεν αγνοεί το πρόσ ημο. Οταν ένας πολλαπλασ ιασ μός ή μία διαίρεσ η δώσ ει σ αν αποτέλεσ μα προσ ημασ μένο μηδέν, ισ χύουν οι σ υνήθεις κανόνες προσ ήμου σ τον υπολογισ μό του προσ ήμου της απάντησ ης. Ετσ ι για παράδειγμα, 3 (+0) = +0 και +0/ 3 = 0. Αν το μηδέν δεν είχε πρόσ ημο, τότε η πράξη 1 1 όταν x = ±. Ο λόγος είναι ότι, τα τρόπος για να αποκατασ ταθεί η ισ χύς της ταυτότητας 1 1 1 + και 1 κάνουν και τα δύο 0 και το 1 0 x x = x δεν θα ίσ χυε κάνει. Ενας = x είναι να υπάρχει μόνο ένα είδος απείρου, ωσ τόσ ο, αυτό ότι θα είχε ως αποτέλεσ μα να χάνεται το πρόσ ημο μίας υπερχειλισ μένης ποσ ότητας. Ενα άλλο παράδειγμα της χρήσ ης της προσ ημασ μένου μηδέν σ χετίζεται με την υποχείλισ η και με τις ασ υνεχείς σ υναρτήσ εις σ το 0, όπως ο λογάριθμος. Στην αριθμητική του προτύπου IEEE, είναι φυσ ικό να ορισ τεί το log(0) = και το log(x) να είναι NaN όταν x < 0, υποθέτοντας ότι το x αναπαρισ τά ένα μικρό αρνητικό αριθμό ο οποίος υποχειλίζει σ το μηδέν. Χάρη σ το προσ ημασ μένο μηδέν, το x είναι αρνητικό, έτσ ι ο λογάριθμος επισ τρέφει NaN. Αλλά, αν δεν υπήρχε το προσ ημασ μένο μηδέν, η σ υνάρτησ η του λογάριθμου δεν θα μπορούσ ε να διακρίνει έναν υποχειλισ μένο αρνητικό αριθμός από το ίδιο το μηδέν σ υνεπώς θα έπρεπε να επισ τρέψει. Ενα άλλο παράδειγμα μιας σ υνάρτησ ης με ασ υνέχεια σ το μηδέν είναι η σ υνάρτησ η signum, η οποία επισ τρέφει το πρόσ ημο ενός αριθμού. Ισ ως η πιο ενδιαφέρουσ α χρήσ η του προσ ημασ μένου μηδέν εμφανίζεται σ ε αριθμητικές πράξεις 1 μιγαδικών. Ενα απλό παράδειγμα είναι η μελέτη της εξίσ ωσ ης z = 1. Αυτό ισ χύει σ ίγουρα όταν z 1 z 0. Αν z = 1, ο υπολογισ μός δίνει ( 1) = 1 1 = i και = 1 1 1 i = i. Ετσ ι, z 1. z Το πρόβλημα μπορεί να αποδοθεί σ το γεγονός ότι η τετραγωνική ρίζα είναι πλειότιμη σ υνάρτησ η και δεν υπάρχει τρόπος να επιλεγούν τιμές έτσ ι ώσ τε να είναι σ υνεχής σ ε ολόκληρο το μιγαδικό επίπεδο. Ωσ τόσ ο, η τετραγωνική ρίζα είναι σ υνεχής όταν περικόπτεται ένας κλάδος ο οποίος αποτελείται από όλους τους αρνητικούς πραγματικούς αριθμούς και αποκλεισ τούν από την σ ύμβασ η. Αυτό αφήνει το πρόβλημα για τους πραγματικούς αριθμούς, οι οποίοι είναι της μορφής x + i0, όπου x > 0. Το προσ ημασ μένο μηδέν δίνει την ιδανικότερη λύσ η αυτού του προβλήματος. Οι αριθμοί της μορφής x + i(+0) έχουν πρόσ ημο i x και οι αριθμοί της μορφής x + i( 0) σ τον κλάδο τον οποίο θέλουμε να αποκόψουμε έχουν πρόσ ημο i x. 1 Πίσ ω σ το πρόβλημα z = 1, αν z = 1 = 1 + i0, τότε το 1 z z = 1 1 + i0 = 1 i0 1 i0 1 = ( 1 + i0)( 1 i0) ( 1) 2 = 1 + i( 0), και έτσ ι 02 z = 1 + i( 0) = i, ενώ η 1 = 1 z i = 14
i. Ετσ ι, οι αριθμητικές πράξεις σ το πρότυπο IEEE διατηρούν την ισ χύ της ταυτότητας όλων των ζ. Παρά το γεγονός ότι η διάκρισ η μεταξύ +0 και -0 έχει πλεονεκτήματα, περισ τασ ιακά προκαλεί σ ύγχυσ η. Για παράδειγμα, το προσ ημασ μένο μηδέν κατασ τρέφει την ισ χύ της σ χέσ ης x = y 1 x = 1 y το οποίο είναι είναι ψευδές όταν x = 0 και y = 0. Ωσ τόσ ο, η επιτροπή του IEEE αποφάσ ισ ε ότι τα πλεονεκτήματα της αξιοποίησ ης του προσ ημασ μένου μηδέν υπερτερούν από τα μειονεκτήματα. Denormalized Αριθμοί Θεωρώντας κανονικοποιημένους αριθμούς κινητής υποδιασ τολής με β=10, p=3, και e min = 98. Οι αριθμοί x = 6.87 10 97 και y = 6.81 10 97 φαίνονται να είναι απόλυτα κανονικοί αριθμοί κινητής υποδιασ τολής, οι οποίες είναι μεγαλύτερες κατά έναν παράγοντα 10 από το μικρότερη αριθμό κινητής υ- ποδιασ τολής 1.00 10 98. Παρόλα αυτά, έχουν μία περίεργη ιδιότητα: x y = 0, ακόμη κι αν x y. Ο λόγος είναι ότι x y = 0.06 10 97 = 6.0 10 99 είναι πολύ μικρός ώσ τε να αναπαρασ ταθεί ως κανονικός αριθμός και σ υνεπώς αποβιβάζεται σ το μηδέν. Είναι πολύ σ ημαντικό την σ ημασ ία της διατήρησ ης της ιδιότητας x = y x y = 0. Είναι πολύ εύκολο, γράφοντας ένα κομμάτι κώδικα, if(x y) then z=1/(x-y), πολύ αργότερα το πρόγραμμα να τερματίζει ανεπιτυχώς εξαιτίας μίας διαίρεσ ης με το μηδέν. Η εύρεσ η σ φαλμάτων όπως αυτό είναι δύσ κολη και χρονοβόρα. Σε ένα πιο φιλοσ οφικό επίπεδο, σ τη βιβλιογραφία της Επισ τήμης Υπολογισ τών σ υχνά επισ ημαίνεται ότι ακόμη κι αν σ ήμερα δεν έχουμε την δυνατότητα να αποδείξουμε την ορθότητα μεγάλων προγραμμάτων, ο σ χεδιασ μός προγραμμάτων με την ιδέα της απόδειξης σ υχνά τους οδηγεί σ ε καλύτερο κώδικα. Για παράδειγμα, εισ άγοντας σ ταθερές είναι αρκετά χρήσ ιμο, ακόμα και αν δεν πρόκειται να χρησ ιμοποιηθούν ως μέρος της απόδειξης. υποδιασ τολής είναι ακριβώς όπως κάθε άλλος κώδικας. Ο κώδικας με πράξεις κινητής Το πρότυπο IEEE χρησ ιμοποιεί τους denormalized αριθμούς οι οποίοι είναι το πιο αμφιλεγόμενο μέρος του προτύπου και σ ε αυτό πιθανώς να οφείλεται η μεγάλη καθυσ τέρησ η σ την έγκρισ η του 754. Τα περισ σ ότερα High Performance Hardware τα οποία ισ χυρίζονται ότι είναι σ υμβατά με το πρότυπο IEEE δεν υποσ τηρίζουν τους denormalized αριθμούς άμεσ α, αλλά παγιδεύονται όταν χρησ ιμοποιούν ή παράγουν denormals αφήνοντας σ το λογισ μικό να προσ ομοιώσ ει το πρότυπο ΙΕΕΕ. Αυτό είναι το αποτέλεσ μα μίας από τις προβληματικές πλευρές του προτύπου. Τα προγράμματα τα οποία υποχειλίζουν σ υχνά εκτελούνται εμφανώς πιο αργά σ το υλικό το οποίο χρησ ιμοποιεί software traps. Η ιδέα πίσ ω από τους denormalized αριθμούς είναι πολύ απλή. Οταν ο εκθέτης είναι e min, η mantissa δεν πρέπει να ομαλοποιηθεί, έτσ ι ώσ τε όταν β=10, p=3, και e min = 98, ο 1.00 10 98 δεν είναι πλέον ο μικρότερος αριθμός κινητής υποδιασ τολής, επειδή ο 0.98 10 98 είναι επίσ ης ένας αριθμός κινητής υποδιασ τολής. Υπάρχει ένα εμπόδιο όταν β=2 και ένα κρυφό bit χρησ ιμοποιείται δεδομένου ότι, ένας αριθμός με εκθέτη e min θα έχει πάντα μια mantissa μεγαλύτερη ή ίσ η με 1.0 εξαιτίας του κρυφού bit το οποίο προηγείται. Η λύσ η είναι παρόμοια με εκείνη για την αναπαράσ τασ η του μηδέν. Ο εκθέτης e min χρησ ιμοποιείται σ την αναπαράσ τασ η των denormals δηλαδή, αν τα bits σ τη mantissa είναι b 1, b 2,..., b p 1 και η τιμή του εκθέτη είναι e, τότε όταν e > e min 1 ο αριθμός ο οποίος αναπαρίσ ταται είναι ο 1.b 1, b 2,..., b p 1 2 e ενώ, όταν e = e min 1, ο αριθμός ο οποίος αναπαρίσ ταται είναι ο 0.b 1, b 2,..., b p 1 2 e+1. Το +1 σ τον εκθέτη είναι απαραίτητο επειδή οι denormals έχουν εκθέτης e min και όχι e min 1. Σύμφωνα με το παράδειγμα σ την αρχή της παραγράφου, όταν β=10, p=3, και e min = 98, x = 6.87 10 97 και y = 6.81 10 97. Με την χρήσ η denormals το x-y δεν υποβαθμίζεται σ το μηδέν αντιθέτως, αναπαρίσ ταται από τον denormalized αριθμό 0.6 10 98. Το φαινόμενο αυτό ονομάζεται σ ταδιακή υποχείλισ η. Είναι εύκολο να εξακριβωθεί ότι πάντα ισ χύει η σ χέσ η x = y x y = 0 όταν χρησ ιμοποιείται σ ταδιακή υποχείλισ η. 15
Σχήμα 1.2: Υποβάθμισ η σ το μηδέν σ ε σ ύγκρισ η με την Σταδιακή Υποχείλισ η Στην Εικόνα 1.2 απεικονίζονται denormalized αριθμοί. Το πρώτο από τα δύο σ χήματα δείχνει τους κανονικοποιημένους αριθμούς κινητής υποδιασ τολής. Επισ ημαίνεται ότι το χάσ μα μεταξύ του 0 και του μικρότερου κανονικοποιημένου αριθμού είναι 1.0 β emin. Αν το αποτέλεσ μα μίας πράξης κινητής υποδιασ τολής εντάσ σ εται σ ε αυτό το διάσ τημα υποβαθμίζεται σ το μηδέν. Ο δεύτερος άξονας δείχνει τι σ υμβαίνει όταν denormals προσ τίθενται σ το σ ύνολο από αριθμούς κινητής υποδιασ τολής. Το διάσ τημα σ υμπληρώνεται και όταν το αποτέλεσ μα ενός υπολογισ μού είναι μικρότερο από 1.0 β emin, αναπαρίσ ταται από τον πλησ ιέσ τερο denormal. Οταν οι denormalized αριθμοί προσ τίθενται σ τον άξονα η απόσ τασ η μεταξύ γειτονικών αριθμών κινητής υποδιασ τολής ποικίλει με κανονικό τρόπο δηλαδή, γειτονικές αποσ τάσ εις είναι είτε ίδιες σ το μήκος ή διαφέρουν κατά ένα παράγοντα β. Χωρίς denormals, η απόσ τασ η μεταβάλλεται απότομα από β p+1 β emin σ ε β emin, ο οποίος είναι ένας παράγοντας της τάξης του β p 1, σ ε αντίθεσ η με την ομαλή αλλαγή κατά ένα παράγοντα β. Εξαιτίας αυτού, πολλοί αλγόριθμοι οι οποίοι έχουν μεγάλο σ χετικό σ φάλμα για κανονικοποιημένους αριθμούς κοντά σ το κατώφλι της υποχείλισ ης, σ υμπεριφέρονται καλά σ ε αυτό το εύρος, όταν χρησ ιμοποιείται σ ταδιακή υποχείλισ η. Χωρίς σ ταδιακή υποχείλισ η, η έκφρασ η x y ενδέχεται να έχει πολύ μεγάλο σ χετικό σ φάλμα για κανονικοποιημένες εισ όδους, όπως προαναφέρθηκε x = 6.87 10 97 και y = 6.81 10 97. Μεγάλα σ χετικά σ φάλματα σ υμβαίνουν ακόμη και χωρίς ακύρωσ η, όπως το ακόλουθο παράδειγμα. Στη διαίρεσ η δύο μιγαδικών αριθμών, a + ib και c + id, εάν ένα σ τοιχείο του παρονομασ τή c + id είναι μεγαλύτερο από ββ emax 2, θα υπάρξει υπερχείλισ η, ακόμα κι αν το τελικό αποτέλεσ μα είναι εντός ορίων. Η καλύτερη μέθοδος υπολογισ μού του πηλίκου είναι ο τύπος του Smith. Θέτοντας σ τον τύπο του Smith τους αριθμούς x, y το αποτέλεσ μα 0.5 με σ ταδιακή υποχείλισ η το οποίο παίρνουμε είναι το σ ωσ τό. Η μέθοδος της υποβάθμισ ης σ το μηδέν δίνει αποτέλεσ μα 0.4 με σ φάλμα της τάξης των 100 ulps. Η τυπική εγγύησ η για το όριο σ φάλματος σ τους denormalized αριθμούς είναι κάτω από 1.0 β emin. 1.8.4 Μέθοδοι Στρογγυλοποίησ ης Στο πρότυπο IEEE-754, η σ τρογγυλοποίησ η σ υμβαίνει όταν μία πράξη παράγει ένα αποτέλεσ μα το οποίο δεν είναι ακριβές. Η βασ ική μέθοδος σ τρογγυλοποίησ ης είναι η σ τρογγυλοποίησ η προς τον πλησ ιέσ τερο(rounding-toward-nearest). Στο πρότυπο υπάρχουν όμως και άλλες τρεις μέθοδοι σ τρογγυλοποίησ ης οι οποίες είναι: ˆ Η μέθοδος σ τρογγυλοποίησ ης προς το μηδέν(round-towards-zero). ˆ Η μέθοδος σ τρογγυλοποίησ ης προς το + (round-toward-+ ) ˆ Η μέθοδος σ τρογγυλοποίησ ης προς το (round-toward- ) 16
Η μέθοδος σ τρογγυλοποίησ ης σ τον πλησ ιέσ τερο(rounding-toward-nearest) σ τρογγυλοποιεί το αποτέλεσ μα μίας πράξης σ τον πλησ ιέσ τερο αριθμό. Για παράδειγμα, εάν έχουμε τον αριθμό 23.67 τότε η μέθοδος αυτή θα τον μετατρέψει σ ε 24. Εναλλακτικά, αυτή η μέθοδος ενδέχεται να προσ διορίζει σ ε τι είδος αριθμό(άρτιο ή περιττό) να γίνεται η σ τρογγυλοποίησ η. Για παράδειγμα, εάν έχουμε τον αριθμό 23.67 και η μέθοδος είναι σ τρογγυλοποίησ η σ τον πλησ ιέσ τερο άρτιο(round-to-nearest-even) τότε ο α- ριθμός μετατρέπεται σ τον 24. Ομοια, σ υμβαίνει και σ την περίπτωσ η που έχουμε τον αριθμό 24.67, ο οποίος θα μετατραπεί σ ε 24. Στη μέθοδο σ τρογγυλοποίησ ης προς το μηδέν(round-towards-zero) εάν το αποτέλεσ μα μίας πράξης είναι ένας αριθμός κινητής υποδιασ τολής y και q είναι το ακέραιο μέρος του θα πρέπει να ισ χύει η σ χέσ η q = sgn(y) y = sgn(y) y. Για παράδειγμα, εάν έχουμε τον αριθμό 23.67 η μέθοδος αυτή θα μετατρέψει τον αριθμό σ ε 23. Ομοια, εάν έχουμε τον αριθμό 23.35 τότε η μέθοδος αυτή θα μετατρέψει τον αριθμό σ ε 23. Στη μέθοδο σ τρογγυλοποίησ ης προς το + (round-toward-+ ) θα πρέπει να ισ χύει η σ χέσ η q = ceil(y) = y = y, με q να είναι ο μικρότερος ακέραιος ο οποίος δεν είναι μικρότερος από το y. Για παράδειγμα, εάν έχουμε τον αριθμό 23.50 η μέθοδος αυτή θα μετατρέψει τον αριθμό σ ε 24. Ομοια, εάν έχουμε τον αριθμό 23.00 τότε η μέθοδος αυτή θα μετατρέψει τον αριθμό σ ε 23. Στην περίπτωσ η που έχουμε αρνητικό αριθμό, για παράδειγμα το -23.50 τότε το αποτέλεσ μα της σ τρογγυλοποίησ ης θα δώσ ει -23. Στη μέθοδο σ τρογγυλοποίησ ης προς το (round-toward- ) θα πρέπει να ισ χύει η σ χέσ η q = floor(y) = y = y, με q να είναι ο μεγαλύτερος ακέραιος ο οποίος δεν υπερβαίνει τον y. Για παράδειγμα, εάν έχουμε τον αριθμό 23.50 η μέθοδος αυτή θα μετατρέψει τον αριθμό σ ε 23. Ομοια, εάν έχουμε τον αριθμό 23.67 τότε η μέθοδος αυτή θα μετατρέψει τον αριθμό σ ε 24. Στην περίπτωσ η που έχουμε αρνητικό αριθμό, για παράδειγμα το -23.50 τότε το αποτέλεσ μα της σ τρογγυλοποίησ ης θα δώσ ει -24. 1.8.5 Διαφοροποιήσ εις των υλοποιήσ εων σ το IEEE 754 Η αριθμητική κινητής υποδιασ τολής πρέπει να εφαρμόζεται με προσ οχή, δεδομένου ότι οι προγραμματισ τές εξαρτώνται από τις ιδιότητές της για την ορθότητα και την ακρίβεια των προγραμμάτων τους. Ειδικότερα, το πρότυπο IEEE απαιτεί προσ εκτική υλοποίησ η και υπάρχει δυνατότητα για την σ υγγραφή χρήσ ιμων προγραμμάτων τα οποία λειτουργούν σ ωσ τά, με ακριβή αποτελέσ ματα μόνο σ ε σ υσ τήματα τα οποία σ υμφωνούν με το πρότυπο. Συνεπώς, λογικό είναι το σ υμπέρασ μα ότι τα εν λόγω προγράμματα είναι φορητά σ ε όλα τα σ υσ τήματα τα οποία υποσ τηρίζουν το πρότυπο IEEE. Δυσ τυχώς, το πρότυπο IEEE δεν εγγυάται ότι το πρόγραμμα θα παράγει ταυτόσ ημα αποτελέσ ματα σ ε όλα τα σ υσ τήματα τα οποία σ υμφωνούν με το πρότυπο. Τα περισ σ ότερα προγράμματα παράγουν όντως διαφορετικά αποτελέσ ματα σ ε διαφορετικά σ υσ τήματα για διάφορους λόγους. Ενας λόγος είναι ότι, τα περισ σ ότερα προγράμματα περιλαμβάνουν μετατροπή μεταξύ δεκαδικών αριθμών και δυαδικών αλλά το πρότυπο IEEE δεν προσ διορίζει πλήρως την ακρίβεια με την οποία εκτελούνται αυτές οι μετατροπές. Ενας άλλος λόγος είναι ότι, πολλά προγράμματα χρησ ιμοποιούν σ τοιχειώδεις λειτουργίες οι οποίες βρίσ κονται σ ε βιβλιοθήκες του σ υσ τήματος και έτσ ι, το πρότυπο έχει την δυνατότητα να καθορίσ ει αυτές τις λειτουργίες. Πολλοί προγραμματισ τές δεν μπορούν να σ υνειδητοποιήσ ουν ότι ακόμη και ένα πρόγραμμα το οποίο χρησ ιμοποιεί μόνο αριθμητικές μορφές και πράξεις προσ διοριζόμενες από το πρότυπο IEEE, παράγει διαφορετικά αποτελέσ ματα σ ε διαφορετικά σ υσ τήματα. Στην πραγματικότητα, οι σ υντάκτες του προτύπου σ κόπευαν ώσ τε διαφορετικές υλοποιήσ εις να παράγουν διαφορετικά αποτελέσ ματα. Η πρόθεσ ή τους είναι προφανής από τον ορισ μό του όρου destination σ το πρότυπο IEEE 754: Destination μπορεί είτε να ορισ τεί ρητά από τον χρήσ τη ή να παρέχεται εμμέσ ως από το σ ύσ τημα (για παράδειγμα, 17
τα ενδιάμεσ α αποτελέσ ματα υποεκφράσ εων ή ορίσ ματα διαδικασ ιών). Ορισ μένες γλώσ σ ες θέτουν τα αποτελέσ ματα των ενδιάμεσ ων υπολογισ μών σ ε destinations πέρα από τον έλεγχο του χρήσ τη. Παρόλα αυτά, το πρότυπο ορίζει το αποτέλεσ μα μιας πράξης από την άποψη της μορφής του destination και τις τιμές των τελούμενων. Με άλλα λόγια, το πρότυπο IEEE απαιτεί την σ ωσ τή σ τρογγυλοποίησ η κάθε αποτελέσ ματος σ ύμφωνα με την ακρίβεια του destination σ το οποίο θα τεθεί, αλλά το πρότυπο δεν απαιτεί ώσ τε η ακρίβεια του εν λόγω destination να καθορίζεται από το πρόγραμμα του χρήσ τη. Συνεπώς, διαφορετικά σ υσ τήματα ενδέχεται να θέσ ουν τα αποτελέσ ματά τους σ ε destinations με διαφορετική αριθμητική ακρίβεια ώσ τε το ίδιο πρόγραμμα να παράγει διαφορετικά αποτελέσ ματα έσ τω και αν τα σ υσ τήματα αυτά υποσ τηρίζουν το πρότυπο. Αρκετά από τα παραδείγματα προηγουμένως εξαρτώνται από την γνώσ η για τον τρόπο σ τρογγυλοποίησ ης αριθμών κινητής υποδιασ τολής. Για να βασ ισ τούμε σ ε παραδείγματα, ο προγραμματισ τής πρέπει να προβλέπει τον τρόπο με τον οποίο μεταγλωττίζεται το πρόγραμμα και ειδικότερα σ ε σ χέσ η με το πρότυπο IEEE και ποια είναι η ακρίβεια του destination σ ε κάθε αριθμητική πράξη. Δυσ τυχώς, το κενό σ τον ορισ μό του προτύπου IEEE σ χετικά με το destination υπονομεύει την ικανότητα του προγραμματισ τή ώσ τε να γνωρίζει τον τρόπο με τον οποίο θα μεταγλωττίζεται το πρόγραμμα. Κατά σ υνέπεια, πολλά από τα παραδείγματα παραπάνω, όταν υλοποιούνται σ ε φορητά προγράμματα με γλώσ σ α υψηλού επιπέδου, ενδέχεται να μην λειτουργούν σ ωσ τά σ ε σ υσ τήματα IEEE τα οποία παρέχουν σ υνήθως αποτελέσ ματα σ ε destinations με αριθμητική ακρίβεια διαφορετική από την αναμενόμενη. 1.8.6 Παρούσ ες υλοποιήσ εις σ το IEEE 754 Οι παρούσ ες υλοποιήσ εις σ την αριθμητική του IEEE 754 διαχωρίζονται σ ε δύο ομάδες οι οποίες διακρίνονται από το βαθμό σ τον οποίο υποσ τηρίζουν διαφορετικές μορφές κινητής υποδιασ τολής σ το υλικό. Τα Extended-based σ υσ τήματα, χαρακτηρισ τικό παράδειγμα είναι η αρχιτεκτονική της οικογένειας ε- πεξεργασ τών Ιntel x86, προσ φέρουν πλήρη υποσ τήριξη για μορφή εκτεταμένης διπλής ακρίβειας, αλλά μόνο μερική υποσ τήριξη για μονή και διπλή ακρίβεια. Επιπλέον, παρέχουν εντολές για φόρτωσ η ή αποθήκευσ η δεδομένων σ ε μονή και διπλή ακρίβεια με επί τόπου μετατροπή από ή σ ε μορφή εκτεταμένης διπλής ακρίβειας και ειδικές λειτουργίες (δεν είναι προεπιλογή), σ τις οποίες τα αποτελέσ ματα των αριθμητικών πράξεων σ τρογγυλοποιούνται σ ε μονή ή διπλή ακρίβεια ακόμη και αν αποθηκεύονται σ ε καταχωρητές σ ε μορφή εκτεταμένης διπλής ακρίβειας. Η σ ειρά επεξεργασ τών Motorola 68000 σ τρογγυλοποιεί τα αποτελέσ ματα τόσ ο σ ε ακρίβεια και σ το εύρος της μονής ή διπλής μορφής με την χρήσ η αυτών των ειδικών λειτουργιών. Οι Intel x86 και οι σ υμβατοί επεξεργασ τές σ τρογγυλοποιούν τα αποτελέσ ματα σ την ακρίβεια των μορφών μονής ή διπλής ακρίβειας αλλά διατηρούν το ίδιο εύρος με τη μορφή εκτεταμένης διπλής αναπαράσ τασ ης. Τα Single/Double σ υσ τήματα, σ υμπεριλαμβάνουν τους περισ σ ότερους επεξεργασ τές RISC, προσ φέρουν πλήρη υποσ τήριξη για μορφές μονής ή διπλής ακρίβειας, αλλά δεν υπάρχει υποσ τήριξη για σ υμβατή με το πρότυπο IEEE μορφή εκτεταμένης διπλής ακρίβειας. 1.8.7 Το Πρότυπο IEEE-754 σ το CUDA Το CUDA υπακούει σ το πρότυπο ΙΕΕΕ-754 για αριθμητική κινητής υποδιασ τολής με κάποιες αποκλίσ εις. Γενικότερα, δεν υπάρχει η δυνατότητα δυναμικού προσ διορισ μού της μεθόδου σ τρογγυλοποίησ ης. Ομως, οι περισ σ ότερες πράξεις υποσ τηρίζουν πολλαπλές μεθόδους σ τρογγυλοποίησ ης βασ ισ μένες σ το ΙΕΕΕ μέσ ω intrinsic σ υναρτήσ εων. Επιπλέον εκλείπει ο μηχανισ μός για την ανίχνευσ η exceptions που αφορούν αριθμούς κινητής υποδιασ τολής. Ολες οι πράξεις χαρακτηρίζουν τις exceptions ως masked και χειρίζονται με τον τρόπο που προβλέπεται από το ΙΕΕΕ-754. Ενα ακόμα σ ημείο σ το οποίο υπάρχει απόκλισ η από το πρότυπο ΙΕΕΕ-754 σ χετίζεται με το αποτέλεσ μα πράξεων κινητής υποδιασ τολής μονής ακρίβειας το οποίο εμπεριέχει ως είσ οδο ένα ή περισ σ ότερα 18
NaN. Τότε αυτό μετατρέπεται σ ε μία ακολουθία bit της μορφής 0 7F F F F F F F. Οσ ο αναφορά τους αριθμούς κινητής υποδιασ τολής διπλής ακρίβειας η απόλυτη τιμή και η αντισ τροφή δεν σ υμβαδίζουν με το πρότυπο ΙΕΕΕ-754. Χαρακτηρισ τικά των GPU με δυνατότητα 1.x Οι αριθμοί κινητής υποδιασ τολής μονής ακρίβειας σ τις σ υγκεκριμένες GPU έχουν κάποιες σ υγκεκριμένες ιδιαιτερότητες σ χετικά με το πρότυπο ΙΕΕΕ-754. Μια βασ ική ιδιαιτερότητα σ χετίζεται με τους Denormalized αριθμούς οι οποίοι δεν υποσ τηρίζονται. Οι εντολές σ ύγκρισ ης και πράξεων κινητής υποδιασ τολής μετατρέπουν τους denormalized τελεσ τέους σ ε μηδέν πριν από οποιαδήποτε πράξη. Ακόμη, τα υποχειλισ μένα αποτελέσ ματα υποβιβάζονται σ ε μηδέν. Επιπρόσ θετα, κάποιες εντολές δεν υποσ τηρίζουν το πρότυπο. Η πράξη της πρόσ θεσ ης και του πολλαπλασ ιασ μού σ υχνά σ υνδυάζονται σ ε μία απευθείας εντολή πολλαπλασ ιασ μού-πρόσ θεσ ης(fmad), η οποία μειώνει χωρίς σ τρογγυλοποίησ η την ενδιάμεσ η mantissa του πολλαπλασ ιασ μού. Η πράξη της διαίρεσ ης και η τετραγωνική ρίζα υλοποιούνται μέσ ω του αντίσ τροφου με τρόπο όχι και τόσ ο σ υμβατό με το πρότυπο. Οι πράξεις τη πρόσ θεσ ης και του πολλαπλασ ιασ μού υποσ τηρίζουν μόνο τις μεθόδους σ τρογγυλοποίησ ης round-to-nearest-even και round-towards-zero, ενώ δεν υποσ τηρίζονται οι μέθοδοι round-towards-±. Ο τρόπος με τον οποίο μετριάζονται οι επιπτώσ εις των περιορισ μών που αφορούν το πρότυπο ΙΕΕΕ- 754 είναι ένα σ ύνολο intrinsic σ υναρτήσ εων το οποίο είναι και περισ σ ότερο αργό. Οι σ υναρτήσ εις αυτές υλοποιούν τις βασ ικές μαθηματικές πράξεις, την τετραγωνική ρίζα, τον αντίσ τροφο και την πράξη FMAD. Σχετικά τώρα με τους αριθμούς κινητής υποδιασ τολής διπλής ακρίβειας η μόνη μέθοδος σ τρογγυλοποίησ ης η οποία υποσ τηρίζεται για αυτούς είναι η round-to-nearest-even και χρησ ιμοποιείται για τον αντίσ τροφο, την τετραγωνική ρίζα και την διαίρεσ η. 19
20
Κεφάλαιο 2 Αρχιτεκτονική 2.1 Ταξινόμησ η κατά Flynn Η ταξινόμησ η κατά Flynn η οποία προτάθηκε από τον Michael Flynn το 1966, είναι η κατάταξη των υπολογισ τικών σ υσ τημάτων και παραμένει η επικρατέσ τερη σ το χώρο. Η ταξινόμησ η αυτή βασ ίζεται σ τις ροές εντολών και δεδομένων τις οποίες έχει την δυνατότητα η αρχιτεκτονική ενός σ υσ τήματος να διαχειρισ τεί ταυτόχρονα. Τα κριτήρια της ταξινόμησ ης μπορούν να σ χηματοποιηθούν έτσ ι ώσ τε να είναι ευκολότερος ο διαχωρισ μός και η κατανόησ η της ταξινόμησ ης, όπως φαίνεται παρακάτω σ το σ χήμα. Single Instruction Multiple Instruction Single Data SISD MISD Multiple Data SIMD MIMD Σχήμα 2.1: Η σ χηματική ταξινόμησ η κατά Flynn Η κατανόησ η της δομής και των λειτουργιών τις οποίες υποσ τηρίζει η αρχιτεκτονική SIMD και κατ επέκτασ η αυτές των Μονάδων Επεξεργασ ίας Γραφικών (GPU) μπορούν εύκολα να αποτυπωθούν σ ε σ ύγκρισ η με τις υπόλοιπες τις οποίες ορίζει η Ταξινόμησ η. Αναλυτικότερα, οι τέσ σ ερις αυτές αρχιτεκτονικές διαθέτουν τα εξής χαρακτηρισ τικά: SISD Η αρχιτεκτονική υπολογισ τών η οποία αποτελείται από ένας μονό επεξεργασ τή, εκτελώντας μία μόνο εντολή σ ε δεδομένα αποθηκευμένα σ ε μία λέξη της μνήμης. Το χαρακτηρισ τικότερο παράδειγμα μίας τέτοιας αρχιτεκτονικής είναι αρχιτεκτονική Von Neumann. Σχήμα 2.2: Σχηματική Αναπαράσ τασ η αρχιτεκτονικής SISD 21
SIMD Η αρχιτεκτονική υπολογισ τών η οποία αποτελείται από πολλαπλούς επεξεργασ τές, εκτελώντας ταυτόχρονα σ ε όλα τα δεδομένα την ίδια εντολή, όπου αυτή μπορεί να παραλληλοποιηθεί. Τα χαρακτηρισ τικότερα παραδείγματα μίας τέτοιας αρχιτεκτονικής είναι οι Διανυσ ματικοί Επεξεργασ τές και οι Μονάδες Επεξεργασ ίας Γραφικών (GPU). Σχήμα 2.3: Σχηματική Αναπαράσ τασ η αρχιτεκτονικής SIMD MISD Η αρχιτεκτονική υπολογισ τών σ την οποία πολλαπλές εντολές εκτελούνται σ ε δεδομένα σ ε μία θέσ η μνήμης. Η χρήσ η αυτής της αρχιτεκτονικής γίνεται σ ε fault-tolerant σ υσ τήματα δηλαδή, ετερογενή σ υσ τήματα τα οποία εκτελούν πράξεις σ ε ίδια δεδομένα και τα αποτελέσ ματα τους πρέπει να ταυτίζονται. Το χαρακτηρισ τικότερο παράδειγμα μίας τέτοιας αρχιτεκτονικής είναι τα σ υσ τήματα πλοήγησ ης σ ε διασ τημόπλοια. Σχήμα 2.4: Σχηματική Αναπαράσ τασ η αρχιτεκτονικής MISD MIMD Η αρχιτεκτονική υπολογισ τών σ την οποία εκτελούνται διαφορετικές εντολές από πολλαπλούς επεξεργασ τές ταυτόχρονα σ ε διαφορετικά δεδομένα. Τα MIMD σ υσ τήματα διαχωρίζονται ανάλογα με τον τρόπο με τον οποίο προσ πελαύνουν την μνήμη και οι κατηγορίες αυτές είναι τα σ υσ τήματα Διαμοιραζόμενης Μνήμης και τα σ υσ τήματα Κατανεμημένης Μνήμης. 22
Σχήμα 2.5: Σχηματική Αναπαράσ τασ η αρχιτεκτονικής MIMD 2.2 Η Αξιοποίησ η της SIMD αρχιτεκτονικής 2.2.1 Ισ τορικά Στοιχεία Η πρώτη εμφάνισ η SIMD επεξεργασ τών ήταν σ ε διανυσ ματικούς supercomputers σ τις αρχές τις δεκαετίας του 70 όπως ο CDC Star-100 και ο Texas Instruments ASC και πλέον αρχίζουν να γίνονται γνωσ τοί με τον Cray κατά τις δεκαετίες του 70 και του 80. Στην πρώτη εποχή μετά την εξάπλωσ η της αρχιτεκτονικής SIMD σ τις αρχές της δεκαετίας του 80, τέτοιου είδους επεξεργασ τές χρησ ιμοποιούνται αποκλεισ τικά σ ε Mainframes και Supercomputers όπως οι Thinking Machines CM-1 και CM-2. Τα σ υσ τήματα αυτά περιείχαν επεξεργασ τές χαμηλής λειτουργικότητας οι οποίοι όμως είχαν την δυνατότητα να λειτουργούν παράλληλα. Η εμφάνισ η όμως λιγότερο ακριβών scalar MIMD επεξεργασ τών, όπως ο Intel i860 XP, οδήγησ ε τους κατασ κευασ τές supercomputer να μειώσ ουν το ενδιαφέρον τους για τις SIMD αρχιτεκτονικές. Αργότερα, σ τα μέσ α της δεκαετίας του 90, οι προσ ωπικοί υπολογισ τές εξαπλώθηκαν και ήταν αρκετά ισ χυροί ώσ τε να υποσ τηρίζουν πολυμεσ ικές εφαρμογές. Η απαίτησ η αυτή οδήγησ ε τους κατασ κευασ τές να σ τραφούν σ τη λειτουργικότητα των αρχιτεκτονικών SIMD. Εκείνη την περίοδο λοιπόν, η Intel κυκλοφόρησ ε τον πρώτο εμπορικό επεξεργασ τή με δυνατότητες SIMD, τον Pentium MMX ο οποίος ήταν ο πρόδρομος για τις μελλοντικές SIMD αρχιτεκτονικές. Παράλληλα, άλλοι κατασ κευασ τές όπως η Sun Microsystems πρόσ θεσ ε σ το σ ετ εντολών του UltraSPARC, εντολές SIMD για πράξεις ακεραίων και η IBM με τη Motorola πρόσ θεσ αν το σ ετ εντολών AltiVec σ την αρχιτεκτονική POWER. Ολες αυτές 23
οι προσ πάθειες και η σ τροφή σ ε SIMD χαρακτηρισ τικά οφείλεται σ την ανάγκη ώσ τε να υποσ τηριχθούν γραφικά πραγματικού χρόνου και σ υνεπώς διανύσ ματα δύο, τριών και τεσ σ άρων διασ τάσ εων. 2.2.2 Πλεονεκτήματα Οπως έγινε αντιληπτό από την προηγούμενη παράγραφο, οι SIMD αρχιτεκτονικές επανήλθαν σ την επιφάνεια επειδή υπερτερούν σ την επεξεργασ ία πολυμεσ ικών εφαρμογών. Τέτοιου είδους εφαρμογές κατά κύριο λόγο εκτελούν πράξεις ανάμεσ α σ ε μία ίδια τιμή και μεγάλο αριθμό άλλων δεδομένων. Χαρακτηρισ τικό παράδειγμα μίας τέτοιας εφαρμογής είναι η αλλαγή φωτεινότητας σ ε μία εικόνα. Ενα άλλο σ ημαντικό πλεονέκτημα είναι το επίπεδο παραλληλίας κατά την εκτέλεσ η των εντολών. Τα σ υσ τήματα με SIMD επεξεργασ τές περιλαμβάνουν τόσ ες εντολές όσ ες θα εκτελεσ τούν σ τα δεδομένα σ ε μία πράξη. Αυτό μπορεί να ισ χύσ ει και σ ε super-scalar επεξεργασ τές αλλά ο βαθμός παραλληλίας ενός σ υσ τήματος SIMD είναι κατά πολύ υψηλότερος. 2.2.3 Μειονεκτήματα Παρόλα αυτά, υπάρχουν και μειονεκτήματα σ τη χρήσ η SIMD επεξεργασ τών διότι τα δεδομένα κάποιων αλγορίθμων δεν μπορούν να αναπαρασ ταθούν σ ε μορφή διανυσ μάτων. Η σ υντακτική ανάλυσ η ενός κώδικα. Επιπλέον η υλοποίησ η ενός αλγορίθμου με SIMD εντολές σ υνήθως απαιτεί και ανθρώπινη παρέμβασ η καθώς οι περισ σ ότεροι compilers δεν παράγουν SIMD εντολές από ένα τυπικό πρόγραμμα σ ε C για παράδειγμα. Ο προγραμματισ μός σ ε σ υγκεκριμένο σ ετ εντολών για SIMD αρχιτεκτονική ενδέχεται να επιφέρει κάποια μη αναμενόμενα προβλήματα σ ε χαμηλό επίπεδο. 2.2.4 Εξέλιξη της αρχιτεκτονικής SIMD Στην προηγούμενη παράγραφο, έγινε κατανοητό ότι η απαίτησ η για επεξεργασ ία γραφικών σ ε πραγματικό χρόνο οδήγησ ε τους κατασ κευασ τές υλικού να ενσ ωματώσ ουν σ ετ εντολών για λειτουργίες SIMD σ ε εμπορικούς πλέον επεξεργασ τές. Η ενσ ωμάτωσ η των SIMD λειτουργιών σ τους εμπορικούς υπολογισ τές είχε μειωμένη απόδοσ η. Το γεγονός αυτό οφείλεται σ την επανειλημμένη χρήσ η των καταχωρητών για πράξεις κινητής υποδιασ τολής μειώνοντας την σ υνολική απόδοσ η του σ υσ τήματος. Επιπλέον, οι compilers δεν υποσ τήριζαν το επιπρόσ θετο σ ετ εντολών για SIMD επεξεργασ ία αναγκάζοντας τους προγραμματισ τές σ την σ υγγραφή κώδικα assembly απευθείας. Ο σ τόχος για βελτίωσ η σ την απόδοσ η των σ υσ τημάτων οδήγησ ε σ την χρήσ η καρτών γραφικών οι οποίες ήταν αποκλεισ τικά προσ ανατολισ μένες σ την εκτέλεσ η SIMD εντολών. Ο διαχωρισ μος αυτός, είχε ως αποτέλεσ μα οι κάρτες γραφικών να αναλάβουν τον φόρτο της επεξέργασ ίας από την CPU. Σήμερα πλέον, οι κάρτες γραφικών χειρίζονται πέραν των κλασ σ ικών υπολογισ μών για τα γραφικά και υπολογισ μούς γενικού σ κοπού οι οποίοι έως τώρα χειρίζονταν από την CPU. Με την εξέλιξη αυτή, έχει εισ αχθεί ο όρος GPGPU (General Purpose Graphics Processing Unit) ο οποίος αποτελεί την τελευταία εξέλιξη των σ υσ τημάτων που βασ ίσ τηκαν σ την αρχιτεκτονική SIMD. Η παράλληλη δομή των σ ύγχρονων GPU είναι πολύ αποτελεσ ματική από τους επεξεργασ τές γενικού σ κοπού για αλγόριθμους οι οποίοι επεξεργάζονται μεγάλα μπλοκ δεδομένων παράλληλα. Σε έναν προσ ωπικό υπολογισ τή, η GPU μπορεί να βρίσ κεται σ ε μια κάρτα γραφικών ή ενσ ωματωμένη σ τη μητρική πλακέτα. Ο όρος αυτός ορίσ τηκε και διαδόθηκε από την Nvidia το 1999, η οποία διέθεσ ε σ το εμπόριο την GeForce 256 ως την πρώτη GPU σ τον κόσ μο, αποτελούμενη από έναν επεξεργασ τή σ ε ένα ολοκληρωμένο κύκλωμα. Ο επεξεργασ τής αυτός είχε την δυνατότητα επεξεργασ ίας τουλάχισ τον 10 εκατομμυρίων πολυγώνων ανά δευτερόλεπτο. 24
2.3 Η Αρχιτεκτονική CUDA Εισ αγωγή Η αρχιτεκτονική CUDA (Compute Unied Device Architecture) αποτελεί μία παράλληλη αρχιτεκτονική η οποία βασ ίζεται σ τη Μονάδα Επεξεργασ ίας Γραφικών(Graphic Processor Unit ή GPU) και διαθέτει την δυνατότητα προγραμματισ μού. Η CUDA επιτρέπει σ τους προγραμματισ τές να αξιοποιήσ ουν το σ ετ εντολών και τη μνήμη των παράλληλων υπολογισ τών των CUDA GPU. Σε αντίθεσ η με τις CPU, οι GPU είναι σ χεδιασ μένες σ ε μία παράλληλη αρχιτεκτονική η οποία εσ τιάζεται σ την εκτέλεσ η πολλών ταυτόχρονων νημάτων πιο αργά, αντί να εκτελεί ένα νήμα πολύ γρήγορα. Συνεπώς, η αρχιτεκτονική αυτή έχει σ χεδιασ τεί για τη μαζική επεξεργασ ία δεδομένων αντί για έλεγχο εκτέλεσ ης και caching. Η διαφοροποίησ η αυτή φαίνεται και από την αφαιρετική αποτύπωσ η και σ ύγκρισ η αυτών των δύο αρχιτεκτονικών σ το παρακάτω σ χήμα. Σχήμα 2.6: Η διαφορά της GPU από την CPU σ την κατασ κευή ώσ τε να είναι προσ ανατολισ μένη σ την επεξεργασ ία δεδομένων Στις GPU οι ίδιες εντολές εκτελούνται για πολλά δεδομένα ταυτόχρονα εκλείπει η ανάγκη για πολύπλοκο έλεγχο ροής όπως και η ανάγκη για μεγάλες μνήμες cache, διότι οι καθυσ τερήσ εις για τις προσ πελάσ εις σ τη μνήμη καλύπτονται από υπολογισ μούς υψηλής αριθμητικής πυκνότητας. 2.3.1 Δομή Υλικού Η δομή της CUDA GPU βασ ίσ τηκε πάνω σ ε μία κλιμακούμενη σ υσ τοιχία πολυνηματικών Streaming Multiprocessor. Οι επεξεργασ τές αυτοί εκτελούν χιλιάδες νήματα ταυτόχρονα και για να βελτισ τοποιήσ ουν το utilization τους αξιοποιούν την παραλληλία σ ε επίπεδο νήματος με πολυνηματισ μό βασ ισ μένο σ το υλικό, περισ σ ότερο από παραλληλία σ ε επίπεδο εντολής για ένα μόνο νήμα. Υπάρχει pipelining σ τις εντολές αλλά σ ε αντίθεσ η με τη CPU, αυτές εκτελούνται σ ειριακά και δεν υπάρχει branch prediction και speculative execution. Τα μέρη από τα οποία αποτελείται ένας Streaming Multiprocessor είναι: ˆ Οι οκτώ Scalar Processors οι οποίοι χρησ ιμοποιούνται για πράξεις μεταξύ ακεραίων και αριθμών κινητής υποδιασ τολής μονής ακρίβειας ˆ Οι δύο Special Function Units σ τις οποίες υπολογίζονται οι υπερβατικές μαθηματικές σ υναρτήσ εις και ενδέχεται να εκτελεσ τούν πολλαπλασ ιασ μοί μονής ακρίβειας ˆ Η Double Precision Unit η οποία εκτελεί αριθμητικές πράξεις διπλής ακρίβειας 25
ˆ Η Shared Memory η οποία επιτρέπει την αλληλεπίδρασ η των νημάτων κατά τη διάρκεια της εκτέλεσ ης τους ˆ Ο Warp Scheduler οργανώνει την εκτέλεσ η των ωαρπς τα οποία έχουν νήματα προς εκτέλεσ η. Η σ χηματική αναπαράσ τασ η του Streaming Multiprocessor αλλά και η αντισ τοιχία μεταξύ των μερών που τον αποτελούν μπορεί να αποτυπωθεί σ το παρακάτω σ χήμα. Σχήμα 2.7: Η σ χηματική αναπαράσ τασ η του Streaming Multiprocessor Από το Σχήμα 2.7 μπορούμε να δούμε ότι κάθε ένας Streaming Multiprocessor έχει την δυνατότητα να επεξεργάζεται μόνο ένα νήμα σ το οποίο εκτελούνται πράξεις αριθμών κινητής υποδιασ τολής διπλής ακρίβειας αντί για οκτώ ταυτόχρονα κατ αναλογία νήματα με μονής ακρίβειας αριθμούς κινητής υποδιασ τολής. Επιπλέον, είναι δυνατή η ταυτόχρονη επεξεργασ ία δύο το πολύ νημάτων σ τα οποία πρέπει να εκτελεσ τούν πράξεις οι οποίες περιέχουν ειδικές μαθηματικές σ υναρτήσ εις. 2.3.2 Εκτέλεσ η Νημάτων Γενικότερα όμως, το σ υνολικό πλήθος νημάτων τα οποία θα εκτελεσ τούν σ τη GPU ή σ το Device είναι οργανομένα σ ε ένα πλέγμα το οποίο θα αναφέρεται ως grid. Το grid είναι μίας ή δύο διασ τάσ εων και υποδιαιρείται σ ε blocks νημάτων όμοιου μεγέθους. Το πλήθος των blocks προσ διορίζεται σ υνήθως, είτε από το πλήθος των δεδομένων προς επεξεργασ ία, είτε από το πλήθος των επεξεργασ τών. Τα blocks επιτρέπεται να εκτελούνται ανεξάρτητα μεταξύ τους, σ ε οποιαδήποτε σ ειρά, παράλληλα ή σ ειριακά. Η ανεξαρτησ ία αυτή, διευκολύνει τον χρονοπρογραμματισ μό τους σ ε οποιοδήποτε πυρήνα του device. Η ιεράρχησ η των νημάτων αποτυπώνεται εύκολα από το Σχήμα 2.8. Η ιεράρχησ η των νημάτων, παίζει σ πουδαίο ρόλο σ τον χρονοπρογραμματισ μό της εκτέλεσ ης και σ την κατανομή των blocks. Τα block των νημάτων ανατίθενται σ τους multiprocessors προς εκτέλεσ η. Η ανάθεσ η αυτή γίνεται πριν την εκτέλεσ η του προγράμματος και τα blocks δεν μπορούν να αλλάζουν multiprocessor κατα τη διάρκεια της εκτέλεσ ης τους. Το πλήθος των block που εχεί την δυνατότητα να επεξεργασ τεί κάθε multiprocessor ποικίλει ανάλογα με τους διαθέσ ιμους πόρους του. Κάθε νήμα του block, εκτελείται σ ε έναν Scalar Processor του multiprocessor με τις ιδιαιτερότητες οι οποίες αναφέρθηκαν παραπάνω. Η αντισ τοίχησ η αυτή φαίνεται σ το Σχήμα 2.9. 26
Σχήμα 2.8: Η ιεράρχησ η των νημάτων Σχήμα 2.9: Κατανομή των νημάτων 27
Οταν σ ε ένα Streaming Multiprocessor ανατεθούν κάποια blocks προς εκτέλεσ η, αυτός τα διαχωρίζει σ ε warps τα οποία προγραμματίζονται από το τον warp scheduler για εκτέλεσ η. Τα warps είναι ανεξάρτητα νήματα σ ε ομάδες των 32 τα οποία δημιουργούνται, διαχειρίζονται, προγραμματίζονται και εκτελούνται παράλληλα σ ε έναν multiprocessor. Ενα warp ξεκινάει από την ίδια διεύθυνσ η του προγράμματος αλλά τα νήματα που το αποτελούν έχουν ξεχωρισ τό instruction address counter και register state. Το γεγονός αυτό διευκολύνει τα νήματα να διακλαδώνονται και να εκτελούνται ανεξάρτητα. Η διαδικασ ία αυτή αποτυπώνεται σ το Σχήμα 2.10. Σχήμα 2.10: Ανάθεσ η και διαχωρισ μός του block Κάθε ένα warp εκτελεί μία κοινή εντολή τη φορά, έτσ ι ώσ τε η πλήρης αποτελεσ ματικότητα να επιτυγχάνεται όταν και τα 32 νήματα σ το warp ταυτίζονται σ την πορεία της εκτέλεσ ής τους. Αν τα νήματα σ το warp αποκλίνουν εξαιτίας διακλαδώσ εων που εξαρτώνται από τα δεδομένα, το warp εκτελεί σ ειριακά κάθε μονοπάτι που δημιουργείται, απενεργοποιώντας όλα τα νήματα τα οποία δεν ανήκουν σ ε αυτό. Οταν όλα τα μονοπάτια εκτελεσ τούν, τα νήματα σ υγκλίνουν πάλι σ το ίδιο μονοπάτι εκτέλεσ ης. Τέτοιες διακλαδώσ εις προκύπτουν μόνο σ τα πλαίσ ια του warp καθώς εκτελείται ανεξάρτητα από τα άλλα ακόμα και αν εκτελούν κοινό ή όχι κώδικα. Η εκτέλεσ η για κάθε εντολή για όλα τα νήματα ενός warp απαιτεί από τον warp scheduler : ˆ Τεσ σ ερεις κύκλους ρολογιού για εντολές οι οποίες σ χετίζονται με πράξεις ακεραίων και αριθμών κινητής υποδιασ τολής μονής ακρίβειας ˆ 32 κύκλους ρολογιού για εντολές οι οποίες σ χετίζονται με πράξεις αριθμών κινητής υποδιασ τολής διπλής ακρίβειας ˆ Δεκαέξι κύκλους ρολογιού για εντολές οι οποίες σ χετίζονται με υπερβατικές πράξεις αριθμών κινητής υποδιασ τολής μονής ακρίβειας 2.3.3 Διαβαθμίσ εις Μνήμης Στην αρχιτεκτονική CUDA τα νήματα κατα την εκτελεσ η τους μπορούν να προσ πελάσ ουν δεδομένα από πολλαπλές μνήμες. Κάθε block νημάτων δεσ μεύει shared μνήμη η οποία είναι προσ πελάσ ιμη σ ε όλα τα νήματα που το αποτελούν και η δεσ μευσ η αυτή διαρκεί όσ ο και η διάρκεια ζωής του. Ολα τα νήματα δεσ μεύουν τοπική αποκλεισ τική μνήμη αλλά έχουν πρόσ βασ η σ ε όλη την Global μνήμη. Global Μνήμη Η Global μνήμη είναι η ξεχωρισ τή μνήμη της κάρτας γραφικών και είναι κατ αντισ τοιχία σ αν την κύρια μνήμη για την CPU. Τα προγράμματα που πρέπει να εκτελεσ τούν σ την GPU λειτουργούν μόνο εάν φορτωθούν σ την Global μνήμη. Η μνήμη αυτή είναι οργανωμένη σ ε διευθύνσ εις των 32-bit και υπάρχει η δυνατότητα χρήσ ης της αναφοράς με δείκτες. Η μνήμη είναι προσ πελάσ ιμη από όλα τα νήματα αλλά και απο τη CPU και η μνήμη δεσ μεύεται όσ ο διαρκεί ο υπολογισ μός σ την κάρτα. 28
Shared Μνήμη Η Shared μνήμη επειδή βρίσ κεται μέσ α σ τον επεξεργασ τή είναι πολύ πιο γρήγορη από την Global μνήμη. Στην πραγματικότητα η προσ πέλασ η ολών των νημάτων του warp είναι γρήγορη όσ ο δεν υπάρχουν σ υγκρούσ εις μεταξύ των νημάτων. Η shared μνήμη έχει μέγεθος 16Kb και αποτελείται από 16 banks. Οι banks είναι οργανωμένες έτσ ι ώσ τε διαδοχικές διευθύνσ εις των 32-bit να ανατίθενται σ ε διαδοχικές banks. Οι banks είναι ίσ ου μεγέθους κομμάτια μνήμης σ τα οποία υπάρχει η δυνατότητα να προσ πελασ τούν ταυτόχρονα. Οποιαδήποτε αίτησ η ανάγνωσ ης ή εγγραφής αποτελούμενη απο k διευθύνσ εις οι οποίες αντισ τοιχούν σ ε k διαφορετικές banks εξυπηρετείται ταυτόχρονα. Από την άλλη πλευρά, εάν σ ε μία αίτησ η υπάρχουν διευθύνσ εις που ανήκουν σ την ίδια bank, υπάρχει σ ύγκρουσ η και η προσ πέλασ η σ ειριοποιείται. Μια αίτησ η για shared μνήμη από ένα warp χωρίζεται σ ε δύο οι οποίες είναι ανεξάρτητες μεταξύ τους και είναι μία για κάθε μισ ό του warp. Συνεπώς, δεν μπορεί να υπάρξουν σ υγκρούσ εις σ τα banks μεταξύ νημάτων που ανήκουν σ το πρώτο και σ το δεύτερο μισ ό του ίδιου warp. Local Μνήμη Η Local μνήμη αποτελεί μερος της Global μνήμης της σ υσ κευής, σ υνεπώς οι προσ πελάσ εις σ τη Local μνήμη έχουν την ίδια καθυσ τέρησ η και το ίδιο χαμηλό εύρος ζώνης όπως οι προσ πελάσ εις σ την Global μνήμη. Η Local μνήμη είναι οργανωμένη έτσ ι ώσ τε διαδοχικές λέξεις των 32-bit να προσ πελαυνονται από διαδοχικά νήματα. Η Local μνήμη η οποία μπορει να διατεθεί ανα νήμα είναι 16Kb. Οι προσ πελάσ εις σ την Local μνήμη γίνονται για κάποιες αυτόματες μεταβλητές τις οποίες χειρίζεται ο compiler όπως: ˆ Πίνακες για τους οποίους δεν μπορεί να προσ διορισ τεί αν το index τους είναι σ ταθερά ˆ Μεγάλες δομές ή πίνακες οι οποίο απαιτουν μεγαλο αριθμό καταχωρητών ˆ Οποιαδήποτε μεταβλητή εάν το πρόγραμμα χρησ ιμοποιεί περισ σ ότερους καταχωρητές από όσ ους είναι διαθέσ ιμοι Μια σ υνοπτική παρουσ ίασ η για τις κατηγορίες μνήμης που διαθέτει μία κάρτα γραφικών μπορει να φανεί σ τον παρακάτω Πίνακα. Μνήμη Θέσ η Προσ πέλασ η Πεδίο Εφαρμογής Διάρκεια Local Εκτός SM R/W Ενα νήμα Οσ η το νήμα Shared Εντός SM R/W Τα νήματα του block Οσ η το block Global Εκτός SM R/W Ολα τα νήματα και η CPU Οσ η η εφαρμογή Πίνακας 2.1: Συνοπτική παρουσ ίασ η των μνημών 29
30
Κεφάλαιο 3 Μοντέλο Προγραμματισ μού 3.1 Εισ αγωγή Η αξιοποίησ η των δυνατοτήτων για την εκτέλεσ η αλγορίθμων τις οποίες προσ φέρει η κάρτα γραφικών και αναφέρθηκαν σ τα προηγούμενα κεφάλαια, επιτυγχάνεται μέσ ω μίας αλληλουχίας λογισ μικού η οποία αποτελείται από driver και μία βιβλιοθήκη runtime άλλα και με την χρήσ η της CUDA C. Επιπρόσ θετα, σ ε αυτή την αλληλουχία υπάρχει η δυνατότητα να προσ τεθούν ξεχωρισ τές μαθηματικές βιβλιοθήκες η CUFFT και η CUBLAS. Η βιβλιοθήκη runtime αποτελείται από τμήματα τα οποία αφορούν τις αναγκαίες λειτουργίες της CPU, της GPU και κάποιων κοινών. Οι από κοινού λειτουργίες αφορούν μόνο τις σ υναρτήσ εις της C standard βιβλιοθήκης οι οποίες μπορούν να εκτελεσ τούν σ την GPU. Στο παρακάτω σ χήμα φαίνεται η αλληλουχία του λογισ μικού η οποία υποσ τηριζει την λειτουργία του CUDA. Σχήμα 3.1: Η αλληλουχία του λογισ μικού του CUDA 3.2 Τα χαρακτηρισ τικά της CUDA C Η CUDA C διευκολύνει τους εξοικειωμένους με τη γλώσ σ α προγραμματισ μού C χρήσ τες σ τη σ υγγραφή κώδικα ικανού να εκτελεσ τεί από τη GPU. Αποτελείται από ένα σ ύνολο από επεκτάσ εις της γλώσ σ ας C 31