Αρχέσ και λειτουργίεσ του OpenACC
|
|
- Κορνήλιος Ζάππας
- 6 χρόνια πριν
- Προβολές:
Transcript
1 Πανεπιςτιμιο Δυτικισ Μακεδονίασ Σμιμα Μθχανικϊν Πλθροφορικισ & Σθλεπικοινωνιϊν Αρχέσ και λειτουργίεσ του OpenACC Παναγιωτίδου Παναγιϊτα ΑΜ:729 1 Επιβλζπων Κακθγθτισ: Δρ. Μθνάσ Δαςυγζνθσ
2 Άδειεσ Χρήςησ Σο παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χριςθσ Creative Commons. Για εκπαιδευτικό υλικό, όπωσ εικόνεσ, που υπόκειται ςε άλλου τφπου άδειασ χριςθσ, θ άδεια χριςθσ αναφζρεται ρθτϊσ. 2
3 κοπόσ τησ ενότητασ Ειςαγωγι ςτο ΟpenACC Σα βαςικά ςτοιχεία του OpenACC Παραλλθλοποίθςθ βρόχων Παραδείγματα τθσ δομισ των οδθγιϊν kernels, parallel και atomic Η χριςθ του OpenACC Διαφορζσ μεταξφ των directives kernels και parallel Παράδειγμα: Επίλυςθ εξίςωςθσ Laplace Επιτάχυνςθ με ενοποιθμζνθ μνιμθ Βιβλιοκικεσ χρόνου εκτελεςθσ Προχωρθμζνθ Ανάλυςθ του κϊδικα του OpenACC-χριςθ του εργαλείου PGPROF Προχωρθμζνθ Ανάλυςθ του κϊδικα του OpenACC-χριςθ του εργαλείου Visual Profiler τθσ NVIDIA υμπεράςματα Ενότθτασ Βιβλιογραφία 3
4 Ειςαγωγι ςτο OpenACC 4
5 Σι είναι το OpenACC; Είναι ενα πρότυπο προγραμματιςμοφ παραλλθλοποίθςθσ και ζχει ςχεδιαςτεί για να απλoποιεί τον παράλλθλο προγραμματιςμό ετερογενϊν ςυςτθμάτων CPU/GPU. υντάχκθκε από: τθν NVIDIA, Cray, PGI και CAPS Μπορεί να υποςτθρίξει τισ γλϊςςεσ προγραμματιςμοφ: Fortran, C, (και ίςωσ) C++. Σο χρονολογικό πλαίςιο ανάπτυξθσ του OpenACC παρατίκεται παρακάτω: Σο OpenACC ιδρφκθκε από CAPS, Cray, PGI και NVIDIA, για τθν ενοποίθςθ των οδθγιϊν για τουσ επιταχυντζσ που αναπτφςςονται ανεξάρτθτα από CAPS, Cray και PGI Κυκλοφορία τθσ ζκδοςθσ του OpenACC Kυκλοφoρία του OpenACC 2.0, προςκζτοντασ υποςτιριξθ για αδόμθτθ διαχείριςθ δεδομζνων και διευκρινίηοντασ τθ γλϊςςα των προδιαγραφϊν Σο OpenACC 2.5 κυκλοφόρθςε, περιζχει κυρίωσ διευκρινίςεισ με κάποια επιπλζον χαρακτθριςτικά Κυκλοφορία τθσ τελευταίασ ζκδοςθσ των προδιαγραφϊν, ζκδοςθ OpenACC
6 Τποςτήριξη Μεταγλωττιςτών (1/3) Πολλαπλοί μεταγλωττιςτζσ προςφζρουν φορθτότθτα, αποςφαλμάτωςθ, ςτακερότθτα Η υποςτιριξθ του OpenACC είναι διακζςιμθ ςε εμπορικοφσ μεταγλωττιςτζσ από τον PGI (από τθν ζκδοςθ 12.6), και από τον Cray (μόνο για το hardware τθσ Cray) O OpenUH είναι ζνασ μεταγλωττιςτισ,βαςιηόμενοσ ςτον Open64 ανοιχτοφ κϊδικα OpenACC που υποςτθρίηει C και FORTRAN και αναπτφχκθκε από τθν ομάδα HPCTools από το Πανεπιςτιμιο του Χιοφςτον. Ο OpenARC είναι ζνασ μεταγλωττιςτισ ανοικτοφ κϊδικα C που αναπτφχκθκε ςτο Εκνικό Εργαςτιριο Oak Ridge για να υποςτθρίξει όλα τα χαρακτθριςτικά τθσ προδιαγραφισ OpenACC 1.0. O accull είναι ζνασ πειραματικόσ μεταγλωττιςτισ ανοικτοφ κϊδικα και ζχει αναπτυχκεί από το Πανεπιςτιμιο τθσ La Laguna (μόνο για τθ γλϊςςα C). Ο IPMACC είναι ζνασ μεταγλωττιςτισ ανοικτοφ κϊδικα C που αναπτφχκθκε από το Πανεπιςτιμιο τθσ Βικτϊρια και μεταφράηει το OpenACC ςε CUDA, OpenCL και ISPC. Προσ το παρόν, υποςτθρίηονται μόνο οι ακόλουκεσ οδθγίεσ: data, kernels, loop και cache. 6
7 Τποςτήριξη Μεταγλωττιςτών (2/3) Η υποςτιριξθ του GCC για το OpenACC επιλκε αρκετά αργότερα. Σον επτζμβριο του 2013 ανακοινϊκθκε μια υλοποίθςθ που ςτοχεφει ςτθ GPU από τθ Samsung, θ οποία μετζφραςε το OpenACC 1.1 ςε OpenCL-με τθ δυνατότθτα προςκικθσ ςχολίων ςτον κϊδικα-. Η ανακοίνωςθ μιασ "πραγματικισ εφαρμογισ ακολοφκθςε δφο μινεσ αργότερα, αυτι τθ φορά από τθ NVIDIA και βαςίςτθκε ςτο OpenACC 2.0. Αυτό δθμιοφργθςε κάποια διαμάχθ, κακϊσ θ υλοποίθςθ κα αφοροφςε μόνο τθ γλϊςςα PTX assembly τθσ NVIDIA, για τθν οποία δεν ιταν διακζςιμοσ κανζνασ ακροιςτισ ανοιχτοφ κϊδικα ι χρόνου εκτζλεςθσ. Η πειραματικι υποςτιριξθ για το OpenACC / PTX κατζλθξε ςτο GCC τθσ ζκδοςθ 5.1. Οι ςειρζσ GCC6 και GCC7 περιλαμβάνουν μια πολφ πιο βελτιωμζνθ υλοποίθςθ τθσ προδιαγραφισ OpenACC 2.0a. ε ςφγκριςθ με το GCC 7, θ ςειρά ζκδοςθσ GCC 8 περιζχει κάποιεσ αλλαγζσ. Η κατάςταςθ εφαρμογισ ςτο openacc-gcc-8-branch βαςίηεται ςτθ ςειρά ζκδοςθσ GCC 8, με πρόςκετθ υποςτιριξθ για τθν προδιαγραφι OpenACC 2.5 (GCC 8.1 κυκλοφόρθςε ςτισ ). Όπωσ και ςτο OpenMP, ο προγραμματιςτισ μπορεί να ςχολιάςει ςτον πθγαίο κϊδικα τθσ C, C ++ και Fortran για να προςδιορίςει τισ περιοχζσ που πρζπει να επιταχυνκοφν, χρθςιμοποιϊντασ τισ οδθγίεσ (directives) του μεταγλωττιςτι, κακϊσ και πρόςκετεσ λειτουργίεσ. Όπωσ ςτο OpenMP 4.0 και το νεότερο, ο κϊδικασ μπορεί να ξεκινιςει τόςο ςτθν CPU όςο και ςτθ GPU. 7
8 Τποςτήριξη Μεταγλωττιςτών (3/3) το International Supercomputing Conference το 2012 αποδείχκθκε ότι το OpenACC λειτουργεί ςε επιταχυντζσ τθσ Nvidia, τθσ AMD και τθσ Intel, χωρίσ δεδομζνα απόδοςθσ. Πιο ςυγκεκριμζνα ςτισ 12 Νοεμβρίου 2012, ςτο ίδιο ςυνζδριο, παρουςιάςτθκε ζνα ςχζδιο τθσ προδιαγραφισ OpenACC ζκδοςθ 2.0. Παρουςιάςτθκαν νζεσ προτεινόμενεσ δυνατότθτεσ οι οποίεσ περιλαμβάνουν νζουσ ελζγχουσ για τθ μεταφορά δεδομζνων (όπωσ καλφτερθ διαχείριςθ των μθ δομθμζνων δεδομζνων και βελτιωμζνθ υποςτιριξθ για μθ ςυνεχι μνιμθ) κακϊσ και υποςτιριξθ για άμεςεσ κλιςεισ ςυναρτιςεων και διαχωριςμζνθ μεταγλϊττιςθ (επιτρζποντασ τθ δθμιουργία και επαναχρθςιμοποίθςθ βιβλιοκθκϊν επιταχυνόμενου κϊδικα). Σο OpenACC 2.0 κυκλοφόρθςε επίςθμα τον Ιοφνιο του Ο κφριοσ τρόποσ προγραμματιςμοφ ςτο OpenACC είναι οι οδθγίεσ (directives), με τρόπο παρόμοιο με το OpenMP 3.x για ομοιογενζσ ςφςτθμα ι για το προγεννζςτερο OpenHMPP. Οι προδιαγραφζσ περιλαμβάνουν επίςθσ μια βιβλιοκικθ χρόνου εκτζλεςθσ που ορίηει διάφορεσ λειτουργίεσ υποςτιριξθσ. 8
9 Βαςική ιδέα του OpenACC Για αποδοτικότθτα, διαχωρείςτε τθν κίνθςθ δεδομζνων και υπολογίςτε τθν μεταφορά εκτζλεςθσ των υπολογιςμϊν μεταξφ των πόρων. Μνιμθ CPU Μεταφορά δεδομζνων Μνιμθ CPU Δίαυλοσ PCI CPU Μεταφορά εκτζλεςθσ υπολογιςμϊν από τον ζναν πόρο ςτον άλλον GPU 9
10 τόχοι τησ φορητότητασ του OpenACC Φορθτότθτα μεταγλωττιςτι Διαφορετικοί μεταγλωττιςτζσ πρζπει να υποςτθρίηουν τισ ίδιεσ οδθγίεσ (directives/pragmas) και βιβλιοκικεσ κατά του χρόνου εκτζλεςθσ. 10
11 τόχοι τησ φορητότητασ του Φορθτότθτα ςυςκευισ OpenACC χεδιάςτθκε με τθν προυπόκεςθ να είναι αρκετά υψθλοφ επιπζδου για να υποςτθρίηει οποιοδιποτε ςθμερινό ι μελλοντικό επιταχυντι. Εξαλείφει τθν ανάγκθ για ξεχωριςτζσ διακλαδϊςεισ του κϊδικα για τθ CPU και τισ GPUs. 11
12 τόχοι τησ φορητότητασ του Φορθτότθτα εκτζλεςθσ OpenACC Δεδομζνου ότι το OpenACC αναφζρει μόνο τον κϊδικα, ο καλoγραμμζνοσ κϊδικασ πρζπει να ζχει καλζσ επιδόςεισ είτε πρόκειται για τθ CPU είτε για τθ GPU. 12
13 GPU & GPGPU Αρχικά, θ μονάδα επεξεργαςίασ γραφικϊν (GPU) είναι υπεφκυνθ για το χειριςμό γραφικϊν υπολογιςτϊν και επεξεργαςίασ εικόνασ. Πραδοςιακά, θ GPU είναι γνωςτι ωσ video card. 13
14 GPU & GPGPU Η εξαιρετικά παράλλθλθ δομι τθσ τθν κακιςτά αποδοτικι για τα παράλλθλα προγράμματα. ιμερα, οι GPU χρθςιμοποιοφνται για εργαςίεσ που εκτελοφςαν παλιότερα οι CPU, όπωσ θ υπολογιςτικι πλθροφορικι. Για τζτοιου είδουσ εργαςίεσ θ GPU ονομάηεται General Purpose GPU (GPGPU). ε πολλζσ περιπτϊςεισ, ζνα παράλλθλο πρόγραμμα λειτουργεί ταχφτερα ςε GPU παρά ςε CPU. 14
15 GPU & GPGPU θμειϊςτε ότι ζνα ςειριακό πρόγραμμα τρζχει πιο γριγορα ςτθ CPU από ο,τι ςτθ GPU. Ο πιο δθμοφιλισ τφποσ GPU ςτον κόςμο των υπολογιςτϊν υψθλισ απόδοςθσ είναι θ GPU τθσ NVIDIA, όπου και κα επικεντρωκοφμε. CPU ΠΟΛΛΑΠΛΟΙ ΠΤΡΗΝΕ GPU ΧΙΛΙΑΔΕ ΠΤΡΗΝΕ 15
16 3 τρόποι για να επιταχυνθούν οι εφαρμογέσ ςτη GPU Εφαρμογζσ Αφξθςθ τθσ προγραμματιςτικισ προςπάκειασ 1οσ 2οσ 3οσ Βιβλιοκικεσ Οδθγίεσ OpenACC Γλϊςςεσ Προγραμματιςμοφ Έτοιμεσ βιβλιοθήκεσ με κϊδικα Οι CUDA βιβλιοκικεσ είναι διαλειτουργικζσ με το OpenACC Εφκολη επιτάχυνςη εφαρμογϊν Μζγιςτη Ευελιξία Οι CUDA γλϊςςεσ είναι επίςθσ διαλειτουργικζσ με το OpenACC 16
17 Η GPU είναι ένασ επιταχυντήσ Η GPU είναι μια ςυςκευι βαςιςμζνθ ςτο ςφςτθμα τθσ CPU. H GPU ςυνδζεται με τθ CPU μζςω του διαφλου PCI (Peripheral Component Interconnect (PCI)), ο οποίοσ αποτελεί ζνα κανάλι ι μια διαδρομι μεταξφ των ςτοιχείων ςε ζναν υπολογιςτι. Σο πρόγραμμα μπορεί να παραλλθλοποιθκεί και να επιταχυνκεί ςτθ GPU. Η CPU και θ GPU ζχουν ξεχωριςτζσ μνιμεσ. Η μεταφορά δεδομζνων μεταξφ CPU και GPU απαιτείται για προγραμματιςμό. Μεταξφ τθσ CPU και GPU απαιτείται μεταφορά δεδομζνων. 17
18 Σο μοντέλο του επιταχυντή GPU ςτο OpenACC Για να εξαςφαλιςτεί θ φορθτότθτα του OpenACC ςε όλεσ τισ αρχιτεκτονικζσ, κακορίηεται ζνα αφθρθμζνο μοντζλο επιτάχυνςθσ του προγραμματιςμοφ. Εκκζτει πολλαπλά επίπεδα παραλλθλοποίθςθσ, κακϊσ και μια ιεραρχία μνθμϊν με διαφορετικοφσ βακμοφσ ταχφτθτασ και διευκυνςιοδότθςθσ. 18
19 Σο μοντέλο του επιταχυντή GPU ςτο OpenACC τόχοσ αυτοφ του μοντζλου είναι να διαςφαλίςει ότι το OpenACC κα εφαρμόηεται ςε περιςςότερεσ από μία αρχιτεκτονικζσ όπωσ και να μπορεί να χρθςιμοποιθκεί και ςε μελλοντικζσ ςυςκευζσ. τον πυρινα του, το OpenACC υποςτθρίηει τθν μεταφορά-μεταφόρτωςθ των υπολογιςμϊν και δεδομζνων από τθν host ςυςκευι ςτθ ςυςκευι επιτάχυνςθσ. 19
20 Σο μοντέλο του επιταχυντή GPU ςτο OpenACC τθν πραγματικότθτα, αυτζσ οι ςυςκευζσ μπορεί να είναι ίδιεσ ι και διαφορετικζσ αρχιτεκτονικζσ, όπωσ ςτθν περίπτωςθ όπου host είναι θ CPU και επιταχυντισ θ GPU. Οι δφο ςυςκευζσ ενδζχεται επίςθσ να ζχουν χωριςτοφσ χϊρουσ μνιμθσ ι ζναν μόνο χϊρο μνιμθσ. 20
21 Σο μοντέλο του επιταχυντή GPU ςτο OpenACC τθν περίπτωςθ που οι δφο ςυςκευζσ ζχουν διαφορετικζσ μνιμεσ, ο μεταγλωττιςτισ OpenACC και ο χρόνοσ εκτζλεςθσ κα αναλφςουν τον κϊδικα και κα διαχειριςτοφν τθ μνιμθ του επιταχυντι και τθ μεταφορά δεδομζνων μεταξφ τθσ μνιμθσ του κεντρικοφ υπολογιςτι (CPU) και τθσ ςυςκευισ. Σο παρακάτω ςχιμα δείχνει ζνα διάγραμμα υψθλοφ επιπζδου του αφθρθμζνου επιταχυντι OpenACC, αλλά κυμθκείτε ότι οι ςυςκευζσ και οι μνιμεσ μπορεί να είναι οι ίδιεσ ςε οριςμζνεσ αρχιτεκτονικζσ. 21
22 Κεντρικόσ υπολογιςτισ (CPU) Συςκευι Μνιμθ κεντρικοφ υπολογιςτι Μνιμθ Συςκευισ Μοντέλο αφηρημένου επιταχυντή του OpenACC 22
23 Τπολογιςμόσ των εργαςιών του OpenACC (1/3) Ο υπολογιςμόσ τθσ ποςότθτασ των εργαςιϊν ι των υπολογιςμϊν ςτο OpenACC ζχει τρία επίπεδα: gang, worker και vector. Αυτό το μοντζλο υποτίκεται ότι αντιςτοιχεί ςε οποιαδιποτε αρχιτεκτονικι που είναι ςυλλογι από ςτοιχεία επεξεργαςίασ Processing Elements (PEs), όπου κάκε ςτοιχείο επεξεργαςίασ (PE) υπόκειται υπερνιματωςθ και κάκε νιμα εκτελεί τισ οδθγίεσ του vector. 23
24 Τπολογιςμόσ των εργαςιών του OpenACC (2/3) 24 Απεικόνιςθ του υπολογιςμοφ των εργαςιϊν του OpenACC
25 Τπολογιςμόσ των εργαςιών του OpenACC (3/3) Πιο ςυγκεκριμζνα ζχουμε τον οριςμό του κάκε επιπζδου: gang: Είναι ζνα μπλοκ νθμάτων (worker). Όλα τα νιματα ςε ζναν ςυνδιαςμό (ι διαφορετικά gang) μποροφν να μοιράηονται πόρουσ, όπωσ κρυγι μνιμθ ι επεξεργαςτι. worker: Είναι αποτελεςματικά ζνα warp (νιμα που τρζχει κατά μικοσ διαςυνδεδεμζνων κόμβων που παρομοιάηονται ςαν φφαςμα ). Τπολογίηει ζνα νιμα (vector). vector: Είναι ζνα νιμα CUDA και εκτελεί τισ επαναλιψεισ ςτθν SIMD (Single instruction, multiple data) ςε ζνα μόνο βιμα. Εάν υπάρχουν λιγότερα δεδομζνα από το μικοσ του διανφςματοσ, θ λειτουργία εξακολουκεί να εκτελείται ςε μθδενικζσ τιμζσ και το αποτζλεςμα απορρίπτεται. φνταξθ για τθ C #pragma acc kernels loop gang(n) worker(m) vector(k) #pragma acc parallel loop num_gangs(n) num_workers(m) vector_length(k) Kernel: Μια παράλλθλθ λειτουργία που τρζχει ςτθ GPU. 25
26 τοχεύοντασ ςτην αρχιτεκτονική (1) Όπωσ προαναφζρκθκε, το OpenACC υποκζτει ότι μια ςυςκευι κα περιζχει πολλαπλά ςτοιχεία επεξεργαςίασ (PE) που εκτελοφνται παράλλθλα. Κάκε ςτοιχείο επεξεργαςίασ (ΡΕ) ζχει επίςθσ τθν ικανότθτα να εκτελεί αποτελεςματικά διανυςματικζσ λειτουργίεσ. Για τισ GPU τθσ NVIDIA, είναι λογικό να ςκεφτόμαςτε ζνα ςτοχείο επεξεργαςίασ (ΡΕ) ωσ ζνα πολυεπεξεργαςτι ροισ (Streaming Multiprocessor-SM). Σότε ζνα OpenACC gang είναι ζνα block νθμάτων, ζνα worker είναι ζνα warp και ζνα OpenACC vector (διάνυςμα) είναι ζνα νιμα CUDA. Σο Phi, ι παρόμοιεσ αρχιτεκτονικζσ Intel SMP επίςθσ χαρτογραφοφν με λογικό, αλλά διαφορετικό τρόπο. 26
27 τοχεύοντασ ςτην αρχιτεκτονική (2) χθματικά μποροφμε να δοφμε αυτά που προαναφζρκθκαν ςτθν προθγοφμενθ διαφάνεια: 27
28 Σι πρέπει να ξέρουμε για τα warps υγκεριμζνα εδϊ αναφερόμαςτε ςτα warps τθσ GPU μικροαρχιτεκτονικισ -Kepler- τθσ NVIDIA. Σα block χωρίηονται ςε 32 νθματικζσ ευρείεσ μονάδεσ που ονομάηονται warps. Σο μζγεκοσ των warps είναι ςυγκεκριμζνο και μπορεί να αλλάξει μελλοντικά. Ο πολυεπεξεργαςτισ ροισ (SM) δθμιουργεί, διαχειρίηεται, προγραμματίηει και εκτελεί τα νιματα βάςει τον βακμό ανάλυςθσ των warp. Κάκε warp αποτελείται από 32 νιματα ςυνεχϊν νθμάτων αναγνϊριςθσ (theadids). Όλα τα νιματα ςε ζνα warp εκτελοφν τθν ίδια εντολι Εάν τα νιματα ενόσ warp αποκλίνουν, το warp εκτελεί ςειριακά κάκε διαδρομι διακλάδωςθσ. Όταν ζνα warp εκτελεί μια εντολι που αποκτά πρόςβαςθ ςτθν παγκόςμια μνιμθ ςυγχωνεφει τισ προςβάςεισ μνιμθσ των νθμάτων εντόσ του warp με όςο το δυνατόν λιγότερεσ μεταφορζσ. 28
29 Όρια μεγέθουσ των επιπέδων vector, worker, gang Τπενκυμίηουμε ότι αναφερόμαςτε πάντα ςτθν μικροαρχιτεκτονικι GPU -Kepler- τθσ NVIDIA, όπου ιςχφουν τα παρακάτω: Σο μικοσ του vector πρζπει να είναι πολλαπλάςιο του 32 (ζωσ 1024) Σο μζγεκοσ του gang δίνεται από τον αρικμό των worker μετρϊντασ το μζγεκοσ ενόσ vector. Ο αρικμόσ αυτόσ δεν μπορεί να είναι μεγαλφτεροσ από Ο ςυνολικόσ αρικμόσ των νθμάτων ςε ζνα μπλοκ: μεταξφ 256 και 512 είναι ςυνικωσ είναι ζνασ καλόσ αρικμόσ. Για παράδειγμα, το clause worker(32) του vector (32) κα δθμιουργοφςε 32 worker για να πραγματοποιιςει υπολογιςμοφσ ςε διανφςματα (vectors) μεγζκουσ
30 Πώσ αποφαςίζουμε τον αριθμό των blocks (grid) Αναφερόμενοι ςτθν μικροαρχιτεκτονικι GPU -Kepler- τθσ NVIDIA: Οι περιςςότεροι αρχίηουν με το να ζχουν κάκε νιμα να εκτελεί μια μονάδα εργαςίασ. υνικωσ είναι καλφτερα να ζχετε λιγότερα νιματα, ϊςτε κάκε νιμα να εκτελεί πολλαπλά κομμάτια τθσ εργαςίασ. Ποιο είναι το όριο για το πόςο μικρότερο μποροφμε να κάνουμε τον αρικμό των ςυνολικϊν μπλοκ; Εξακολουκοφμε να κζλουμε να ζχουμε τουλάχιςτον όςο το δυνατόν περιςςότερα νιματα ϊςτε να γεμίςει θ GPU πολλζσ φορζσ (π.χ 4 φορζσ). Αυτό ςθμαίνει ότι χρειαηόμαςτε τουλάχιςτον 2880 x 15 x 4 = ~ νιματα Πειραματιςτείτε μειϊνοντασ τον αρικμό των νθμάτων! 30
31 Αντιςτοίχιςη OpenACC με CUDA threads και blocks (1/2) Γνωρίηουμε ότι το OpenACC προορίηεται ωσ γλϊςςα για τουσ γενικοφσ επιταχυντζσ, ζτςι δεν υπάρχει άμεςθ αντιςτοίχθςθ των νθμάτων, των blocks και των warps του CUDA. Η ζκδοςθ 2.0 του προτφπου OpenACC δθλϊνει μόνο ότι gang πρζπει να είναι το εξωτερικό επίπεδο παραλλθλιςμοφ, ενϊ ο vector πρζπει να είναι το εςωτερικό επίπεδο. τθν πραγματικότθτα θ αντιςτοίχιςθ ζχει αφεκεί ςτον μεταγλωττιςτι. Ωςτόςο, αν γνωρίηετε ότι μπορεί να υπάρξουν εξαιρζςεισ, μπορείτε να ςκεφτείτε τθν εφαρμογι τθσ ακόλουκθσ αντιςτοίχιςθσ: OpenACC vector => CUDA threads OpenACC worker => CUDA warps OpenACC gang => CUDA thread blocks 31
32 Αντιςτοίχιςη OpenACC με CUDA threads και blocks (2/2) #pragma acc kernels for ( int i = 0; i < n; ++i ) y[ i ] += a*x[i]; 16 blocks, 256 νιματα ςτο κακζνα #pragma acc kernels loop gang(100) vector(128) for ( int i = 0; i<n; ++i ) y[ i ] += a*x[ i ]; 100 blocks, ςτο κακζνα 128 νιματα, ςε κάκε νιμα εκτελείται μια επανάλθψθ ςτο βρόχο #pragma acc parallel num_gangs(100) vector_length (128) { #pragma acc loop gang vector for( int i = 0; i < n; ++i ) y[ i ] +=a*x[ i ]; } 100 blocks, ςτο κακζνα 128 νιματα, ςε κάκε νιμα εκτελείται μια επανάλθψθ ςτο βρόχο με χριςθ parallel 32
33 Σα βαςικά ςτοιχεία του OpenACC 33
34 Σι είναι οι οδηγίεσ (directives) του μεταγλωττιςτή; Σα directives υποδεικνφουν ςτον μεταγλωττιςτι ι ςτο χρόνο εκτζλεςθσ να.. Δθμιουργεί τον παράλλθλο κϊδικα για τθ GPU. Κατανζμει τθ μνιμθ τθσ GPU και αντιγράφει τα δεδομζνα ειςόδου. Αντιγράφει τα δεδομζνα εξόδου ςτθ CPU και απελευκερϊνει τμιματα τθσ μνιμθσ τθσ GPU που είχε δεςμεφςει προθγουμζνωσ. 34
35 ύνταξη οδηγιών (directives) Σε Fortran!$acc directive *clause *,+ clause+ + υνδυάηεται ςυχνά με μια αντίςτοιχθ τελικι οδθγία που περιβάλλει ζνα δομθμζνο block κϊδικα.! $acc end directive Σε C #pragma acc directive [clause [,] clause] ] υχνά ακολουκείται από ζνα δομθμζνο block κϊδικα. 35
36 ημαντικά directives 1/4 #pragma acc parallel [clause + {structured block} Κακορίηει μια περιοχι όπου οι επαναλιψεισ βρόχων μποροφν να εκτελοφνται παράλλθλα. Ο μεταγλωττιςτισ ζχει τθν ελευκερία να το αποςυνκζτει αυτό, ωςτόςο κεωρείται επικερδζσ. #pragma acc kernels *clause + {structured block} Παρόμοιο με το parallel, αλλά οι βρόχοι μζςα ςτθν περιοχι των πυρινων κα είναι ανεξάρτθτοι πυρινεσ, παρά ζνασ μεγάλοσ πυρινασ. Και τα δφο χρθςιμοποίουνται για να κακορίςουν τθν παραλλθλοποίθςθ των πυρινων που εκτελοφνται ςε ζναν επιταχυντι με τθ χριςθ ξεχωριςτισ ςθμαςιολογίασ. Οι ανεξάρτθτοι πυρινεσ και οι ςυνδεδεμζνεσ μεταφορζσ δεδομζνων ενδζχεται να επικαλφπτονται από άλλουσ πυρινεσ. 36
37 ημαντικά directives 2/3 #pragma acc data*clause + {structured block} Είναι το κφριο directive που κακορίηει και αντιγράφει τα δεδομζνα προσ και από τον επιταχυντι. Χριςιμo για τθ μείωςθ των ςυνδζςεων PCIe (Peripheral Component Interconnect Express), ζνα πρότυπο διαφλου τθσ ςειριακισ επζκταςθσ για τθ ςφνδεςθ ενόσ υπολογιςτι ςε μία ι περιςςότερεσ περιφερειακζσ ςυςκευζσ, δθμιουργϊντασ προςωρινζσ ςυςτοιχίεσ ι αφινοντασ δεδομζνα ςτθ ςυςκευι μζχρι να χρειαςτεί. #pragma acc host_data Κακορίηει μια περιοχι ςτθν οποία κα χρθςιμοποιοφν ςυςτοιχίεσ CPU, εκτόσ αν ορίηεται με use_device() Σο use_device αναφζρεται ςτο δείκτθ ςυςκευισ ςτθ CPU. Χριςιμο για τθν αλλθλεπικάλυψθ με υπολογιςμό τθσ CPU ι για κλιςθ βιβλιοκθκϊν που αναμζνουν τθ μνιμθ ςυςκευισ. 37
38 ημαντικά directives 3/4 #pragma acc wait υγχρονίηεται με αςφγχρονεσ δραςτθριότθτεσ. Μπορεί να δθλϊςει ςυγκεκριμζνεσ καταςτάςεισ ι να περιμζνει όλα τα εκκρεμι αιτιματα. #pragma acc update *clause + if ( expression ) async ( expression ) Μετακινεί δεδομζνα από τθ GPU ςτον κεντρικό υπολογιςτι, ι και αντιςτρόφωσ. Η κίνθςθ δεδομζνων μπορεί να είναι υπό ςυνκικθ και αςφγχρονθ. 38
39 ημαντικά directives 4/4 #pragma acc loop *clause + {loop} Βελτιςτοποιεί τον τρόπο με τον οποίο ο μεταγλωττιςτισ αντιμετωπίηει ςυγκεκριμζνουσ βρόχουσ. Μπορεί να χρθςιμοποιθκεί για να κακορίςει τθν αποςφνκεςθ τθσ εργαςίασ. Μπορεί να χρθςιμοποιθκεί για τθν κατάρρευςθ εμφωλευμζνου βρόχου για επιπλζον παραλλθλοποίθςθ. Μπορεί να χρθςιμοποιθκεί για να δθλϊςει τουσ πυρινεσ (kernels) ωσ ανεξάρτθτουσ ο ζνασ από τον άλλον. 39
40 Η οδηγία kernels Ο μεταγλωττιςτισ κα διαιρζςει τον κϊδικα ςτθν περιοχι πυρινων ςε μια ακολουκία πυρινων επιταχυντι. Συπικά, κάκε βρόχοσ κα είναι ζνασ ξεχωριςτόσ πυρινασ. Όταν το πρόγραμμα εντοπίςει κϊδικα με τθν οδθγία kernels, κα ξεκινιςει τθν ςειριακι αλλθλουχία των πυρινων για τθ ςυςκευι. Ο αρικμόσ και θ διαμόρφωςθ των gangs, των workers και το vector length μπορεί να διαφζρουν για κάκε πυρινα. 40
41 Δηλώςεισ τησ οδηγίασ kernels (1/3) async [( int-expr )] wait [( int-expr-list )] device_type( device-typelist ) if( condition ) copy( var-list ) copyin( var-list ) copyout( var-list ) Είναι απαραίτθτο για τθν εκτζλεςθ του τοπικοφ νιματοσ κακϊσ και τα δεδομζνα μποροφν να υποβάλλονται με αςφγχρονθ επεξεργαςία. Σο τοπικό νιμα περιμζνει όλεσ τισ ςχετικζσ αςφγχρονεσ ουρζσ δραςτθριότθτασ ςυςκευϊν. Σο πρόγραμμα κα εκχωριςει ι κα ανακατανομιςει προςωρινά τθ μνιμθ τθσ ςυςκευισ και κα μεταφζρει δεδομζνα προσ και / ι από τθ ςυςκευι. Tο πρόγραμμα κα κατανζμει υπό ςυνκικθ τθ μνιμθ και κα μεταφζρει δεδομζνα προσ και / ι από τθ ςυςκευι. Χρθςιμοποιείται για να δθλϊςει ότι οι μεταβλθτζσ, οι πίνακεσ, ι τα μπλοκ ςτθ var-list ζχουν τιμζσ ςτθν τοπικι μνιμθ που πρζπει να αντιγραφοφν ςτθ μνιμθ τθσ ςυςκευισ. Χρθςιμοποιείται για να δθλϊςει ότι οι μεταβλθτζσ, οι πίνακεσ, ι τα μπλοκ ςτον var-list ζχουν διατεκεί ι περιζχουν τιμζσ ςτθ μνιμθ τθσ ςυςκευισ που πρζπει να αντιγραφοφν ςτθν τοπικι μνιμθ για ζνα επιταχυντι μθ κοινόχρθςτθσ μνιμθσ. 41
42 Δηλώςεισ τησ οδηγίασ kernels (2/3) create( var-list ) present( var-list ) Χρθςιμοποιείται για να δθλϊςει ότι οι μεταβλθτζσ, οι πίνακεσ, ι τα μπλοκ ςτθν var-list πρζπει να κατανεμθκοφν (δθμιουργθκοφν) ςτθ μνιμθ τθσ ςυςκευισ για ζναν επιταχυντι μθ κοινόχρθςτθσ μνιμθσ. Χρθςιμοποιείται για να ενθμερϊςει τθν εφαρμογι ςε μια ςυςκευι μθ κοινόχρθςτθσ μνιμθσ ότι οι μεταβλθτζσ ι οι πίνακεσ τθσ var-list παρουςιάηονται ιδθ ςτθ μνιμθ τθσ ςυςκευισ. present_or_copy( var-list ) Εάν τα δεδομζνα είναι ιδθ διακζςιμα, εκτελείται θ διλωςθ present. Εάν τα δεδομζνα δεν υπάρχουν, εκτελείται θ διλωςθ copy. present_or_copyin( var-list ) Εάν τα δεδομζνα είναι ιδθ διακζςιμαεκτελείται θ διλωςθ present.εάν τα δεδομζνα δεν υπάρχουν εκτελείται θ διλωςθ copyin. 42
43 Δηλώςεισ τησ οδηγίασ kernels (3/3) present_or_copyout( var-list ) Εάν τα δεδομζνα είναι ιδθ διακζςιμα, εκτελείται θ διλωςθ present. Εάν τα δεδομζνα δεν υπάρχουν, εκτελείται θ διλωςθ copyout. present_or_create( var-list ) Εάν τα δεδομζνα είναι ιδθ διακζςιμα, εκτελείται θ διλωςθ present. Εάν τα δεδομζνα δεν υπάρχουν, εκτελείται θ διλωςθ create. deviceptr( var-list ) Χρθςιμοποιείται για να δθλϊςει ότι οι δείκτεσ ςτθν var-list είναι δείκτεσ ςυςκευισ. default( none ) Αποτρζπει τον μεταγλωττιςτι να προςδιορίςει ζμμεςα τα χαρακτθριςτικά γνωρίςματα δεδομζνων για τισ μεταβλθτζσ που αναφζρονται. 43
44 Περιοριςμοί για την οδηγία kernels Ζνα πρόγραμμα μπορεί να μθν διακλαδϊνεται εντόσ ι εκτόσ τθσ δομισ kernels. Σο πρόγραμμα δεν πρζπει να εξαρτάται από τθ ςειρά αξιολόγθςθσ των δθλϊςεων ι από τυχόν παρενζργειεσ των αξιολογιςεων. Μόνο οι δθλϊςεισ async και wait μποροφν να ακολουκιςουν μια διλωςθ device_type. Μπορεί να εμφανιςτεί το πολφ μία διλωςθ. τθ C ι C ++, θ ςυνκικθ πρζπει να αξιολογθκεί ςε μια ακζραι βακμωτι τιμι. 44
45 Η εφαρμογή τησ οδηγίασ kernels Συνδιαςτικά 65% πιο γριγορο Στθν περίπτωςθ gang(32), worker(8) -> 30% πιο γριγορο 45
46 Η οδηγία parallel Όταν το πρόγραμμα ςυναντά παράλλθλθ δομι, δθμιουργοφνται μία ι περιςςότερεσ gangs για να εκτελζςει τθν παράλλθλθ περιοχι του επιταχυντι. Ο αρικμόσ των gangs, ο αρικμόσ των workers ανά gang και ο αρικμόσ των vector lanes ανά worker παραμζνουν ςτακεροί κατά τθ διάρκεια αυτισ τθσ παράλλθλθσ περιοχισ. Κάκε gang αρχίηει να εκτελεί τον κϊδικα ςτο δομθμζνο μπλοκ ςε κατάςταςθ πλεοναςμοφ των gang. Αυτό ςθμαίνει ότι ο κϊδικασ μζςα ςτθν παράλλθλθ περιοχι, αλλά ζξω από ζναν βρόχο με μια οδθγία loop και τον διαμοιραςμό εργαςιϊν ςε επίπεδο των gangs, κα εκτελεςτεί με πλεοναςμό από όλα τα gangs. 46
47 Δηλώςεισ τησ οδηγίασ parallel num_gangs ( expression ) num_workers ( expression) vector_length ( list ) private ( list ) firstprivate ( list ) reduction ( operator: list) Ελζχγει πόςα gangs ζχουν δθμιουργθκεί(cuda griddim) Ελζγχει πόςα workers ζχουν δθμιουργθκεί ςε κάκε gang (CUDA blockdim) Ελζχγει το μικοσ του vector του κάκε worker (SIMD εκτζλεςθ) Κατανζμει ζνα αντίγραφο τθσ κάκε μεταβλθτισ ςε λίςτα για κάκε gang Μεταβλθτζσ private που αρχικοποιοφνται από τον κεντρικό υπολογιςτι Μεταβλθτζσ private ςε ςυνδυαςμό με τα gangs Περιλαμβάνονται και οι δηλϊςεισ που είδαμε προηγουμζνωσ: async, wait, device_type, if, copy, copyin, copyout, create, present, present_or_copy, present_or_copyin, present_or_copyout, present_or_create, deviceptr και default 47
48 Περιοριςμοί για την οδηγίασ parallel Ζνα πρόγραμμα μπορεί να μθν διακλαδϊνεται εντόσ ι εκτόσ τθσ parallel δομισ. Σο πρόγραμμα δεν πρζπει να εξαρτάται από τθ ςειρά αξιολόγθςθσ των δθλϊςεων ι από τυχόν παρενζργειεσ των αξιολογιςεων. Μόνο οι δθλϊςεισ async, wait, num_gangs, num_workers και vector_length ενδζχεται να ακολουκοφν μια διλωςθ device_type. Μπορεί να εμφανιςτεί το πολφ μία διλωςθ. τθ C ι C ++, θ ςυνκικθ πρζπει να αξιολογθκεί ςε μια βακμωτι ακζραια τιμι. 48
49 Περιςςότερη παραλληλοποίηςη Βρίςκει το μζγιςτο ςε όλεσ τισ επαναλιψεισ 49
50 Η οδηγία data Κακορίηει βακμωτζσ μεταβλθτζσ, πίνακεσ και υποπίνακεσ που κα διατεκοφν ςτθ μνιμθ τθσ ςυςκευισ για τθ διάρκεια τθσ εκτζλεςθσ του μπλοκ κϊδικα τθσ οδθγίασ data. Eάν, δθλαδι, τα δεδομζνα πρζπει να αντιγραφοφν από τον κεντρικό υπολογιςτι ςτθ μνιμθ τθσ ςυςκευισ κατά τθν ζναρξθ του κϊδικα τθσ οδθγίασ και να αντιγραφοφν από τθ ςυςκευι ςτθ μνιμθ υποδοχισ κατά τθν ζξοδο από το μπλόκ του κϊδικα. 50
51 Δηλώςεισ τησ οδηγίασ data Οι δθλϊςεισ τθσ οδθγίασ data είναι οι παρακάτω: copyin (list) - Καταχωρεί μνιμθ ςτθ GPU και αντιγράφει δεδομζνα από τον κεντρικό υπολογιςτι ςε GPU κατά τθν είςοδο ςτθν περιοχι. copyout (list) - Καταχωρεί μνιμθ ςτθ GPU και αντιγράφει δεδομζνα ςτον κεντρικό υπολογιςτι όταν εξζρχεται από τθν περιοχι. copy (list) - Καταχωρεί τθ μνιμθ ςτθ GPU και αντιγράφει δεδομζνα από τον κεντρικό υπολογιςτι ςτθ GPU κατά τθν είςοδο ςτθν περιοχι και αντιγράφει τα δεδομζνα ςτον κεντρικό υπολογιςτι όταν εξζρχεται από τθν περιοχι. (Μόνο δομθμζνα δεδομζνα) create (list) - Καταχωρεί τθ μνιμθ ςτθ GPU αλλά δεν αντιγράφει. delete (list) - Διαγραφι μνιμθσ ςτθ GPU χωρίσ αντιγραφι. (Μόνο αδόμθτα δεδομζνα) present (list) - Σα δεδομζνα βρίςκονται ιδθ ςτθ GPU από άλλθ περιοχι δεδομζνων που τα περζχει. 51
52 Διαμόρφωςη Πινάκων ςτη δήλωςη τησ οδηγίασ data Οι μεταγλωττιςτζσ μερικζσ φορζσ δεν μποροφν να κακορίςουν το μζγεκοσ των πινάκων οπότε πρζπει να κακορίςουμε ρθτά χρθςιμοποιϊντασ δθλϊςεισ δεδομζνων με ζνα πίνακα shape. Ο μεταγλωττιςτισ κα ςασ ενθμερϊςει εάν πρζπει να το κάνετε αυτό. Μερικζσ φορζσ, εςείσ κα κζλετε για τουσ δικοφσ ςασ λόγουσ απόδοςθσ. ε C και C ++, ζνασ υποπίνακασ είναι ζνα όνομα πίνακα ακολουκοφμενο από τον προςδιοριςμό τθσ απόςταςθσ ςε αγκφλεσ, με αρχι και μικοσ, όπωσ: AA[2:n] Εάν λείπει το κατϊτερο όριο, χρθςιμοποιείται μθδζν. Εάν το μικοσ λείπει και ο πίνακασ ζχει γνωςτό μζγεκοσ, χρθςιμοποιείται το μζγεκοσ του πίνακα, διαφορετικά το μικοσ είναι απαραίτθτο. Ο υποπίνακασ AA*2:n] ςθμαίνει ότι αποτελείται από τα ςτοιχεία AA[2], AA[3],, AA[2+n-1]. 52
53 Προδιαγραφέσ δεδομένων ςτη δήλωςη τησ οδηγίασ data (1/2) τισ C και C ++, ζνασ πίνακασ δφο διαςτάςεων μπορεί να δθλωκεί με τουλάχιςτον τζςςερισ τρόπουσ: 1. Πίνακασ με ςτατικό μζγεκοσ : float AA[100][200]; 2. Δείκτθσ ςε ςειρά ςτατικοφ μεγζκουσ: typedef float row[200]; row* BB; 3. Πίνακασ δεικτϊν με ςτατικό μζγεκοσ: float* CC[200]; 4. Δείκτθσ ςε δείκτεσ: float** DD; 53
54 Προδιαγραφέσ δεδομένων ςτη δήλωςη τησ οδηγίασ data (1/2) Κάκε διάςταςθ μπορεί να ζχει ςτατικό μζγεκοσ ι ζνασ δείκτθσ μπορεί να κατανζμεται δυναμικά ςτθ μνιμθ. Κακζνα από αυτά μπορεί να ςυμπεριλθφκεί ςε μια διλωςθ δεδομζνων χρθςιμοποιϊντασ υποςθμείωςθ για να κακοριςμό ενόσ ορκογϊνιου πίνακα: AA[2:n][0:200] BB[2:n][0:m] CC[2:n][0:m] DD[2:n][0:m] Μποροφν να κακοριςτοφν πολυδιάςτατα ορκογϊνια υποςυςτιματα ςε C και C ++ για οποιαδιποτε διάταξθ με οποιονδιποτε ςυνδυαςμό διαςτάςεων ςτατικοφ μεγζκουσ ι δυναμικά κατανεμθμζνων διαςτάςεων. Για διαςτάςεισ ςτατικοφ μεγζκουσ, όλεσ οι διαςτάςεισ εκτόσ από τθν πρϊτθ πρζπει να κακορίηουν ολόκλθρθ τθ διάςταςθ, ϊςτε να διατθροφνται οι περιοριςμοί των ςυνεχόμενων δεδομζνων που περιγράφονται παρακάτω. Για δυναμικά κατανεμθμζνεσ διαςτάςεισ, θ υλοποίθςθ κα κατανείμει ςτθ ςυςκευι τουσ δείκτεσ που αντιςτοιχοφν ςτουσ δείκτεσ του κεντρικοφ υπολογιςτι και κα τουσ ςυμπλθρϊςει ανάλογα με τθν περίπτωςθ. 54
55 Περιοριςμοί των δεδομένων ςτη δήλωςη τησ οδηγίασ data (2/2) τισ C και C ++, το μικοσ για δυναμικά κατανεμθμζνεσ διαςτάςεισ ενόσ πίνακα πρζπει να κακορίηεται άμεςα. ε C και C ++, κατά τθ διάρκεια τθσ ηωισ των δεδομζνων, είτε ςτον κεντρικό υπολογιςτι είτε ςτθ ςυςκευι θ τροποποίθςθ των δεικτϊν ςε πίνακεσ δεικτϊν μπορεί να οδθγιςει ςε απροςδιόριςτθ ςυμπεριφορά. Εάν ζνα υποςφνολο ζχει οριςτεί ςε μια διλωςθ δεδομζνων, θ υλοποίθςθ μπορεί να επιλζξει να διακζςει μνιμθ μόνο για εκείνον τον υποπίνακα ςτον επιταχυντι. Οποιοςδιποτε πίνακασ ι υποπίνακασ ςε μια διλωςθ δεδομζνων, πρζπει να είναι ζνα ςυνεχόμενο μπλοκ μνιμθσ, εκτόσ από τουσ δυναμικοφσ πολυδιάςτατουσ πίνακεσ C. Όλα τα ςτοιχεία δεδομζνων τθσ δομισ ι τθσ κλάςθσ κατανζμονται και αντιγράφονται εάν κακορίηεται μια μεταβλθτι ι πίνακασ τφπου struct ι class, ανάλογα με τθν περίπτωςθ. Εάν ζνα μζλοσ struct ι class είναι ζνασ δείκτθσ, τα δεδομζνα που διευκυνςιοδοτοφνται από αυτόν τον δείκτθ δεν αντιγράφονται ζμμεςα. 55
56 Βελτιωμένη διαδικαςία εκτέλεςησ τησ GPU ςτο OpenACC Η αντιγραφι του πίνακα Α είναι πολφ πιο αποδοτικι και θ κίνθςθ δεδομζνων για τον πίνακα Anew ζχει εξαλειφκεί. 56
57 Η οδηγία loop Εφαρμόηεται ςε ζναν βρόχο ο οποίοσ πρζπει να ακολουκιςει αμζςωσ αυτι τθν οδθγία. Η οδθγία βρόχου μπορεί να περιγράψει τον τφπο παραλλθλιςμοφ που πρζπει να χρθςιμοποιθκεί για τθν εκτζλεςθ του βρόχου και να δθλϊςει τισ ιδιωτικζσ μεταβλθτζσ του βρόχου και τουσ πίνακεσ κακϊσ και τισ λειτουργίεσ τθσ διλωςθσ reduction. 57
58 Δηλώςεισ τησ οδηγίασ loop (1/7) collapse ( n ) seq private (var- list ) independent device_type( device-typelist ) Χρθςιμοποιείται για να κακορίςει πόςοι εμφωλευμζνοι βρόχοι ςυνδζονται με τθ δομι του βρόχου. Σο όριςμα n πρζπει να είναι μια ςτακερι κετικι ακζραια ζκφραςθ. Κακορίηει ότι ο ςυνδεδεμζνοσ βρόχοσ ι βρόχοι πρζπει να εκτελοφνται διαδοχικά από τον επιταχυντι. Δθμιουργεί αντίγραφο για κάκε μεταβλθτι ςτθ var-list, για κάκε νιμα που εκτελεί μία ι πειςςότερεσ επανάλθψεισ του ςχετικοφ βρόχου ι βρόχων. Καταδεικνφει ότι οι επαναλιψεισ αυτοφ του βρόχου είναι ανεξάρτθτεσ των δεδομζνων. Αυτό επιτρζπει ςτθν υλοποίθςθ να δθμιουργιςει κϊδικα για να εκτελζςει τισ επαναλιψεισ παράλλθλα χωρίσ ςυγχρονιςμό. ε μια δομι parallel θ διλωςθ independent εμπεριζχεται ςε όλεσ τισ οδθγίεσ βρόχων χωρίσ μια διλωςθ seq. Οι οδθγίεσ OpenACC μποροφν να κακορίςουν διαφορετικζσ δθλϊςεισ ι ορίςματα δθλϊςεων για διαφορετικοφσ επιταχυντζσ χρθςιμοποιϊντασ τθ διλωςθ device_type. Σο όριςμα ςτθ ριτρα device_type είναι μια λίςτα διαχωριςμζνθ με κόμμα ενόσ ι περιςςότερων ονομαςτικϊν αναγνωριςτικϊν τθσ αρχιτεκτονικισ του επιταχυντι ι ζνασ αςτερίςκοσ. Μία οδθγία μπορεί να ζχει μία ι περιςςότερεσ ριτρεσ device_type. 58
59 Δηλώςεισ τησ οδηγίασ loop (2/7) gang [( gang-arg-list )], όπου gang-arg-list χρηςιμοποιείται ζνα από τα παρακάτω: [num:] int-expr, static: size-expr ε μια δομι parallel ορίηει ότι οι επαναλιψεισ του ςχετικοφ βρόχου ι βρόχων πρζπει να εκτελοφνται παράλλθλα με τθ κατανομι των επαναλιψεων μεταξφ των gang που δθμιουργοφνται από τθ δομι. Μια δομι loop με τθ διλωςθ gang μετατρζπει μια περιοχι υπολογιςμϊν από κατάςταςθ πλεοναςμοφ των gang ςε κατάςταςθ διαμοιραςμοφ των gang. ε μια δομι kernels, ορίηει ότι οι επαναλιψεισ του ςχετικοφ βρόχου ι βρόχων πρζπει να εκτελοφνται παράλλθλα ςε όλα τα gang που δθμιουργοφνται για κάκε kernel που περιζχεται μζςα ςτον βρόχο ι τουσ βρόχουσ. Αν ζνα όριςμα ζχει κακοριςτεί χωρίσ λζξθ-κλειδί ι παράμετρο μετά τθν λζξθ num, τότε προςδιορίηει πόςα gang κα χρθςιμοποιθκοφν για να εκτελεςτοφν οι επαναλιψεισ αυτοφ του βρόχου. 59
60 Δηλώςεισ τησ οδηγίασ loop (3/7) worker [( [num:] int-expr )] ε μια parallel δομι ορίηει ότι οι επαναλιψεισ του ςχετικοφ βρόχου ι βρόχων πρζπει να εκτελοφνται παράλλθλα με τθ διανομι των επαναλιψεων μεταξφ των πολλαπλϊν worker μζςα ςε ζνα ενιαίο gang. Μια δομι loop με μια διλωςθ worker αναγκάηει μια gang να μεταβεί από τθν κατάςταςθ απλισ λειτουργίασ ενόσ worker ςε κατάςταςθ διαμεριςμοφ του worker. ε αντίκεςθ με τθ διλωςθ gang, θ διλωςθ worker ενεργοποιεί πρϊτα τον παραλλθλιςμό ςτο επιπζδο worker και ςτθ ςυνζχεια διανζμει τισ επαναλιψεισ των βρόχων μεταξφ των workers. Δεν επιτρζπεται κανζνα όριςμα. Οι επαναλιψεισ βρόχου πρζπει να είναι ανεξάρτθτεσ από δεδομζνα, εκτόσ από τισ μεταβλθτζσ που κακορίηονται ςε διλωςθ reduction. ε μια δομι kernels ορίηει ότι οι επαναλιψεισ του ςυνδεδεμζνου βρόχου ι βρόχων πρζπει να εκτελοφνται παράλλθλα ςτουσ workers μζςα ςε ζνα gang που δθμιουργικθκε για κάκε kernel που περιζχεται μζςα ςτον βρόχο ι τουσ βρόχουσ. Αν υπάρχει ζνα όριςμα, κακορίηει τον αρικμό των worker ανά gang για να εκτελζςει τισ επαναλιψεισ αυτοφ του βρόχου. 60
61 Δηλώςεισ τησ οδηγίασ loop (4/7) vector [( [length:] int-expr )] ε μια δομι parallel κακορίηει ότι οι επαναλιψεισ του ςυνδεδεμζνου βρόχου ι βρόχων πρζπει να εκτελοφνται ςε διανυςματικι ι SIMD λειτουργία. Μια δομι loop με διλωςθ vector προκαλεί τθ μετάβαςθ ενόσ vector από κατάςταςθ απλισ λειτουργίασ ςε κατάςταςθ διαμεριςμοφ του vector. Παρόμοια με τθ διλωςθ worker, θ διλωςθ vector ενεργοποιεί πρϊτα τον παραλλθλιςμό ςε επιπζδο vector και ςτθ ςυνζχεια διανζμει τισ επαναλιψεισ βρόχου μεταξφ αυτϊν των γραμμϊν (lanes) του vector. Οι πράξεισ κα εκτελοφνται χρθςιμοποιϊντασ διανφςματα του κακοριςμζνου ι επιλεγμζνου μικουσ για τθν παράλλθλθ περιοχι. Η δομι loop με διλωςθ vector δεν μπορεί να περιζχει βρόχο με τθ διλωςθ gang, worker ι vector εκτόσ αν βρίςκεται μζςα ςε μια φωλιαςμζνθ παράλλθλθ περιοχι ι δομι parallel. ε μια δομι kernels, θ διλωςθ vector κακορίηει ότι οι επαναλιψεισ του ςυνδεδεμζνου βρόχου ι βρόχων πρζπει να εκτελοφνται με vector ι SIMD.επεξεργαςία. Αν κακορίηεται ζνα όριςμα, οι επαναλιψεισ κα υποςτοφν επεξεργαςία ςελουριδεσ διανφςματοσ αυτοφ του μικουσ, διαφορετικά θ υλοποίθςθ κα επιλζξει ζνα κατάλλθλο μικοσ διανφςματοσ (vector length). Όλεσ οι γραμμζσ vector κα ολοκλθρϊςουν τθν εκτζλεςθ των ανατεκειμζνων επαναλιψεϊν τουσ προτοφ αποχωριςει οποιαδιποτε γραμμι vector πζρα από το τζλοσ του βρόχου. 61
62 Δηλώςεισ τησ οδηγίασ loop (5/7) auto Ορίηει ότι θ υλοποίθςθ πρζπει να επιλζξει αν κα εφαρμόςει παραλλθλιςμό gang, worker ι vector ςε αυτόν τον βρόχο. Τπάρχει περίπτωςθ θ υλοποίθςθ να περιοριςτεί με τουσ τφπουσ παραλλθλιςμοφ που μπορεί να εφαρμόςει λόγω των οδθγιϊν loop με τισ δθλϊςεισ gang, worker ι vector για εξωτερικοφσ ι εςωτερικοφσ βρόχουσ. Αυτι θ διλωςθ δεν λζει από μόνθ τθσ ςτθν εφαρμογι ότι οι επαναλιψεισ του βρόχου είναι ανεξάρτθτεσ των δεδομζνων, με αποτζλεςμα θ υλοποίθςθ να μθν μπορεί να εφαρμόςει παραλλθλιςμό εκτόσ εάν ο βρόχοσ ζχει τθ διλωςθ auto. Eίναι ζμμεςα ανεξάρτθτθ είτε επειδι είναι ςε δομι parallel ι θ υλοποίθςθ μπορεί να αναλφςει τον βρόχο και να προςδιορίςει ότι οι επαναλιψεισ του βρόχου είναι ανεξάρτθτεσ των δεδομζνων. ε μια δομι kernels, μια οδθγία loop χωρίσ gang, worker, vector ι διλωςθ seq αντιμετωπίηεται ςαν να ζχει τθν διλωςθ auto. 62
63 Δηλώςεισ τησ οδηγίασ loop (6/7) reduction (operator: var-list) Κακορίηει ζναν τελεςτι μείωςθσ και μία ι περιςςότερεσ βακμωτζσ μεταβλθτζσ. Για κάκε μεταβλθτι μείωςθσ, δθμιουργείται ζνα ιδιωτικό αντίγραφο για κάκε νιμα που εκτελεί επαναλιψεισ του ςχετικοφ βρόχου ι βρόχων και αρχικοποιείται για αυτόν τον τελεςτι. το τζλοσ του βρόχου, οι τιμζσ για κάκε νιμα ςυνδυάηονται χρθςιμοποιϊντασ τον κακοριςμζνο τελεςτι μείωςθσ και το αποτζλεςμα αποκθκεφεται ςτθν αρχικι μεταβλθτι ςτο τζλοσ του μπλοκ κϊδικα parallel ι kernels. ε μια παράλλθλθ περιοχι, εάν θ διλωςθ reduction χρθςιμοποιείται ςε ζναν βρόχο με τισ δθλϊςεισ vector ι worker (και καμία διλωςθ gang) και θ βακμωτι μεταβλθτι εμφανίηεται επίςθσ ςε μια διλωςθ private ςτθ δομι parallel, θ αξία του ιδιωτικοφ αντιγράφου τθσ βακμωτισ κα ενθμερωκεί κατά τθν ζξοδο του βρόχου. Εάν θ βακμωτι μεταβλθτι δεν εμφανίηεται ςε μια διλωςθ private ςτθν δομι parallel ι εάν θ διλωςθ reduction χρθςιμοποιείται ςε βρόχο με τθ διλωςθ gang, θ τιμι τθσ δεν κα ενθμερωκεί μζχρι το τζλοσ τθσ δομισ parallel. 63
64 Δηλώςεισ τησ οδηγίασ loop (7/7) tile ( size-expr-list ), όπου size-expr-list χργςιμοποιείται ζνα από τα παρακάτω: *, int-expr Ορίηει ότι θ υλοποίθςθ κα πρζπει να διαιρεί κάκε βρόχο ςε δφο βρόχουσ, με ζνα εξωτερικό ςφνολο βρόχων πλακιδίων και ζνα εςωτερικό ςφνολο ςτοιχείων βρόχων. Σο όριςμα που λαμβάνει είναι ζνασ κατάλογοσ με ζνα ι περιςςότερα μεγζκθ πλακιδίων, όπου κάκε μζγεκοσ πλακιδίων είναι μια ςτακερι κετικι ακζραιθ ζκφραςθ ι ζνασ αςτερίςκοσ. Εάν υπάρχουν n μεγζκθ πλακιδίων ςτθ λίςτα, θ οδθγία loop πρζπει να ακολουκείται αμζςωσ από n φωλιαςμζνουσ βρόχουσ. Οι βρόχοι πλακιδίων κα αναδιαταχκοφν ϊςτε να είναι ζξω από όλουσ τουσ βρόχουσ ςτοιχείων και όλοι οι βρόχοι ςτοιχείων κα βρίςκονται μζςα ςτουσ βρόχουσ πλακιδίων. Εάν θ διλωςθ vector εμφανίηεται ςτθν οδθγία loop, θ διλωςθ vector εφαρμόηεται ςτουσ βρόχουσ ςτοιχείων (element loops). Εάν θ διλωςθ gang εμφανίηεται ςτθν οδθγία loop, εφαρμόηεται θ διλωςθ gang ςτουσ βρόχουσ πλακιδίων ( tile loops). Εάν θ διλωςθ worker εμφανίηεται ςτθν οδθγία loop, εφαρμόηεται θ διλωςθ worker ςτουσ βρόχουσ ςτοιχείου αν δεν υπάρχει διλωςθ vector και ςτουσ βρόχουσ πλακιδίων ςε διαφορετικι περίπτωςθ. 64
65 Άλλεσ οδηγίεσ cache construct host_data construct Δεδομζνα προςωρινισ μνιμθσ του λογιςμικοφ διαχειρίηονται τα δεδομζνα κρυφισ μνιμθσ CUDA (κοινι μνιμθ CUDA). Διακζτει ςτο host τθν διεφκυνςθ των δεδομζνων τθσ ςυςκευισ. wait directive Περιμζνει τθν ολοκλιρωςθ τθσ αςφγχρονθσ δραςτθριότθτασ τθσ GPU. declare directive Κακορίηει ότι τα δεδομζνα πρόκειται να κατανεμθκοφν ςτθν μνιμθ τθσ ςυςκευισ για τθ διάρκεια μιασ περιοχισ ζμμεςων δεδομζνων, που δθμιουργικθκε κατά τθν εκτζλεςθ ενόσ υποπρογράμματοσ. 65
66 Παραλλθλοποίθςθ βρόχων 66
67 Παραλληλοποίηςη βρόχων (1/3) Δεδομζνου ότι οι εφαρμογζσ ζχουν αναγνωριςτεί, οι προγραμματιςτζσ κα επιταχφνουν αυςτθρά αυτά τα ςθμεία με τθν προςκικθ directives του OpenACC ςτουσ ςθμαντικοφσ βρόχουσ μζςα ςε αυτζσ τισ ρουτίνεσ. Δεν υπάρχει λόγοσ να ςκεφτοφμε τθν μεταφορά δεδομζνων ςε αυτό το ςθμείο τθσ διαδικαςίασ, ο μεταγλωττιςτισ OpenACC κα αναλφςει τα δεδομζνα που χρειάηονται ςτθν αναγνωριςμζνθ περιοχι και κα διαςφαλίςει αυτόματα ότι τα δεδομζνα είναι διακζςιμα ςτον επιταχυντι. 67
68 Παραλληλοποίηςη βρόχων (2/3) Εςτιάηοντασ αποκλειςτικά ςτθν παραλλθλοποίθςθ κατά τθ διάρκεια αυτοφ του βιματοσ, ο προγραμματιςτισ μπορεί να μετακινιςει όςο το δυνατόν περιςςότερουσ υπολογιςμοφσ ςτθ ςυςκευι και να διαςφαλίςει ότι το πρόγραμμα εξακολουκεί να δίνει ςωςτά αποτελζςματα προτοφ βελτιςτοποιιςει τθν κίνθςθ των δεδομζνων ςτο επόμενο βιμα. Κατά τθ διάρκεια αυτοφ του βιματοσ τθσ διαδικαςίασ είναι ςφνθκεσ να αυξάνεται ο ςυνολικόσ χρόνοσ εκτζλεςθσ του κϊδικα, ακόμθ και αν θ εκτζλεςθ των επιμζρουσ βρόχων είναι ταχφτερθ με τθ χριςθ του επιταχυντι. 68
69 Παραλληλοποίηςη βρόχων (3/3) Αυτό οφείλεται ςτο γεγονόσ ότι ο μεταγλωττιςτισ πρζπει να προςεγγίςει προςεκτικά τθν κίνθςθ των δεδομζνων, ςυχνά αντιγράφοντασ περιςςότερα δεδομζνα προσ και από τον επιταχυντι από ότι είναι πραγματικά απαραίτθτο. Ακόμθ και αν ο ςυνολικόσ χρόνοσ εκτζλεςθσ αυξάνεται κατά τθ διάρκεια αυτοφ του βιματοσ, ο δθμιουργόσ του ζργου κα πρζπει να επικεντρωκεί ςτθν παραλλθλοποίθςθ ςτον κϊδικα πριν προχωριςει ςτο επόμενο βιμα και επωφελθκεί από τα directives. 69
70 Παραδείγματα τθσ δομισ των οδθγιϊν kernels, parallel και atomic 70
71 Η δομή τησ οδηγίασ kernels (1/2) Σο directive kernels αναγνωρίηει μια περιοχι κϊδικα που μπορεί να περιζχει παραλλθλοποίθςθ, αλλά ςτθρίηεται ςτισ αυτόματεσ δυνατότθτεσ παραλλθλοποίθςθσ του μεταγλωττιςτι για να αναλφςει τθν περιοχι, να προςδιορίςει ποιοι βρόχοι είναι αςφαλείσ για να παραλλθλοποιθκοφν και ςτθ ςυνζχεια να επιταχυνκοφν. Οι προγραμματιςτζσ κα είναι ςε κζςθ να δοκιμάςουν μια άλλθ εμπειρία προγραμματιςμοφ ι να εργάηονται ςε λειτουργίεσ που περιζχουν εμφωλευμζνουσ βρόχουσ που κα μποροφςαν να παραλλθλοποιθκοφν, αποτελεί μια καλι αρχι για τθν επιτάχυνςθ του OpenACC με τθ χριςθ του directive kernels. 71
72 Η δομή τησ οδηγίασ kernels (2/3) Ο παρακάτω κϊδικασ καταδεικνφει τθ χριςθ του ςε γλϊςςα προγραμματιςμοφ C: #pragma acc kernels { for (i=0; i<n; i++) { y[ i ] = 0.0f; x[ i ] = (float)(i+1); } for (i=0; i<n; i++) { y [ i ] = 2.0f * x[ i ] + y[ i ]; } } ε αυτό το παράδειγμα ο κϊδικασ αρχικοποιεί δφο πίνακεσ και ςτθ ςυνζχεια εκτελεί ζναν απλό υπολογιςμό με αυτοφσ. 72
73 Η δομή τησ οδηγίασ kernels (3/3) Ο μεταγλωττιςτισ κα αναλφςει αυτοφσ τουσ βρόχουσ για τθν ανεξαρτθςία των δεδομζνων και κα παραλλθλιςκεί και ςτουσ δφο βρόχουσ, δθμιουργϊντασ ζναν επιταχυντι kernel για κάκε loop. Ο μεταγλωττιςτισ ζχει πλιρθ ελευκερία να κακορίςει τον καλφτερο τρόπο να χαρτογραφιςει τθν παραλλθλoποίθςθ που διατίκεται ςε αυτοφσ τουσ βρόχουσ, πράγμα που ςθμαίνει ότι κα μπορζςουμε να χρθςιμοποιιςουμε τον ίδιο κϊδικα ανεξάρτθτα από τον επιταχυντι για τον οποίο καταςκευάηουμε. Ο μεταγλωττιςτισ κα χρθςιμοποιιςει τισ δικζσ του γνϊςεισ του επιταχυντι ςτόχου για να επιλζξει τθν καλφτερθ διαδρομι επιτάχυνςθσ. Εάν ο μεταγλωττιςτισ δεν είναι ςίγουροσ ότι ζνασ βρόχοσ είναι ανεξάρτθτοσ των δεδομζνων, ο βρόχοσ δεν κα παραλλθλοποιθκεί. 73
74 Η δομή τησ οδηγίασ parallel (1/4) Η δομι του parallel αναγνωρίηει μια περιοχι κϊδικα που κα παραλλθλοποιθκεί ςε όλα τα gangs του OpenACC. Από μόνθ τθσ μια παράλλθλθ περιοχι ζχει περιοριςμζνθ χριςθ, αλλά όταν ςυνδυάηεται με τθν οδθγία loop ο μεταγλωττιςτισ κα παράγει μια παράλλθλθ ζκδοςθ του βρόχου για τον επιταχυντι. Αυτά τα δφο directives μποροφν και πιο ςυχνά, να ςυνδυαςτοφν ςε μια οδθγία parallel loop. Με τθν τοποκζτθςθ αυτισ τθσ οδθγίασ ςε βρόχο, ο προγραμματιςτισ βεβαιϊνει ότι ο βρόχοσ που ζχει προκφψει είναι αςφαλισ για να παραλλθλοποιθκεί και επιτρζπει ςτον μεταγλωττιςτι να επιλζξει τον τρόπο προγραμματιςμοφ των επαναλιψεων του βρόχου ςτον επιταχυντι ςτόχου. 74
75 Η δομή τησ οδηγίασ parallel (2/4) Ο παρακάτω κϊδικασ καταδεικνφει τθ χριςθ του ςυνδυαςμοφ των directives parallel loop ςε C: #pragma acc parallel loop for (i=0; i<n; i++) { y[ i ] = 0.0f; x[ i ] = (float)(i+1); } #pragma acc parallel loop for (i=0; i<n; i++) { y[ i ]=2.0f * x[ i ] + y[ i ]; } 75
76 Η δομή τησ οδηγίασ parallel (3/4) Παρατθριςτε ότι, ςε αντίκεςθ με το directive kernels, κάκε βρόχοσ πρζπει να είναι ρθτά ςχεδιαςμζνοσ με directives τφπου parallel loop. Αυτό οφείλεται ςτο γεγονόσ ότι θ δομι parallel βαςίηεται ςτον προγραμματιςτι για να προςδιορίςει τθν παραλλθλοποίθςθ ςτον κϊδικα αντί ςτο μεταγλωττιςτι για να εκτελζςει τθ δικι του ανάλυςθ των βρόχων. τθν περίπτωςθ αυτι, ο προγραμματιςτισ αναγνωρίηει μόνο τθ διακεςιμότθτα τθσ παραλλθλοποίθςθσ, αλλά αφινει τθν απόφαςθ για το πϊσ να χαρτογραφιςει τθν παραλλθλοποίθςθ με τον επιταχυντι βαςιηόμενοσ ςτισ γνϊςεισ του μεταγλωττιςτι ςχετικά με τθ ςυςκευι. Αυτό είναι ζνα βαςικό χαρακτθριςτικό που διαφοροποιεί το OpenACC από άλλα, παρόμοια μοντζλα προγραμματιςμοφ. 76
77 Η δομή τησ οδηγίασ parallel (4/4) Ο προγραμματιςτισ αναγνωρίηει τθν παραλλθλοποίθςθ χωρίσ να υπαγορεφει ςτον μεταγλωττιςτι το πϊσ να τθν εκμεταλλευτεί. Αυτό ςθμαίνει ότι ο κϊδικασ OpenACC μπορεί να είναι φορθτόσ ςε ςυςκευζσ διαφορετικζσ από τθ ςυςκευι ςτθν οποία αναπτφςςεται ο κϊδικασ. Η δομι του directive loop δίνει ςτον μεταγλωττιςτι πρόςκετεσ πλθροφορίεσ για τον επόμενο βρόχο ςτον πθγαίο κϊδικα. To directive loop παρουςιάςτθκε παραπάνω ςε ςυνδυαςμό με το directive parallel, και είναι επίςθσ ζγκυρο με το directive kernels. 77
78 Η δομή τησ οδηγίασ atomic (1/4) #pragma acc atomic [ atomic-clause ] new-line expression-stmt ή #pragma acc atomic capture new-line structured-block Όπου atomic-clause είναι read, write, update ή capture. Η expression-stmt είναι μια διλωςθ ζκφραςθσ με μία από τισ ακόλουκεσ μορφζσ: Εάν atomic-clause είναι read, το οποίο εξαςφαλίηει ότι δφο επαναλιψεισ βρόχουδεν κα διαβάηονται ταυτόχρονα από τθν περιοχι: v = x; Αν θ atomic-clause είναι write, το οποίο κα διαςφαλίςει ότι δεν υπάρχουν δφο επαναλιψεισ με εγγραφι ςτθν περιοχι ταυτόχρονα: x = expr; 78
79 Η δομή τησ οδηγίασ atomic (2/4) Εάν θ atomic-clause είναι update (ςυνδυαςμόσ read και write που προαναφζρκθκαν ) ι δεν εμφανίηεται: x ++ x--; ++ x; --x; x binop = expr; x = x binop expr; x = expr binop x. Αν θ atomic-clause είναι capture, το οποίο πραγματοποιεί ότι και το update, αλλά αποκθκεφει τθν τιμι που υπολογίηεται ςε εκείνθ τθν περιοχι για να χρθςιμοποιθκεί ςτον κϊδικα που ακολουκεί. Εάν δεν δίνεται καϋμία διλωςθ τότε ςυμβαίνει ό,τι και ςτο update. ςυμβοφν. : v = x ++ v = x--; v = ++ x v = - x; v = x binop = expr; v = x = x binop expr; v = x = expr binopx 79
80 Η δομή τησ οδηγίασ atomic (3/4) Σο structured-block είναι ζνα δομθμενο μπλοκ με μία από τισ ακόλουκεσ μορφζσ: {v = x; x binop= expr;} {x binop= expr; v = x;} {v = x; x = x binop expr;} {v = x; x = expr binop x;} {x = x binop expr; v = x;} {x = expr binop x; v = x;} {v = x; x = expr;} {v = x; x++;} {v = x; ++x;} {++x; v = x;} {x++; v = x;} {v = x; x--;} {v = x; --x;} {--x; v = x;} {x--; v = x;} 80
81 Η δομή τησ οδηγίασ atomic (4/4) τισ προθγοφμενεσ εκφράςεισ: Σα x και v (ανάλογα με τθν περίπτωςθ) είναι και οι δφο εκφράςεισ τθσ τιμισ l με κλιμακωτό τφπο. Κατά τθν εκτζλεςθ μιασ atomic περιοχισ, πολλαπλζσ ςυντακτικζσ περιπτϊςεισ του x πρζπει να χαρακτθρίηουν τθν ίδια κζςθ αποκικευςθσ. Κανζνα από τα v και expr (κατά περίπτωςθ) δεν μπορεί να ζχει πρόςβαςθ ςτθ κζςθ αποκικευςθσ που ορίηεται από το x. Κανζνα από τουσ x και expr (κατά περίπτωςθ) μπορεί να ζχει πρόςβαςθ ςτθ κζςθ αποκικευςθσ που κακορίηεται από v. Σο expr είναι μια ζκφραςθ τφπου scalar. Σο binop είναι ζνα από τα +, *, -, /, &, ^,, << or >>. To binop, binop =, ++ και - δεν είναι υπερφορτωμζνοι τελεςτζσ. Η ζκφραςθ x binop expr πρζπει να είναι μακθματικά ιςοδφναμθ με το x binop (expr). Αυτι θ απαίτθςθ ικανοποιείται εάν οι χειριςτζσ ςε expr ζχουν προτεραιότθτα μεγαλφτερθ από το binop, ι χρθςιμοποιϊντασ παρενκζςεισ γφρω από expr ι υποεκφράςεισ του expr. Η ζκφραςθ expr binop x πρζπει να είναι μακθματικά ιςοδφναμθ με τθν (expr) binop x. Αυτι θ απαίτθςθ ικανοποιείται εάν οι τελεςτζσ ςτθν expr ζχουν προτεραιότθτα ίςθ ι μεγαλφτερθ από το binop ι χρθςιμοποιϊντασ παρενκζςεισ γφρω από expr ι υποεκφράςεισ του expr. Για μορφζσ που επιτρζπουν πολλαπλζσ εμφανίςεισ του x, ο αρικμόσ των επαναλιψεων x δεν είναι προςδιοριςμζνοσ. 81
82 Λειτουργίεσ τησ οδηγίασ atomic μέςα ςε κώδικα τησ parallel (1/3) Όταν μία ι περιςςότερεσ επαναλιψεισ βρόχου πρζπει να ζχουν πρόςβαςθ ςε ζνα ςτοιχείο ςτθ μνιμθ ταυτόχρονα, μπορεί να προκφψουν data races. Για παράδειγμα, εάν μια επανάλθψθ βρόχου τροποποιεί τθν τιμι που περιζχεται ςε μια μεταβλθτι και μια άλλθ προςπακεί να διαβάςει από τθν ίδια μεταβλθτι παράλλθλα, μπορεί να προκφψουν διαφορετικά αποτελζςματα ανάλογα με τθν επανάλθψθ που εμφανίηεται πρϊτθ. Σο directive atomic δζχεται ζνα από τα τζςςερα clauses για να δθλϊςει τον τφπο τθσ λειτουργίασ που περιζχεται ςτθν περιοχι. 82
83 Λειτουργίεσ τησ οδηγίασ atomic μέςα ςε κώδικα τησ parallel (2/3) Σο read εξαςφαλίηει ότι δεν κα διαβάηονται ταυτόχρονα από τθν περιοχι δφο επαναλιψεισ βρόχου. Σο write κα εξαςφαλίςει ότι δεν υπάρχουν δφο επαναλιψεισ με εγγραφι ςτθν περιοχι ταυτόχρονα. Σο update είναι μια ςυνδυαςμζνθ ανάγνωςθ και εγγραφι. Εάν δεν δίνεται καμία διλωςθ τότε κα πραγματοποιθκεί μια διαδικαςία τφπου update. Σο capture αναγκάηει μια ατομικι ενθμζρωςθ τθσ κζςθσ που υποδεικνφεται από το x χρθςιμοποιϊντασ τον οριςμζνο τελεςτι ενϊ ταυτόχρονα καταγράφει τθν αρχικι ι τθν τελικι τιμι τθσ κζςθσ που ορίηεται από το x ςε ςχζςθ με τθν ατομικι ενθμζρωςθ. 83
84 Παράδειγμα χρήςησ τησ οδηγίασ atomic Ζνα ιςτόγραμμα είναι μια ςυνθκιςμζνθ τεχνικι για τθν καταμζτρθςθ του πόςεσ φορζσ προκφπτουν οι τιμζσ από ζνα ςφνολο ειςόδων ανάλογα με τθν αξία τουσ. Σο ςχιμα παρακάτω δείχνει ζνα ιςτόγραμμα που μετράει τον αρικμό των φορϊν που οι αρικμοί εμπίπτουν ςε ςυγκεκριμζνα εφρθ. Ο παρακάτω κϊδικασ παραδείγματοσ βγαίνει μζςω μιασ ςειράσ ακζραιων αρικμϊν γνωςτοφ εφρουσ και μετρά τισ εμφανίςεισ κάκε αρικμοφ ςε αυτό το εφροσ. Δεδομζνου ότι κάκε αρικμόσ ςτθν περιοχι μπορεί να εμφανιςτεί πολλζσ φορζσ, πρζπει να διαςφαλίςουμε ότι κάκε ςτοιχείο του πίνακα του ιςτογράμματοσ κα ενθμερϊνεται ατομικά. 84
85 Παράδειγμα χρήςησ τησ οδηγίασ atomic (1/2) Ο παρακάτω κϊδικασ δείχνει τθ χριςθ του atomic directive για τθ δθμιουργία ενόσ ιςτογράμματοσ: for (int it=0; i<iters; it++){ #pragma acc parallel loop for (int i=0; i<hn; i++) { h[ i ]=0; } #pragma acc parallel loop for (int i=0; i<n; i++) { #pragma acc atomic update h[a[ i ]]+=1; } } Σο h μπορεί να ζχει πρόςβαςθ από ζνα μόνο νιμα τθ φορά 85
86 Παράδειγμα χρήςησ τησ οδηγίασ atomic (2/2) Παρατθριςτε ότι οι ενθμερϊςεισ του πίνακα h του ιςτογράμματοσ εκτελοφνται ατομικά. Επειδι αυξάνουμε τθν τιμι του ςτοιχείου πίνακα, χρθςιμοποιείται μια λειτουργία update για να διαβάςει τθν τιμι, να τθν τροποποιιςει και ςτθ ςυνζχεια να τθν γράψει πίςω. 86
87 Η χριςθ του OpenACC 87
88 Σο πρώτο πρόγραμμα ςε OpenACC: SAXPY Παράδειγμα: Τπολογίςτε a*x+y, όπου x και y είναι διανφςματα, και a είναι πραγματικόσ αρικμόσ. int main( int argc, char **argv){ int N=1000; float a=3.0f; float x[n], y[n]; for (int i=0; i<n; ++i){ x[ i ]=2.0f; y[ i ]=1.0f; } #pragma acc kernels for (int i=0; i<n; ++i){ y[ i ]= a* x[i + y[ i ]; } } 88
89 Pointer aliasing ςτη C (1) Μια ακατάλλθλθ εκδοχι του κϊδικα SAXPY ( με τθ χριςθ δεικτϊν) Διαφορετικοί δείκτεσ επιτρζπουν πρόςβαςθ ςτο ίδιο αντικείμενο. Αυτό ίςωσ προκαλζςει εξάρτθςθ των ζμμεςων δεδομζνων ςε ζνα βρόχο. ε αυτι τθ περίπτωςθ, είναι πικανό οι δείκτεσ x και y να επιτρζπουν τθ πρόςβαςθ ςτο ίδιο αντικείμενο. Ενδεχομζνωσ, να υπάρχει εξάρτθςθ δεδομζνων ςτο βρόχο. 89
90 Pointer aliasing ςτη C (2) Ο μεταγλωττιςτισ αρνείται να παραλλθλοποιιςει το βρόχο που περιζχει χριςθ δεικτϊν. Η ζξοδοσ του ακατάλλθλου κϊδικα SAXPY, μετά τθν αποςφαλμάτωςθ φαίνεται παρακάτω: 90
91 Χρήςη restrict για την αποφυγή του pointer aliasing Μια κατάλλθλθ εκδοχι του κϊδικα SAXPY (με τθ χριςθ δεικτϊν ): Για τθν αποφυγι του φαινομζνου pointer aliasing, γίνεται χριςθ του restrict. θμαςία του restrict: Για τθ διάρκεια ηωισ του δείκτθ ptr, μόνο ο ίδιοσ ι μια τιμι που προζρχεται από αυτόν (όπωσ ptr+1) κα χρθςιμοποιθκεί για τθν πρόςβαςθ του αντικειμζνου ςτο οποίο δείχνει. 91
92 Διαφορέσ μεταξύ των directives kernels και parallel 92
93 Ειδικά για το directive parallel (1) Μια ακατάλλθλθ εκδοχι του κϊδικα SAXPY (με τθ χριςθ τθσ οδθγίασ parallel) : Η οδθγία parallel υποδεικνφει ςτον μεταγλωττιςτι να δθμιουργιςει μια παράλλθλθ δομι. Διαφορετικά από τθ δομι kernels, ο κϊδικασ ςτο βρόχο parallel εκτελείται άςκοπα (από όλα τα gangs). Δεν υπάρχει λόγοσ θ εργαςία να μοιραςτεί ανάμεςα ςτα gangs. 93
94 Ειδικά για το directive parallel (2) Μια κατάλλθλθ εκδοχι του κϊδικα SAXPY (με τθ χριςθ τθσ οδθγίασ parallel loop): Είναι απαραίτθτο να προςτεκεί θ λζξθ-κλειδί loop για να μοιραςτεί θ εργαςία μεταξφ των gangs. τθν C, θ λζξθ κλειδί loop μπορεί να αντικαταςτακεί από το for. 94
95 Διαφορέσ μεταξύ των directives kernels και parallel (1) kernels Πιο ζμμεςο Δίνει ελευκερία ςτον μεταγλωττιςτι να βρεί τθν παραλλθλοποίθςθ Ο μεταγλωττιςτισ εφαρμόηει ανάλυςθ τθσ παραλλθλοποίθςθσ και παραλλθλοποιεί ο,τι κεωρεί αςφαλζσ parallel Πιο άμεςο Απαιτεί ανάλυςθ από τον προγραμματιςτι για να εξαςφαλίςει αςφαλι παραλλθλοποίθςθ Προερχόμενο από το OpenMP 95
96 Διαφορέσ μεταξύ των directives kernels και parallel (1) Παραλλθλοποίθςθ μπλοκ κϊδικα με δφο βρόχουσ: Kernels Parallel Δθμιουργία δφο πυρινων Τπάρχει ζνα ζμμεςο φράγμα (implicit barrier) μεταξφ των δφο βρόχων: το δεφτερο loop κα ξεκινιςει αφοφ τελειϊςει το πρϊτο. Δθμιουργία ενόσ πυρινα Δεν υπάρχει κανζνα εμπόδιο μεταξφ των δφο loops: το δεφτερο loop μπορεί να ξεκινιςει πριν τελειϊςει το πρϊτο. (Διαφορετικό από το OpenMP) 96
97 Οδηγία parallel vs. Οδηγία kernels (Ποια είναι η καλύτερη;) Αρχικά για να απλοποίθςουμε αυτό το ηιτθμα, οι kernels αφινουν τθ λιψθ αποφάςεων ςτο μεταγλωττιςτι, κάτι το οποίο δεν είναι απαραίτθτα κακό με τθν εμπιςτοςφνθ ςτο μεταγλωττιςτι ( καλό κα ιταν να επαλθκεφςετε ) κι αυτό ίςωσ είναι ζνα ςθμείο για να ςασ βοθκιςει να ξεκινιςετε. Αποκτϊντασ περιςςότερθ εμπειρία κα καταλάβετε ότι θ δομι parallel ςασ επιτρζπει μια πιο άμεςθ και ςαφι κατανόθςθ. Από τθν άλλθ πλευρά, κακϊσ οι μεταγλωττιςτζσ ωριμάηουν κα ζχουν τθ δυνατότθτα να κάνουν ακριβϊσ αυτό που πρζπει. 97
98 Παράδειγμα: Επίλυςθ Εξίςωςθσ Laplace ςτο BU Shared Computing Cluster (SCC) 98
99 Επίλυςη Laplace (1) Διδιάςτατθ εξίςωςθ Laplace Διακρίνουμε τθ Λαπλαςιανι με τθ διαφορικι μζκοδο πρϊτθσ τάξθσ και εκφράηουμε τθ λφςθ ωσ: Η λφςθ ςε ζνα ςθμείο εξαρτάται από τα τζςςερα ςθμεία των γειτονικϊν 99
100 Επίλυςη Laplace (2) Χριςθ του αλγορίκμου επανάληψησ Jacobi για να καταλιξουμε ςε ςυγκλίνουςα λφςθ: Αλγόρικμοσ επανάλθψθσ Jacobi 1. Δϊςτε μια δοκιμαςτικι λφςθ όπου το Α να εξαρτάται από τθν αρχικι κατάςταςθ που δίνεται 2. Τπολογίςτε μια νζα λφςθ, τθν A_new(i,j), βαςιςμζνθ ςε παλιζσ τιμζσ από τα τζςςερα γειτονικά ςθμεία 3. Ενθμερϊςτε τθ λφςθ δθλαδι, A=A_new, 4. Επαναλάβετε τα βιματα 2 και 3 μζχρι να ςυγκλίνουν, δθλαδι, max( A_new(i,j)-A(i,j) )<tolerance. 5. Σελικά θ ςυγκλίνουςα λφςθ αποκθκεφεται ςτο Α. 100
101 Επίλυςη εξίςωςησ Laplace (ςειριακά ςε C) Ζνασ βρόχοσ για τισ επαναλιψεισ Jacobi Βρόχοι για τον υπολογιςμό νζασ λφςθσ Βρόχοι για τθν ενθμζρωςθ τθσ λφςθσ και τθν εφρεςθ του μεγίςτου ςφάλματοσ 101
102 Επίλυςη εξίςωςησ Laplace ςτο OpenACC Προχποκζτοντασ ότι υπάρχει ζνασ ςειριακόσ κϊδικασ ( ςε C ) για τθν επίλυςθ τθσ διδιάςτατθσ εξίςωςθσ Laplace, παραλλθλίςτε τθ με τθ χριςθ οδθγιϊν του OpenACC. τθ ςυνζχεια ςυγκρίνετε τθν απόδοςθ μεταξφ του ςειριακοφ κϊδικα και του παραλλθλοποιθμζνου με OpenACC. Χριςιμεσ ςυμβουλζσ 1. Βρείτε τα hot spots, τα ςθμεία που απαιτοφν περιςςότερο χρόνο μζςα ςτον κϊδικα. 2. Αναλφςτε τθν παραλλθλοποίθςθ. Ποιοί βρόχοι μποροφν να παραλλθλοποιθκοφν; 3. Ποιεσ οδθγίεσ (directives) πρζπει να χρθςιμοποιθκοφν; Ποφ πρζπει να τοποκετθκοφν; 102
103 Επίλυςη εξίςωςησ Laplace ςτο OpenACC (1 η εκδοχή) Ο βρόχοσ δεν μπορεί να παραλλθλοποιθκεί λόγω τθσ ανεξαρτθςίασ των δεδομζνων Αυτοί οι βρόχοι ειίναι παραλλθλοποιιςιμοι. Δθμιουργεί μια περιοχι kernel και ρωτά τον μεταγλωττιςτι να κακορίςει τθν παραλλθλοποίθςθ και τθ μεταφορά δεδομζνων Αυτοί οι βρόχοι ειίναι παραλλθλοποιιςιμοι. Δθμιουργεί μια περιοχι kernel και ρωτά τον μεταγλωττιςτι να κακορίςει τθν παραλλθλοποίθςθ και τθ μεταφορά δεδομζνων 103
104 Ανάλυςη τησ εκτέλεςησ (1 ησ εκδοχήσ) υγκρίνοντασ τον χρόνο υπολογιςμοφ (1000*1000 grid): ειριακόσ κϊδικασ: seconds. Κϊδικασ OpenACC (1 θ εκδοχι): seconds. Ο κϊδικασ του OpenACC είναι πολφ πιο αργόσ από ότι ο ςειριακόσ. Σι πιγε λάκοσ; Πρζπει να αναλφςουμε περαιτζρω τθν παραλλθλοποίθςθ και τθ μεταφορά δεδομζνων. 104
105 Δυναμική ανάλυςη του προγράμματοσ (1 η εκδοχή) Ο μεταγλωττιςτισ PGI παρζχει αυτόματα όργανα όταν PGI_ACC_TIME = 1 κατά το χρόνο εκτζλεςθσ για να ενεργοποιθκεί το profiling και εκτελζςτε ξανά. Τπάρχει μεταφορά δεδομζνων 4 φορζσ μεταξφ του host (CPU) και τθσ μνιμθσ GPU ςε κάκε επανάλθψθ του εξωτερικοφ βρόχου while. Ο ςυνολικόσ χρόνοσ για τθ μεταφορά δεδομζνων είναι περίπου 23.6 seconds, που είναι μακράν μεγαλφτεροσ από τον εκτιμϊμενο χρόνο 2.5 seconds. 105
106 Ανάλυςη τησ μεταφοράσ δεδομένων (1 η εκδοχή) Αυτι θ μεταφορά δεδομζνων γίνεται ςε κάκε επανάλθψθ του εξωτερικοφ βρόχου while! Εςωτερικι αντιγραφι: Α και Α_new αντιγράφονται από τθ CPU ςτθ GPU Εξωτερικι αντιγραφι: Α και A_new αντιγράφονται από τθ GPU ςτθ CPU Εςωτερικι αντιγραφι: Α και Α_new αντιγράφονται από τθ CPU ςτθ GPU Εξψτερικι αντιγραφι: Α και A_new αντιγράφονται από τθ GPU ςτθ CPU 106
107 Επίλυςη εξίςωςησ Laplace ςτο OpenACC (2 η εκδοχή) Εδϊ δθμιουργείται μια περιοχι data. To A αντιγράφεται εςωτερικά πριν τθν ζναρξθ του βρόχου while και αντιγράφεται εξωτερικά μετά το τζλοσ του. Το Α_new εντοπίηεται απευκείασ ςτθν μνιμθ τθσ GPU και είναι περιττι θ αντιγραφι του ςτθν CPU Δθμιουργεί μία περιοχι kernel για να παραλλθλοποίθςει τουσ βρόχουσ for, αλλά δεν υπάρχει μεταφορά δεδομζνων Δθμιουργεί μία περιοχι kernel για να παραλλθλοποίθςει τουσ βρόχουσ for, αλλά δεν υπάρχει μεταφορά δεδομζνων 107
108 Δυναμική ανάλυςη του προγράμματοσ (2 η εκδοχή) Ο μεταγλωττιςτισ PGI παρζχει αυτόματα όργανα όταν PGI_ACC_TIME = 1 κατά το χρόνο εκτζλεςθσ για να ενεργοποιθκεί το profiling και εκτελζςτε ξανά. Τπάρχει κίνθςθ δεδομζνων (των πινάκων) μόνο 2 φορζσ ςυνολικά. Τπάρχει κίνθςθ δεδομζνων για τθ μεταβλθτι dt, αλλά επειδι δεν είναι πίνακασ γιαυτό και θ διαδικαςία μεταφοράσ χρειάηεται πολφ λιγότερο χρόνο. Ο ςυνολικόσ χρόνοσ για τθ μεταφορά δεδομζνων είναι περίπου 0.09 seconds, που είναι μικρότεροσ από τον εκτιμϊμενο χρόνο (περίπου 2.5 seconds). 108
109 Ανάλυςη τησ εκτέλεςησ (2 ησ εκδοχήσ) υγκρίνοντασ τον χρόνο υπολογιςμοφ ( για 1000*1000 grid): ειριακόσ κϊδικασ: seconds. Κϊδικασ OpenACC (1 θ εκδοχι): seconds. Κϊδικασ OpenACC (2 θ εκδοχι): seconds. Ο κϊδικασ του OpenACC (2 θ εκδοχι) είναι περίπου 6.8 φορζσ γρθγορότεροσ από το ςειριακό κωδικό! 109
110 Ανάλυςη τησ εκτέλεςησ (2 ησ εκδοχήσ) Σο speed-up κα ιταν μεγαλφτερο εάν το μζγεκοσ του προβλιματοσ αυξανόταν. Σο μζγιςτο μζγεκοσ τθσ μνιμθσ GPU (τυπικά 6GB ι 12 GB) είναι πολφ μικρότερο από τθν κανονικι CPU μνιμθ (δθλαδι 128 GB ςτο BU SCC). 110
111 Δημιουργία reduction kernel (1) Όπωσ μποροφμε να δοφμε από τθ δυναμικι ανάλυςθ του προγράμματοσ, δθμιουργείται ζνα reduction kernel από το μεταγλωττιςτι. Σι είναι το reduction kernel και γιατί είναι απαραίτθτο; το προθγοφμενο παράδειγμα, θ μεταβλθτι dt μπορεί να τροποποιθκεί από πολλαπλοφσ workers (warps) ταυτόχρονα. Αυτό ονομάηεται κατάςταςθ data race. Εάν ςυμβεί αυτό, κα επιςτραφεί λανκαςμζνο αποτζλεςμα. 111
112 Δημιουργία reduction kernel (2) Για τθν αποφυγι τθσ κατάςταςθσ data race, απαιτείται ζνα διλωςθ reduction για να προςτατευτεί θ ςχετικι μεταβλθτι. Ευτυχϊσ, ο compiler είναι αρκετά ζξυπνοσ για να δθμιουριςει ζνα reduction kernel και να αποφευχκεί το data race αυτόματα! 112
113 Επίλυςη εξίςωςησ Laplace ςτο OpenACC (3 η εκδοχή) Εδϊ δθμιουργείται μία δομι για τθν οδθγία data Δθμιουργεί μια περιοχι για τθν οδθγία parallel και παραλλθλοποιεί τουσ βρόχουσ for Δθμιουργεί μια περιοχι για τθν οδθγία parallel και παραλλθλοποιεί τουσ βρόχουσ for. Κακορίηει ρθτά τον τελεςτι και τθ μεταβλθτι μείωςθσ 113
114 Ανάλυςη τησ εκτέλεςησ (3 ησ εκδοχήσ) υγκρίνοντασ τον χρόνο υπολογιςμοφ ( για 1000*1000 grid): ειριακόσ κϊδικασ: seconds. Κϊδικασ OpenACC (1 θ εκδοχι): seconds. Κϊδικασ OpenACC(2 θ εκδοχι): seconds. Κϊδικασ OpenACC(3 θ εκδοχι): seconds Χρθςιμοποιϊντασ το directive parallel ο κϊδικασ είναι ελαφρϊσ γρθγορότεροσ από ότι χρθςιμοποιϊντασ το directive kernel ςε αυτι τθν περίπτωςθ, κυρίωσ λόγω τθσ μζτρθςθσ των εργαςιϊν ι του υπολογιςμοφ των εν λόγω εργαςιϊν task granularities. Είναι καλό να κακορίηονται άμεςα οι μεταβλθτζσ και τελεςτζσ τφπου reduction. 114
115 NVIDIA GPU (CUDA) Task Granularity (1/2) υςκευι GPU - Πλζγματα CUDA: Σα πλζγματα αντιςτοιχίηονται ςε μια ςυςκευι. Πολυεπεξεργαςτζσ ροισ (Streaming Multiprocessor-SM) block νθμάτων CUDA : Σα block εκχωροφνται ζναν πολεπεξεργαςτι ροισ. CUDA πυρινεσ CUDA νιματα: Σα νιματα εκχωροφνται ςε ζναν πυρινα. Warp: μια μονάδα που αποτελείται από 32 νιματα. Σα μπλοκ χωρίηονται ςε warps. Ο πολυεπεξεργαςτισ ροισ εκτελεί τα νιματα ςε warp κοκκιότθτα. Σο μζγεκοσ του warp μπορεί να αλλάξει ςτο μζλλον. 115
116 NVIDIA GPU (CUDA) Task Granularity (2/2) Kepler GK110 full chip block diagram 116
117 Μεταγλώττιςη OpenACC με τον BU SCC Μεταγλϊττιςθ ενόσ OpenACC πθγαίου κϊδικα: % pgcc -acc Minfo=accel name.c o exename % pgf90 -acc Minfo=accel name.f90 o exename θμείωςθ: θ επιλογι Minfo=accel χρθςιμοποιείται για να εκτυπϊνει πλθροφορίεσ ςχετικά με το ςτόχο τθσ περιοχισ του επιταχυντι. 117
118 Μεταγλώττιςη OpenACC με -fopenacc τον GCC Ενεργοποιεί το OpenACC ςτον μεταγλωττιςτι, ενεργοποιεί τισ οδθγίεσ ςτον κϊδικα και παρζχει το ςφμβολο προεπεξεργαςτι _OPENACC. -foffload-force Κακορίηει τθ μετακίνθςθ ςτόχων και επιλογϊν για αυτοφσ. Η πιο ςυνθκιςμζνθ μορφι χριςθσ για αυτι τθν επιλογι κα είναι πικανότατα να ςυνδεκεί ςτθ βιβλιοκικθ μακθματικϊν ςτο ςτόχο επιταχυντι, δθλαδι -foffload= -lm. -fopt-info-note-omp Αυτι θ ςθμαία κακοδθγεί τον μεταγλωττιςτι να εκτυπϊςει τυχόν παραλλθλιςμοφσ που ανίχνευςε. -fopenacc-dim=geom Χριςθ τθσ διαμόρφωςθσ geom για τα νιματα. 118
119 Εύρεςη παραλληλοποίηςησ μέςα ςτον κώδικα ςασ Είναι καλφτερα για τθν παραλλθλοποίθςθ, να είναι φωλιαςμζνθ ςτουσ βρόχουσ. Οι επαναλιψεισ των βρόχων πρζπει να είναι ανεξάρτθτεσ θ μία από τθν άλλθ. Ο μεταγλωττιςτισ κα πρζπει να μπορεί να υπολογίςει το μεγζκοσ των περιοχϊν δομζνων Μπορεί να χρθςιμοποίθςει τισ οδθγίεσ για να ελζγξει άμεςα το μεγζκοσ. 119
120 Εύρεςη παραλληλοποίηςησ μέςα ςτον κώδικα ςασ Εάν είναι δυνατόν, θ αρικμθτικι δεικτϊν καλό κα είναι να αποφεφγεται. Οι κλιςεισ των ςυναρτιςεων μζςα ςτθν περιοχι επιτάχυνςθσ πρζπει να είναι ευδιάκριτεσ. 120
121 Βελτιςτοποίηςη κίνηςησ δεδομένων Οι μεταγλωττιςτζσ κα είναι προςεκτικοί με τθν κίνθςθ των δεδομζνων και ενδζχεται να μεταφζρουν περιςςότερα δεδομζνα που είναι απαραίτθτα. Εάν είναι αριςτερά από το '=', πικανότατα κα αντιγραφεί από τθ ςυςκευι. Εάν είναι δεξιά από το '=', πικανόν να αντιγραφεί ςτθ ςυςκευι. Ο Profiler CUDA μπορεί να χρθςιμοποιθκεί για τθ μζτρθςθ τθσ κίνθςθσ των δεδομζνων. Ο Cray Compiler διακζτει επίςθσ τθ μεταβλθτι περιβάλλοντοσ εκτζλεςθσ CRAY_ACC_DEBUG, θ οποία κα εκτυπϊςει χριςιμεσ πλθροφορίεσ. Για λεπτομζρειεσ δείτε man intro_openacc. 121
122 Βελτιςτοποίηςη κίνηςησ δεδομένων Βήμα 1 ο, τοποκετιςτε τον κϊδικα τθσ οδθγίασ data ςτον βρόχο προςομοίωςθσ Χρθςιμοποιιςτε αυτό το για να δθλϊςετε τα δεδομζνα που πρζπει να γίνουν copy in, copy out ι δθμιουργία μζςα ςτθ ςυςκευι. Χρθςιμοποιιςτε το παρόν clause για να δθλϊςετε τα μζρθ όπου ο μεταγλωττιςτισ μπορεί να μθν ςυνειδθτοποιιςει ότι τα δεδομζνα υπάρχουν ιδθ ςτθ ςυςκευι (για παράδειγμα ςτισ κλιςεισ ςυναρτιςεων) Βήμα 2 ο, χρθςιμοποιιςτε ζνα directive update για να αντιγράψετε δεδομζνα μεταξφ τθσ GPU και τθσ CPU εντόσ τθσ περιοχισ data, όπωσ απαιτείται. 122
123 Βελτιςτοποίηςη kernels Ο μεταγλωττιςτισ ζχει τθν ελευκερία να προγραμματίηει loops και kernels όπωσ κεωρεί ο ίδιοσ καλφτερα, αλλά ο προγραμματιςτισ μπορεί να το παραλείψει αυτό. Αρχικά πρζπει να γνωςτοποιθκεί πωσ θ εργαςία αποςυνκζκθκε. Feedback από τον μεταγλωττιςτι κατά το χρόνο καταςκευισ Feedback από το εκτελζςιμο κατά το χρόνο εκτζλεςθσ Cuda Profiler 123
124 Προςαρμόζοντασ την αποςύνθεςη Ρυκμίςτε τον αρικμό των gangs, των workers ι και το μικοσ του vector ςτθν περιοχι του parallel ι ςτθν περιοχι του kernels num_gangs, num_workers, vector_length Προςκζςτε το directive loop ςε μεμονωμζνουσ βρόχουσ δθλϊνοντασ τουσ ωσ gang, worker ι παραλλθλοποίθςθ του vector. 124
125 Περαιτέρω βελτιςτοποίηςη kernels Χρθςιμοποιείςτε το loop collapse() για να ςυγνωνεφςετε τουσ βρόχουσ και να αυξιςετε τθν παραλλθλοποίθςθ ςε ςυγκεκριμζνα επίπεδα Χρθςιμοποιιςτε τισ υπάρχοντα directive του μεταγλωττιςτι ςχετικά με τισ βελτιςτοποιιςεισ του βρόχου Αποδζςμευςθ του βρόχου Ζνωςθ/ διάςπαςθ βρόχου Αποκλειςμόσ βρόχου Εξαςφαλίςτε κατάλλθλα πρότυπα πρόςβαςθσ δεδομζνων Η ςυγχϊνευςθ μνιμθσ, οι ςυγκροφςεισ των banks τθσ μνιμθσ και ο κλονιςμόσ είναι εξίςου ςθμαντικά με το OpenACC όπωσ το CUDA / OpenCL Αυτό επίςθσ πικανόν να βοθκιςει όταν χρθςιμοποιείτε τθν CPU. 125
126 Διαλειτουργικότητα Σο OpenACC λειτουργεί ορκά και ςε άλλεσ πλατφόρμεσ, CUDA C, CUDA Fortran, Βιβλιοκικεσ Προςκζτοντασ το OpenACC ςε ζναν υπάρχοντα κϊδικα CUDA, το data clause deviceptr επιτρζπει τθ χριςθ των υπάρχοντων δομϊν δεδομζνων. Προςκζτοντασ το CUDA ι τθ κλιςθ βιβλιοκικθσ ςε ζναν κϊδικα OpenACC, χρθςιμοποιιςτε host_data και use_device για να δθλϊςετε τθ χριςθ μνιμθσ ςτθ CPU ι ςτθ GPU. 126
127 υμβουλέσ διαλειτουργικότητασ Σο OpenACC παρζχει ζναν πολφ απλό τρόπο διαχείριςθσ των δομϊν δεδομζνων χωρίσ να χρειάηεςτε 2 δείκτεσ (host & device), γι 'αυτό χρθςιμοποιιςτε το ςτο υψθλότερο επίπεδο. Σο CUDA παρζχει close-to-the-metal ζλεγχο, ϊςτε να μπορεί να χρθςιμοποιθκεί για πυρινεσ πολφ υψθλισ πυκνότθτασ που μποροφν να καλοφνται από το OpenACC Οι μεταγλωττιςτζσ κάνουν πολφπλοκεσ εργαςίεσ όπωσ μειϊςεισ. 127
128 Επιτάχυνςθ με ενοποιθμζνθ μνιμθ 128
129 Η ενοποιημένη μνήμη βελτιώνει την παραγωγικότητα Προβολι προγραμματιςτι πριν Προβολι με ενοποιθμζνθ μνιμθ Μνιμθ Συςτιματοσ Μνιμθ τθσ GPU Ενοποιθμζνθ Μνιμθ 129
130 Σο OpenACC και η ενοποιημένη μνήμη Σα πλεονεκτήματα Δεν χρειάηεται καμία διλωςθ τθσ οδθγίασ data Δεν χρειάηεται θ πλιρθσ κατανόθςθ τθσ ροισ των εφαρμογϊν των δεδομζνων και τθσ λογικισ κατανομισ Είναι δυνατι θ ςταδιακι επιτάχυνςθ του κακοδθγοφμενου profiler Προοπτικι προγραμματιςμοφ τθσ GPU ςε Pascal 130
131 Ποιά η διαφορά μεταξύ OpenMP και OpenACC Σο OpenMP είναι θ κυρίαρχθ μζκοδοσ για τον προγραμματιςμό ςυςτθμάτων πολλαπλϊν πυρινων και πολλαπλϊν επεξεργαςτϊν κοινόχρθςτθσ μνιμθσ ςτον τομζα τθσ τεχνικισ πλθροφορικισ. Ο ςτόχοσ του είναι ομοιογενείσ πυρινεσ με ομοιόμορφθ κοινόχρθςτθ μνιμθ κάτι που το χειρίηεται αρκετά καλά. Σο OpenACC ζχει μοντελοποιθκεί παρόμοια με το OpenMP, αν και υπάρχουν ςθμαντικζσ διαφορζσ μεταξφ των ςτόχων. Σο OpenACC ςτοχεφει ςε ζνα ςφςτθμα υποδοχισ και επιταχυντι, όπου ο επιταχυντισ μπορεί να ζχει τθ δικι του μνιμθ ςυςκευισ. Επομζνωσ, το OpenACC πρζπει να διαχειρίηεται τθν κίνθςθ δεδομζνων κακϊσ και τον παραλλθλοποίθςθ. Επιπλζον, οι ςτόχοι του OpenACC ζχουν ςυνικωσ πολλαπλά επίπεδα παραλλθλοποίθςθσ και το πρόγραμμα πρζπει να το διαχειριςτεί και αυτό. 131
132 Διαφορέσ μεταξύ OpenMP και OpenACC 132
133 Ποια η διαφορά μεταξύ του OpenACC, OpenMP και OpenMPI; Σο MPI είναι το πρότυπο τεχνικισ πλθροφορικισ για τθν καταςκευι προγραμμάτων ςε μια ςυςτοιχία (cluster) ι ςε ζνα δίκτυο υπερυπολογιςτϊν από κόμβουσ. Σα προγράμματα είτε χρθςιμοποιοφν άμεςα το MPI είτε, ςε πολλζσ περιπτϊςεισ, χρθςιμοποιοφν μια πλατφόρμα εφαρμογϊν που αλλθλεπιδρά με το MPI, ανακουφίηοντασ τον προγραμματιςτι από τισ λεπτομζρειεσ των κλιςεων MPI. Σο μοντζλο MPI είναι πολλά αντίγραφα του ίδιου προγράμματοσ που εκτελοφνται παράλλθλα ςε μια ςυςτοιχία ι ςε ζναν υπερυπολογιςτι, αλλθλεπιδρϊντασ και ςυνεργάηοντασ για ζνα μόνο πρόβλθμα. Η γλϊςςα προγραμματιςμοφ δεν γνωρίηει τίποτα για τον παραλλθλιςμό, ωςτόςο, ο παραλλθλιςμόσ MPI είναι κρυμμζνοσ ςε κλιςεισ βιβλιοκικθσ. Σο OpenMP είναι το πρότυπο τεχνικισ πλθροφορικισ για τθν καταςκευι προγραμμάτων πολλαπλϊν πυρινων ι πολλαπλϊν επεξεργαςτϊν κοινόχρθςτθσ μνιμθσ, όπωσ προαναφζραμε. Πολλά προγράμματα χρθςιμοποιοφν MPI + OpenMP, με MPI μεταξφ κόμβων τθσ ςυςτποχίασ και OpenMP ςε κάκε κόμβο πολλαπλϊν πυρινων κοινόχρθςτθσ μνιμθσ. Σο OpenMP υλοποιείται με οδθγίεσ και μερικζσ ρουτίνεσ τθσ βιβλιοκικθσ API και διατίκεται ευρζωσ από ουςιαςτικά κάκε προμθκευτι ςτον τεχνικό υπολογιςτικό χϊρο. Σο OpenACC ςτοχεφει ςε ζνα ςφςτθμα υποδοχισ και επιταχυντι, όπου ο επιταχυντισ μπορεί να ζχει τθ δικι του μνιμθ ςυςκευισ, όπωσ αναφζρκθκε παραπάνω. 133
134 Ποιά η διαφορά μεταξύ OpenCL και OpenACC; Tο OpenCL ( Open Computing Language ) είναι ζνα πλαίςιο για τθν εγγραφι προγραμμάτων που εκτελοφνται ςε ετερογενείσ πλατφόρμεσ αποτελοφμενεσ από κεντρικζσ μονάδεσ επεξεργαςίασ (CPU), μονάδεσ επεξεργαςίασ γραφικϊν (GPU), επεξεργαςτζσ ψθφιακοφ ςιματοσ (DSPs), πίνακεσ ςτο πεδίο-προγραμματιςμοφ πφλθσ (FPGAs) και άλλουσ επεξεργαςτζσ ι επιταχυντζσ υλικοφ. Η γλϊςςα προγραμματιςμοφ που χρθςιμοποιείται για τθν εγγραφι πυρινων υπολογιςτϊν ονομάηεται OpenCL C και βαςίηεται ςτο C99, κάτι που δεν υπάρχει ςτο OpenACC. Οι μεγαλφτερεσ διαφορζσ απόδοςθσ εμφανίηονται όταν εςείσ, ο ζξυπνοσ προγραμματιςτισ ςτο CUDA ι OpenCL, εκμεταλλευτείτε τισ πλθροφορίεσ που γνωρίηετε, αλλά ότι ο μεταγλωττιςτισ δεν μπορεί ςτθν περίπτωςθ χριςθσ OpenACC. το OpenACC με ελάχιςτεσ πρόςκετεσ γραμμζσ κϊδικα μποροφμε να εκμεταλλευτοφμε τισ τεράςτιεσ δυνατότθτεσ των καρτϊν γραφικϊν. ε αντίκεςθ με άλλα παράλλθλα προγραμματιςτικά μοντζλα, όπωσ θ CUDA και OpenCL, που απαιτείται πιο χρονοβόρα θ διαδικαςία ςυγγραφισ των πολλϊν γραμμϊν κϊδικα. 134
135 Βιβλιοκικεσ χρόνου εκτζλεςθσ 135
136 Καθοριςμόσ του χρόνου εκτέλεςησ βιβλιοθηκών τθ C και C++, περιγράφονται τα πρωτότυπα για τισ ρουτίνεσ τθσ βιβλιοκικθσ εκτζλεςθσ που παρζχονται ςε ζνα αρχείο κεφαλίδασ με το όνομα openacc.h. Όλεσ οι ρουτίνεσ βιβλιοκικθσ είναι εξωτερικζσ λειτουργίεσ με ςφνδεςθ "C". Αυτό το αρχείο ορίηει: Σα πρωτότυπα όλων των ρουτινϊν. Οποιουςδιποτε τφπουσ δεδομζνων χρθςιμοποιοφνται ςε αυτά τα πρωτότυπα, ςυμπεριλαμβανομζνου ενόσ τφπου απαρίκμθςθσ για τθν περιγραφι τφπων επιταχυντϊν. Οι τιμζσ των acc_async_noval και acc_async_sync. Πολλζσ από τισ ρουτίνεσ δζχονται ι επιςτρζφουν μια τιμι που αντιςτοιχεί ςτον τφπο τθσ ςυςκευισ επιταχυντι. τε C και C++, ο τφποσ δεδομζνων που χρθςιμοποιείται για τισ τιμζσ τφπου ςυςκευισ είναι acc_device_t. 136
137 Ρουτίνεσ εκτέλεςησ βιβλιοθηκών Fortran use openacc or #include "openacc_lib.h" acc_get_num_devices acc_set_device_type acc_get_device_type acc_set_device_num acc_get_device_num acc_async_test acc_async_test_all C #include "openacc.h" acc_async_wait acc_async_wait_all acc_shutdown acc_on_device acc_malloc acc_free acc_init 137
138 Ρουτίνεσ του χρόνου εκτέλεςησ βιβλιοθηκών Για τθ C και C ++, οι δείκτεσ δθλϊνονται h_void * ι d_void * για τον προςδιοριςμό μιασ διεφκυνςθσ κεντρικοφ υπολογιςτι ι μιασ διεφκυνςθσ ςυςκευισ, και να ςυμπεριλαμβάνονται οι ακόλουκοι οριςμοί: #define h_void void #define d_void void Εκτόσ του acc_on_device, αυτζσ οι ρουτίνεσ είναι διακζςιμεσ για τον υπολογιςτι υποδοχισ. Κάποιεσ από αυτζσ τισ ρουτίνεσ εκτζλεςθσ χρόνου βιβλιοκθκισ παρουςιάηονται αναλυτικά παρακάτω: 138
139 Ρουτίνεσ εκτέλεςησ χρόνου acc_get_num_devices βιβλιοθηκών (1/6) Επιςτρζφει τον αρικμό των ςυςκευϊν του ςυγκεκριμζνου τφπου που είναι ςυνδεδεμζνεσ με τον κεντρικό υπολογιςτι. Σο όριςμα αναφζρει το είδοσ τθσ ςυςκευισ που πρζπει να μετριςει. Σφνταξθ (C ι C++): int acc_get_num_devices( acc_device_t ); Περιοριμοί: Αυτι θ ρουτίνα μπορεί να μθν καλείται ςε block κϊδικα parallel ι kernels. 139
140 Ρουτίνεσ εκτέλεςησ χρόνου βιβλιοθηκών (2/6) acc_wait Περιμζνει για τθν ολοκλιρωςθ όλων των ςυναφϊν αςφγχρονων λειτουργιϊν. Σφνταξθ (C ι C ++): void acc_wait (int); Σο όριςμα πρζπει να είναι ζνα όριςμα async όπωσ ζχει προειπωκεί ςτθ διλωςθ async. Εάν θ τιμι αυτι εμφανίςτθκε ςε μία ι περιςςότερεσ δθλϊςεισ αςφγχρονθσ ςφνδεςθσ, θ ρουτίνα acc_wait δεν κα επιςτρζψει μζχρι να ολοκλθρωκεί θ τελευταία τζτοια αςφγχρονθ λειτουργία. Εάν δφο ι περιςςότερα νιματα μοιράηονται τον ίδιο επιταχυντι, θ ρουτίνα acc_wait κα επιςτρζψει μόνο αν ζχουν ολοκλθρωκεί όλεσ οι αςφγχρονεσ επεμβάςεισ που ζχουν ξεκινιςει από αυτό το νιμα. Δεν υπάρχει εγγφθςθ ότι όλεσ οι αςφγχρονεσ λειτουργίεσ αντιςτοίχιςθσ που ξεκινοφν από άλλα κζματα ζχουν ολοκλθρωκεί. Για ςυμβατότθτα με τθν ζκδοςθ 1.0, αυτι θ ρουτίνα μπορεί επίςθσ να γραφτεί acc_async_wait. 140
141 Ρουτίνεσ εκτέλεςησ χρόνου βιβλιοθηκών (3/6) acc_init Αναφζρει το χρόνο εκτζλεςθσ για τθν αρχικοποίθςθ του χρόνου εκτζλεςθσ για αυτόν τον τφπο ςυςκευισ. Αυτό μπορεί να χρθςιμοποιθκεί για τθν απομόνωςθ οποιουδιποτε κόςτουσ αρχικοποίθςθσ από το υπολογιςτικό κόςτοσ, κατά τθ ςυλλογι ςτατιςτικϊν απόδοςθσ. Η ςυνάρτθςθ acc_init επίςθσ καλεί ζμμεςα. τθν acc_set_device_type Σφνταξθ (C ι C ++): void acc_init (acc_device_t); Περιοριςμοί Αυτι θ ρουτίνα μπορεί να μθν καλείται ςε block κϊδικα parallel ι kernels. Εάν ο ςυγκεκριμζνοσ τφποσ ςυςκευισ δεν είναι διακζςιμοσ, θ ςυμπεριφορά ορίηεται από τθν εφαρμογι. Ειδικότερα, το πρόγραμμα μπορεί να τερματιςτεί. Εάν θ ρουτίνα καλείται περιςςότερεσ από μία φορζσ χωρίσ παρεμβαλλόμενθ κλιςθ acc_shutdown, με διαφορετικι τιμι για το όριςμα τφπου ςυςκευισ, θ ςυμπεριφορά κακορίηεται από τθν εφαρμογι. Εάν οριςμζνα block κϊδικα του επιταχυντι ζχουν ςυνταχκεί για να χρθςιμοποιοφν μόνο ζναν τφπο ςυςκευισ, θ κλιςθ αυτισ τθσ ρουτίνασ με διαφορετικό τφπο ςυςκευισ μπορεί να προκαλζςει απροςδιόριςτθ ςυμπεριφορά. 141
142 Ρουτίνεσ εκτέλεςησ χρόνου βιβλιοθηκών (4/6) acc_shutdown Αναφζρει το χρόνο εκτζλεςθσ για να τερματίςει τθ ςφνδεςθ με τθ δεδομζνθ ςυςκευι επιτάχυνςθσ και να ελευκερϊςει τουσ πόρουσ του χρόνου εκτζλεςθσ. Σφνταξθ (C ι C ++): void acc_shutdown (acc_device_t); Η ρουτίνα acc_shutdown αποςυνδζει το πρόγραμμα από τθ ςυςκευι επιτάχυνςθσ. Περιοριςμοί Αυτι θ ρουτίνα μπορεί να μθν καλείται κατά τθν εκτζλεςθ block κϊδικα του επιταχυντι. 142
143 Ρουτίνεσ εκτέλεςησ χρόνου βιβλιοθηκών (5/6) acc_malloc Εκχωρεί μνιμθ ςτθ ςυςκευι επιτάχυνςθσ. Σφνταξθ (C ι C ++): d_void * acc_malloc (size_t); Η ρουτίνα acc_malloc μπορεί να χρθςιμοποιθκεί για τθν εκχϊρθςθ μνιμθσ ςτθ ςυςκευι επιτάχυνςθσ. Οι δείκτεσ που εκχωροφνται από αυτι τθ ςυνάρτθςθ μποροφν να χρθςιμοποιθκοφν ςτισ δθλϊςεισ deviceptr για να ενθμερϊςουν τον μεταγλωττιςτι ότι ςτόχοσ του δείκτθ είναι να παραμείνει ςτον επιταχυντι. 143
144 Ρουτίνεσ εκτέλεςησ χρόνου βιβλιοθηκών (6/6) acc_free Απελευκερϊνει τθ μνιμθ ςτθ ςυςκευι επιτάχυνςθσ. Σφνταξθ (C ι C ++): void acc_free (d_void *); Η ρουτίνα acc_free κα ελευκερϊςει τθ μνιμθ που είχε προθγουμζνωσ διατεκεί ςτθ ςυςκευι επιταχυντι. Tο όριςμα κα πρζπει να είναι μια τιμι δείκτθ που επιςτράφθκε από μια κλιςθ τθσ acc_malloc 144
145 Προχωρθμζνθ Δυναμικι ανάλυςθ του κϊδικα του OpenACC- με χριςθ του εργαλείου PGPROF 145
146 Σι είναι το εργαλείο PGPROF; (1/2) Σο PGPROF είναι ζνα εργαλείο προχωρθμζνθσ ανάλυςθσ κϊδικα που διανζμεται με τθν ακολουκία εργαςίασ του PGI Workstation. Μπορεί να χρθςιμοποιθκεί για τθν ανάλυςθ τθσ απόδοςθσ των προγραμμάτων και υποςτθρίηει τα προγράμματα ςε OpenMPI και MPI. Πρόκειται για ζνα εργαλείο που αναλφει τα δεδομζνα που δθμιουργοφνται κατά τθν εκτζλεςθ του κϊδικα ςε Fortran, C και C ++ που ζχει μεταγλωττιςτεί με επιλογζσ για προχωρθμζνθ ανάλυςθ. 146
147 Σι είναι το εργαλείο PGPROF; (1/2) Εμφανίηει πλθροφορίεσ ςχετικά με τισ εκτελζςιμεσ ρουτίνεσ και γραμμζσ, πόςο ςυχνά εκτελζςτθκαν και πόςο χρόνο κατανάλωςαν από το ςυνολικό χρόνο. Οι κϊδικεσ κα πρζπει να μεταγλωττίηονται με όλεσ τισ ςθμαίεσ βελτιςτοποίθςθσ που κζλετε να χρθςιμοποιιςετε, εκτόσ από τισ ειδικζσ επιλογζσ προχωρθμζνθσ ανάλυςθσ. Είναι ςυμβατό με ςφςτθμα 64-bit Linux. Συνικεισ χρθςιμοποιοφμενεσ επιλογζσ για προχωρθμζνθ ανάλυςθ: -Mprof = func Παράγει ζνα αρχείο pgprof.out με δεδομζνα ςχεδίαςθσ επιπζδου λειτουργίασ. -Mprof = lines Παράγει ζνα αρχείο pgprof.out με δεδομζνα γραμμισ. -Mprof = time Παράγει ζνα αρχείο pgprof.out με ςτατιςτικι δειγματολθψία βαςιςμζνθ ςε χρόνο. -pg Παράγει ζνα αρχείο gmon.out με δεδομζνα ρουτίνασ, γραμμισ και οδθγίεσ. 147
148 PGPROF: OpenACC CPU και GPU Profiler Για τα ςυςτιματα πολλαπλϊν επεξεργαςτϊν 64 bit με ι χωρίσ επιταχυντζσ: Τποςτθρίηει OpenMP profiling ςε επίπεδο νιματοσ. Τποςτθρίηει profiling για OpenACC και CUDA Fortran κωδίκων ςε επιταχυντζσ GPU τθσ NVIDIA με υποςτιριξθ CUDA. 148
149 PGPROF: OpenACC CPU και GPU Profiler Διεπαφζσ χριςτθ γραφικϊν και γραμμισ εντολϊν. Επίπεδο λειτουργίασ (ρουτίνα) και profiling ανά επίπεδο γραμμισ του πθγαίου κϊδικα. Πλιρωσ ενςωματωμζνεσ εγκαταςτάςεισ βοικειασ. 149
150 Λειτουργία του PGPROF Τπάρχουν δφο τρόποι δθμιουργίασ προχωρθμζνθσ δυναμικισ ανάλυςθσ: Σε γραμμή εντολϊν και Γραφική αναπαράςταςη δυναμικήσ ανάλυςησ. Μπορείτε να ειςάγετε τθ λειτουργία γραμμισ εντολϊν ανοίγοντασ ζνα κζλυφοσ και ειςάγοντασ τισ εντολζσ που ακολουκοφν παρακάτω. Μπορείτε να ειςάγετε τθ γραφικι παράςταςθ πλθκτρολογϊντασ pgprof ςε ζνα κζλυφοσ εντολϊν. Η χριςθ του PGI Profiler αποτελείται από δφο βαςικά βιματα: Δυναμικι Ανάλυςθ τθσ εφαρμογισ ςασ και ςτθ ςυνζχεια ανάλυςθ του προφίλ. Και τα δφο βιματα μποροφν να πραγματοποιθκοφν ςε κάκε λειτουργία. τθ λειτουργία γραμμισ εντολϊν χρθςιμοποιοφνται δφο διακριτζσ εντολζσ για τθν δυναμικι ανάλυςθ και τθν ανάλυςθ του προφίλ. ε γραφικι παράςταςθ, τόςο θ δθμιουργία προφίλ όςο και θ ανάλυςθ μποροφν να πραγματοποιθκοφν ςτθν ίδια ςυνεδρία. Επιπλζον, είναι δυνατό να αποκθκεφςετε ζνα προφίλ είτε ςτθ γραμμι εντολϊν είτε ςτο γραφικό τρόπο. Σο αποκθκευμζνο προφίλ μπορεί να αναλυκεί ςτο γραφικό τρόπο χρθςιμοποιϊντασ το File Import option. 150
151 Η λειτουργία τησ γραμμήσ εντολών Πόςο χρόνο χρειάηεται θ εφαρμογι μου να τρζξει; Δυναμικι ανάλυςθ του a.out και αποκθκεφςτε τα αποτελζςματα απόδοςθσ ςτο αρχείο a.prof με τθν εντολι: $ pgprof -o a.prof a.out Η επιλογι του pgprof -cpu-profile-mode top-down ςτρζφει τo δζντρο κλιςεων για να εμφανίςει τθν main ςτθν κορυφι και τισ λειτουργίεσ που καλεί παρακάτω με τθν εντολι: $ pgprof --cpu-profiling-mode top-down -i a.prof 151
152 Η λειτουργία τησ γραμμήσ εντολών Πϊσ μπορϊ να απεικονίςω τόςο τα δεδομζνα απόδοςθσ τθσ CPU και GPU; Δυναμικι ανάλυςθ του a.out και αποκθκεφςτε τα αποτελζςματα απόδοςθσ ςτο αρχείο a.prof με τθν εντολι: $ pgprof -o a.prof a.out τθ ςυνζχεια, εμφανίςτε τα περιεχόμενα του αρχείου εξόδου με τθν εντολι: $ pgprof -i a.prof Σα αποτελζςματα χωρίηονται ςε τζςςερα τμιματα: 1. Προφίλ εκτζλεςθσ πυρινα GPU. 2. Προφίλ εκτζλεςθσ API CUDA. 3. Προφίλ εκτζλεςθσ OpenACC. 4. Προφίλ εκτζλεςθσ CPU. 152
153 Η λειτουργία τησ γραμμήσ εντολών Προφίλ εκτζλεςθσ πυρινα GPU. 2. Προφίλ εκτζλεςθσ API CUDA. 3. Προφίλ εκτζλεςθσ OpenACC. 4. Προφίλ εκτζλεςθσ CPU. 153
154 Η λειτουργία τησ γραμμήσ εντολών Ποιεσ πλθροφορίεσ μπορεί να πει ο μεταγλωττιςτισ ςχετικά με τον τρόπο δομισ τθσ εφαρμογισ μου για απόδοςθ; Ο Profiler PGI μπορεί να ςασ δείξει πλθροφορίεσ ςχετικά με τον τρόπο ςφνταξθσ του προγράμματόσ ςασ. Πρϊτα προςκζςτε τθν ακόλουκθ επιλογι κατά τθ ςφνταξθ και τθ ςφνδεςθ: -Minfo=ccff Δυναμικι ανάλυςθ του a.out και αποκθκεφςτε τα αποτελζςματα απόδοςθσ ςτο αρχείο a.prof με τθν εντολι: $ pgprof -o a.prof a.out Σϊρα εμφανίςτε το προφίλ με τισ πλθροφορίεσ CCFF και καταγράψτε τα αποτελζςματα απόδοςθσ με βάςθ τθ γραμμι με τθν εντολι: $ pgprof --cpu-profiling-show-ccff on -i a.prof 154
155 Η λειτουργία γραφικήσ αναπαράςταςησ Πόςο χρόνο χρειάηεται θ εφαρμογι μου να τρζξει; Για να ξεκινιςετε μια νζα περίοδο δθμιουργίασ δυναμικισ ανάλυςθσ, μετά τθν εκκίνθςθ του Profiler PGI, ανοίξτε το μενοφ File και επιλζξτε New Session. το παράκυρο διαλόγου, μεταβείτε ςτο εκτελζςιμο αρχείο που κζλετε να αναλφςετε. τθ ςυνζχεια, προςκζςτε οποιαδιποτε ορίςματα γραμμισ εντολϊν για να ξεκινιςετε. Κάντε κλικ ςτο κουμπί Next και μετά ςτο Finish. τθν καρτζλα CPU Details", κάντε κλικ ςτο κουμπί Show the top-down", όπωσ φαίνεται ςτο εικόνα παρακάτω. 155
156 Η λειτουργία γραφικήσ αναπαράςταςησ Αρχείο Λεπτομζρειεσ τθσ CPU 156
157 Η λειτουργία γραφικήσ αναπαράςταςησ Πϊσ μπορϊ να απεικονίςω τόςο τα δεδομζνα απόδοςθσ CPU και GPU; Για να ξεκινιςετε μια νζα περίοδο δθμιουργίασ δυναμικισ ανάλυςθσ, μετά τθν εκκίνθςθ του Profiler PGI, ανοίξτε το μενοφ File και επιλζξτε New Session. το παράκυρο διαλόγου, μεταβείτε ςτο εκτελζςιμο αρχείο που κζλετε να προφίλ. τθ ςυνζχεια, προςκζςτε οποιαδιποτε επιχειριματα γραμμισ εντολϊν για να το ξεκινιςετε. Κάντε κλικ ςτο κουμπί Next και μετά ςτο Finish. 1. Η προβολι Timeline" κα εμφανίςει τα προγραμματιςμζνα ςυμβάντα από τθ ςτιγμι που ςυνζβθςαν. 2. τθν καρτζλα GPU Details" παρατίκενται οι λεπτομζρειεσ τθσ απόδοςθσ για κάκε πυρινα GPU. 3. τθν καρτζλα CPU Details εμφανίηεται θ δζντρο κλιςεων τθσ CPU. 4. Η καρτζλα Properties εμφανίηει τισ λεπτομζρειεσ των ςυμβάντων που επιλζχκθκαν ςτο χρονικό πλαίςιο. 157
158 Η λειτουργία γραφικήσ αναπαράςταςησ 158
159 Η λειτουργία γραφικήσ αναπαράςταςησ Ποιζσ πλθροφορίεσ μπορεί να πει ο μεταγλωττιςτισ ςχετικά με τον τρόπο δομισ τθσ εφαρμογισ μου για απόδοςθ; Ο Profiler PGI μπορεί να ςασ παρζχει πλθροφορίεσ ςχετικά με τον τρόπο ςφνταξθσ του προγράμματόσ ςασ. Πρϊτα προςκζςτε τθν ακόλουκθ επιλογι κατά τθ ςφνταξθ και τθ ςφνδεςθ: τθ ςυνζχεια, αναλφςτε δυναμικά. -Minfo=ccff Για να ξεκινιςετε μια νζα περίοδο δθμιουργίασ προφίλ, μετά τθν εκκίνθςθ του Profiler PGI, ανοίξτε το μενοφ File και επιλζξτε New Session. το παράκυρο διαλόγου, μεταβείτε ςτο εκτελζςιμο αρχείο που κζλετε να προφίλ. τθ ςυνζχεια, προςκζςτε οποιαδιποτε ορίςματα ςτθ γραμμι εντολϊν για να ξεκινιςετε. Κάντε κλικ ςτο κουμπί Next και μετά ςτο Finish. τθν καρτζλα Λεπτομζρειεσ επεξεργαςτι (CPU), κάντε κλικ ςτο κουμπί "Εμφάνιςθ τθσ προβολισ δομισ κϊδικα". Κάντε διπλό κλικ ςε μια καταχϊρθςθ αρχείου, το όνομα τθσ λειτουργίασ ι τον αρικμό γραμμισ για να εμφανιςτεί αυτό το αρχείο ι ςυγκεκριμζνθ γραμμι ςτθν προβολι του πθγαίου κϊδικα. τα αριςτερά των αρικμϊν γραμμϊν ςτθν προβολι πθγαίου κϊδικα κα δείτε μια ςειρά ςθμειϊςεων μεταγλωττιςτι. Tοποκετιςτε το ποντίκι πάνω από μια ςθμείωςθ για να εμφανιςτεί θ ανατροφοδότθςθ που παρζχεται από τον μεταγλωττιςτι. 159
160 Η λειτουργία γραφικήσ αναπαράςταςησ θμείω ςθ Προβολι δομισ κϊδικα Διπλό κλικ 160
161 Προχωρθμζνθ Δυναμικι ανάλυςθ του κϊδικα του OpenACC- με χριςθ του εργαλείου Visual Profiler τθσ NVIDIA 161
162 Σι είναι το Visual Profiler; Σο Visual Profiler είναι ζνα εργαλείο γραφικισ προχωρθμζνθσ ανάλυςθσ το οποίο εμφανίηει μια χρονικι γραμμι τθσ δραςτθριότθτασ τθσ CPU και τθσ GPU τθσ εφαρμογισ ςασ και περιλαμβάνει μια αυτοματοποιθμζνθ μθχανι ανάλυςθσ για τον εντοπιςμό ευκαιριϊν βελτιςτοποίθςθσ. Σο εργαλείο nvprof ςασ επιτρζπει να ςυλλζγετε και να προβάλλετε δεδομζνα δθμιουργίασ προφίλ από τθν γραμμι εντολϊν. Σο NVIDIA Visual Profiler είναι ζνα εργαλείο ανάλυςθσ πολλαπλϊν επιδόςεων που παρζχει ςτουσ προγραμματιςτζσ ηωτικισ ςθμαςίασ ανατροφοδότθςθ για τθ βελτιςτοποίθςθ των εφαρμογϊν CUDA C / C ++. Σο Visual Profiler που κυκλοφόρθςε για πρϊτθ φορά το 2008 υποςτθρίηει όλα τα 350 εκατομμφρια + GPUs NVIDIA με δυνατότθτα CUDA που ζχουν αποςταλεί από το 2006 ςε Linux, Mac OS X και Windows και είναι είναι διακζςιμο ωσ μζροσ του CUDA Toolkit. 162
163 Η χρήςη του Visual Profiler ςε βήματα (1/4) 1. Μεταβείτε ςτθν καρτζλα Analysis" και κάντε κλικ ςτο Examine GPU Usage". Μόλισ εκτελεςτεί θ ανάλυςθ, ο profiler ςασ δίνει μια ςειρά προειδοποιιςεων. Αυτό ςασ δίνει ενδείξεισ ςχετικά με το τι μπορεί να βελτιωκεί. 163
164 Η χρήςη του Visual Profiler ςε βήματα (2/4) 2. τθ ςυνζχεια, κάντε κλικ ςτο Examine Individual Kernels". Αυτό κα ςασ δείξει μια λίςτα πυρινων. 164
165 Η χρήςη του Visual Profiler ςε βήματα (3/4) 3. Επιλζξτε το πρϊτο και κάντε κλικ ςτθν επιλογι Perform Kernel Analysis". Ο profiler κα ςασ δείξει μια λεπτομερζςτερθ ανάλυςθ αυτοφ του ςυγκεκριμζνου πυρινα, υπογραμμίηοντασ το πιο πικανό ςθμείο ςυμφόρθςθσ. τθν περίπτωςθ αυτι, θ απόδοςθ περιορίηεται από τθν κακυςτζρθςθ μνιμθσ. 165
166 Η χρήςη του Visual Profiler ςε βήματα (4/4) 4. Κάντε κλικ ςτο Perform Latency Analysis. 166
167 Η επεξιγθςθ των αποτελεςμάτων γίνεται ςε επόμενθ διαφάνεια. Η μορφή των αποτελεςμάτων
Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8
Δείκτεσ Διαχείριςθ Μνιμθσ Βαγγζλθσ Οικονόμου Διάλεξθ 8 Δείκτεσ Κάκε μεταβλθτι ςχετίηεται με μία κζςθ ςτθν κφρια μνιμθ του υπολογιςτι. Κάκε κζςθ ςτθ μνιμθ ζχει τθ δικι τθσ ξεχωριςτι διεφκυνςθ. Με άμεςθ
Διαβάστε περισσότεραΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 2 ο Εργαςτιριο Διαχείριςθ Διεργαςιϊν
ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ 2 ο Εργαςτιριο Διαχείριςθ Διεργαςιϊν Τπόβακρο (1/3) τουσ παλαιότερουσ υπολογιςτζσ θ Κεντρικι Μονάδα Επεξεργαςίασ (Κ.Μ.Ε.) μποροφςε κάκε ςτιγμι να εκτελεί μόνο ζνα πρόγραμμα τουσ ςφγχρονουσ
Διαβάστε περισσότεραΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι
ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι Λογιςμικό (Software), Πρόγραμμα (Programme ι Program), Προγραμματιςτισ (Programmer), Λειτουργικό Σφςτθμα (Operating
Διαβάστε περισσότεραΠαράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2
Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2 Δρ. Χρήζηος Ηλιούδης Μθ Προςθμαςμζνοι Ακζραιοι Εφαρμογζσ (ςε οποιαδιποτε περίπτωςθ δεν χρειάηονται αρνθτικοί αρικμοί) Καταμζτρθςθ. Διευκυνςιοδότθςθ.
Διαβάστε περισσότεραΔιαδικαςία Διαχείριςθσ Στθλϊν Βιβλίου Εςόδων - Εξόδων. (v.1.0.7)
Διαδικαςία Διαχείριςθσ Στθλϊν Βιβλίου Εςόδων - Εξόδων (v.1.0.7) 1 Περίληψη Το ςυγκεκριμζνο εγχειρίδιο δθμιουργικθκε για να βοθκιςει τθν κατανόθςθ τθσ διαδικαςίασ διαχείριςθσ ςτθλών βιβλίου Εςόδων - Εξόδων.
Διαβάστε περισσότεραΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ. Κεφάλαιο 8 Η γλϊςςα Pascal
ΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ Κεφάλαιο 8 Η γλϊςςα Pascal Παράγραφοσ 8.2 Βαςικοί τφποι δεδομζνων Σα δεδομζνα ενόσ προγράμματοσ μπορεί να: είναι αποκθκευμζνα εςωτερικά ςτθν μνιμθ είναι αποκθκευμζνα εξωτερικά
Διαβάστε περισσότεραΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι
ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι Τλικό υπολογιςτι (Hardware), Προςωπικόσ Τπολογιςτισ (ΡC), υςκευι ειςόδου, υςκευι εξόδου, Οκόνθ (Screen), Εκτυπωτισ (Printer), αρωτισ
Διαβάστε περισσότεραΈνα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν:
Μζθοδος Simplex Η πλζον γνωςτι και περιςςότερο χρθςιμοποιουμζνθ μζκοδοσ για τθν επίλυςθ ενόσ γενικοφ προβλιματοσ γραμμικοφ προγραμματιςμοφ, είναι θ μζκοδοσ Simplex θ οποία αναπτφχκθκε από τον George Dantzig.
Διαβάστε περισσότεραΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι
Παράςταςη κινητήσ υποδιαςτολήσ ςφμφωνα με το πρότυπο ΙΕΕΕ Δρ. Χρήστος Ηλιούδης το πρότυπο ΙΕΕΕ 754 ζχει χρθςιμοποιθκεί ευρζωσ ςε πραγματικοφσ υπολογιςτζσ. Το πρότυπο αυτό κακορίηει δφο βαςικζσ μορφζσ κινθτισ
Διαβάστε περισσότεραx n D 2 ENCODER m - σε n (m 2 n ) x 1 Παραδείγματα κωδικοποιθτϊν είναι ο κωδικοποιθτισ οκταδικοφ ςε δυαδικό και ο κωδικοποιθτισ BCD ςε δυαδικό.
Κωδικοποιητές Ο κωδικοποιθτισ (nor) είναι ζνα κφκλωμα το οποίο διακζτει n γραμμζσ εξόδου και το πολφ μζχρι m = 2 n γραμμζσ ειςόδου και (m 2 n ). Οι ζξοδοι παράγουν τθν κατάλλθλθ λζξθ ενόσ δυαδικοφ κϊδικα
Διαβάστε περισσότεραΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ. Ειρινθ Φιλιοποφλου
ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ Ειρινθ Φιλιοποφλου Ειςαγωγι Ο Παγκόςμιοσ Ιςτόσ (World Wide Web - WWW) ι πιο απλά Ιςτόσ (Web) είναι μία αρχιτεκτονικι για τθν προςπζλαςθ διαςυνδεδεμζνων εγγράφων
Διαβάστε περισσότεραModellus 4.01 Συ ντομοσ Οδηγο σ
Νίκοσ Αναςταςάκθσ 4.01 Συ ντομοσ Οδηγο σ Περιγραφή Σο είναι λογιςμικό προςομοιϊςεων που ςτθρίηει τθν λειτουργία του ςε μακθματικά μοντζλα. ε αντίκεςθ με άλλα λογιςμικά (π.χ. Interactive Physics, Crocodile
Διαβάστε περισσότεραΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ
ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ ελιδοποίθςθ (1/10) Σόςο θ κατάτμθςθ διαμεριςμάτων ςτακεροφ μεγζκουσ όςο και θ κατάτμθςθ διαμεριςμάτων μεταβλθτοφ και άνιςου μεγζκουσ δεν κάνουν
Διαβάστε περισσότεραΗ γλώςςα προγραμματιςμού C
Η γλώςςα προγραμματιςμού C Οι εντολζσ επανάλθψθσ (while, do-while, for) Γενικά για τισ εντολζσ επανάλθψθσ Συχνά ςτο προγραμματιςμό είναι επικυμθτι θ πολλαπλι εκτζλεςθ μιασ ενότθτασ εντολϊν, είτε για ζνα
Διαβάστε περισσότεραΔομζσ Αφαιρετικότθτα ςτα Δεδομζνα
Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα Περιεχόμενα Ζννοια δομισ Οριςμόσ δομισ Διλωςθ μεταβλθτϊν Απόδοςθ Αρχικϊν τιμϊν Αναφορά ςτα μζλθ μιασ δομισ Ζνκεςθ Δομισ Πίνακεσ Δομϊν Η ζννοια τθσ δομισ Χρθςιμοποιιςαμε
Διαβάστε περισσότερα5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ
5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ Να γραφεί πρόγραμμα, το οποίο κα δίνει τισ τιμζσ 5 και 6 ςε δφο μεταβλθτζσ a και b και κα υπολογίηει και κα εμφανίηει το άκροιςμά τουσ sum. ΛΟΓΙΚΟ ΔΙΑΓΡΑΜΜΑ a 5 b 6 sum a+b sum ΑΛΓΟΡΙΘΜΟ
Διαβάστε περισσότεραΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν
ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν Παράλλθλεσ Διεργαςίεσ (1/5) Δφο διεργαςίεσ λζγονται «παράλλθλεσ» (concurrent) όταν υπάρχει ταυτοχρονιςμόσ, δθλαδι οι εκτελζςεισ τουσ επικαλφπτονται
Διαβάστε περισσότεραΤυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Εργαςτιριο 1
Τμήμα Μησανικών Πληποφοπικήρ, Τ.Ε.Ι. Ηπείπος Ακαδημαϊκό Έτορ 2016-2017, 6 ο Εξάμηνο Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Εργαςτιριο 1 Διδάςκων Τςιακμάκθσ Κυριάκοσ, Phd MSc in Electronic Physics (Radioelectrology)
Διαβάστε περισσότεραΠωσ δθμιουργώ φακζλουσ;
Πωσ δθμιουργώ φακζλουσ; Για να μπορζςετε να δθμιουργιςετε φακζλουσ ςτο χαρτοφυλάκιό ςασ ςτο Mahara κα πρζπει να μπείτε ςτο ςφςτθμα αφοφ πατιςετε πάνω ςτο ςφνδεςμο Mahara profiles από οποιοδιποτε ςελίδα
Διαβάστε περισσότεραΑυτόματη δημιουργία στηλών Αντιστοίχηση νέων λογαριασμών ΦΠΑ
Αυτόματη δημιουργία στηλών Αντιστοίχηση νέων λογαριασμών ΦΠΑ 1 Περίληψη Το ςυγκεκριμζνο εγχειρίδιο δημιουργήθηκε για να βοηθήςει την κατανόηςη τησ διαδικαςίασ αυτόματησ δημιουργίασ ςτηλών και αντιςτοίχιςησ
Διαβάστε περισσότεραΔομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9
Δομθμζνοσ Προγραμματιςμόσ Βαγγζλθσ Οικονόμου Εργαςτιριο 9 Συναρτιςεισ Αφαιρετικότθτα ςτισ διεργαςίεσ Συνάρτθςεισ Διλωςθ, Κλιςθ και Οριςμόσ Εμβζλεια Μεταβλθτών Μεταβίβαςθ παραμζτρων ςε ςυναρτιςεισ Συναρτιςεισ
Διαβάστε περισσότεραΟδηγίες αναβάθμισης χαρτών
Οδηγίες αναβάθμισης χαρτών Για να κάνετε τθν αναβάκμιςθ χαρτϊν Ελλάδοσ κα πρζπει να εγγραφείτε ωσ νζο μζλοσ ςτθν ιςτοςελίδα http://www.mls.gr. 1) Εγγραφή νέου μέλουσ ςτην ιςτοςελίδα αναβαθμίςεων Α) Αντιγράψτε
Διαβάστε περισσότεραΤεχνικζσ Ανάλυςησ Διοικητικών Αποφάςεων
Τεχνικζσ Ανάλυςησ Διοικητικών Αποφάςεων Ενότητα 7: Ειςαγωγι ςτο Δυναμικό Προγραμματιςμό Κακθγθτισ Γιάννθσ Γιαννίκοσ Σχολι Οργάνωςθσ και Διοίκθςθσ Επιχειριςεων Τμιμα Διοίκθςθσ Επιχειριςεων Σκοποί ενότητασ
Διαβάστε περισσότεραΕιςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου
Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό Βαγγζλθσ Οικονόμου Περιεχόμενα Πλθροφορίεσ Μακιματοσ Δομθμζνοσ Προγραμματιςμόσ (Οριςμοί, Γενικζσ Ζννοιεσ) Αλγόρικμοι και Ψευδοκϊδικασ Γλϊςςα προγραμματιςμοφ C Πλθροφορίεσ
Διαβάστε περισσότερα17. Πολυδιάςτατοι πίνακεσ
Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων 17. Πολυδιάςτατοι πίνακεσ Ιωάννθσ Κατάκθσ Πολυδιάςτατοι πίνακεσ o Μζχρι τϊρα μιλοφςαμε για μονοδιάςτατουσ πίνακεσ ι int age[5]= 31,28,31,30,31; o Για παράλλθλουσ
Διαβάστε περισσότεραVirtualization. Στο ςυγκεκριμζνο οδηγό, θα παρουςιαςτεί η ικανότητα δοκιμήσ τησ διανομήσ Ubuntu 9.04, χωρίσ την ανάγκη του format.
Virtualization Στο ςυγκεκριμζνο οδηγό, θα παρουςιαςτεί η ικανότητα δοκιμήσ τησ διανομήσ Ubuntu 9.04, χωρίσ την ανάγκη του format. Το virtualization πρόκειται για μια τεχνολογία, θ οποία επιτρζπει το διαχωριςμό
Διαβάστε περισσότεραΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ
ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ Φιλιοποφλου Ειρινθ Προςθήκη νζων πεδίων Ασ υποκζςουμε ότι μετά τθ δθμιουργία του πίνακα αντιλαμβανόμαςτε ότι ζχουμε ξεχάςει κάποια πεδία. Είναι ζνα πρόβλθμα το οποίο
Διαβάστε περισσότεραVisual C Express - Οδηγός Χρήσης
Visual C++ 2008 Express - Οδηγός Χρήσης Ζερβός Μιχάλης, Πρίντεζης Νίκος Σκοπόσ του οδθγοφ αυτοφ είναι να παρουςιάςει τισ βαςικζσ δυνατότθτεσ του Visual C++ 2008 Express Edition και πωσ μπορεί να χρθςιμοποιθκεί
Διαβάστε περισσότεραΧΕΔΙΑΜΟ ΠΡΟΪΟΝΣΩΝ ΜΕ Η/Τ
ΧΕΔΙΑΜΟ ΠΡΟΪΟΝΣΩΝ ΜΕ Η/Τ ΚΑΜΠΤΛΕ ΕΛΕΤΘΕΡΗ ΜΟΡΦΗ Χριςιμεσ για τθν περιγραφι ομαλών και ελεφκερων ςχθμάτων Αμάξωμα αυτοκινιτου, πτερφγια αεροςκαφών, ςκελετόσ πλοίου χιματα χαρακτιρων κινουμζνων ςχεδίων Περιγραφι
Διαβάστε περισσότεραΠαράςταςη ςυμπλήρωμα ωσ προσ 1
Δρ. Χρήστος Ηλιούδης Θζματα διάλεξησ ΣΤ1 Προςθεςη αφαίρεςη ςτο ΣΤ1 2 ή ΣΤ1 Ονομάηουμε ςυμπλιρωμα ωσ προσ μειωμζνθ βάςθ R ενόσ μθ προςθμαςμζνου αρικμοφ Χ = ( Χ θ-1 Χ θ-2... Χ 0 ) R ζναν άλλον αρικμό Χ'
Διαβάστε περισσότεραΟδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα
Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα Αυτζσ οι οδθγίεσ ζχουν ςτόχο λοιπόν να βοθκιςουν τουσ εκπαιδευτικοφσ να καταςκευάςουν τισ δικζσ τουσ δραςτθριότθτεσ με το μοντζλο του Άβακα. Παρουςίαςη
Διαβάστε περισσότεραΙδιότθτεσ πεδίων Γενικζσ.
Οι ιδιότθτεσ των πεδίων διαφζρουν ανάλογα με τον τφπο δεδομζνων που επιλζγουμε. Ορίηονται ςτο κάτω μζροσ του παρακφρου ςχεδίαςθσ του πίνακα, ςτθν καρτζλα Γενικζσ. Ιδιότθτα: Μζγεκοσ πεδίου (Field size)
Διαβάστε περισσότεραΕγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)
Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο) Ιοφνιοσ 2013 Περιεχόμενα: Ειςαγωγή... 3 1.Εθνικό Τυπογραφείο... 3 1.1. Είςοδοσ... 3 1.2. Αρχική Οθόνη... 4 1.3. Διεκπεραίωςη αίτηςησ...
Διαβάστε περισσότεραΣ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium V
Σ ΤΑΤ Ι Σ Τ Ι Κ Η i Statisticum collegium V Στατιςτική Συμπεραςματολογία Ι Σημειακζσ Εκτιμήςεισ Διαςτήματα Εμπιςτοςφνησ Στατιςτική Συμπεραςματολογία (Statistical Inference) Το πεδίο τθσ Στατιςτικισ Συμπεραςματολογία,
Διαβάστε περισσότεραΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO
ΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO Το Micro Worlds Pro είναι ζνα ολοκλθρωμζνο περιβάλλον προγραμματιςμοφ. Χρθςιμοποιεί τθ γλϊςςα προγραμματιςμοφ Logo (εξελλθνιςμζνθ) Το Micro Worlds Pro περιλαμβάνει
Διαβάστε περισσότεραΨθφιακά Ηλεκτρονικά. Ενότθτα 5 : Ανάλυςθ κυκλώματοσ με D και JK FLIP- FLOP Φώτιοσ Βαρτηιώτθσ
Ελλθνικι Δθμοκρατία Σεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Ψθφιακά Ηλεκτρονικά Ενότθτα 5 : Ανάλυςθ κυκλώματοσ με D και JK FLIP- FLOP Φώτιοσ Βαρτηιώτθσ 1 Ανοιχτά Ακαδημαϊκά Μαθήματα ςτο ΤΕΙ Ηπείρου Σμιμα
Διαβάστε περισσότεραΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 8 θ Διάλεξθ Ιδεατι Μνιμθ Μζροσ Α
ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ 8 θ Διάλεξθ Ιδεατι Μνιμθ Μζροσ Α Βαςικι Ορολογία Ιδεατή Μνήμη: χιμα ανάκεςθσ αποκθκευτικοφ χϊρου, ςτο οποίο θ δευτερεφουςα μνιμθ μπορεί να διευκυνςιοδοτθκεί ςαν να ιταν μζροσ τθσ κφριασ
Διαβάστε περισσότεραΒάςεισ Δεδομζνων Ι. Ενότητα 12: Κανονικοποίηςη. Δρ. Τςιμπίρθσ Αλκιβιάδθσ Τμιμα Μθχανικών Πλθροφορικισ ΤΕ
Βάςεισ Δεδομζνων Ι Ενότητα 12: Κανονικοποίηςη Δρ. Τςιμπίρθσ Αλκιβιάδθσ Τμιμα Μθχανικών Πλθροφορικισ ΤΕ Άδειεσ Χρήςησ Το παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χριςθσ Creative Commons. Για εκπαιδευτικό
Διαβάστε περισσότεραΠόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό. μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ
Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ Για τθν ανάδειξθ του κζματοσ κα λφνουμε κάποια προβλιματα
Διαβάστε περισσότεραΕργαςτιριο Βάςεων Δεδομζνων
Εργαςτιριο Βάςεων Δεδομζνων 2010-2011 Μάθημα 1 ο 1 Ε. Σςαμούρα Σμήμα Πληροφορικήσ ΑΠΘ Σκοπόσ του 1 ου εργαςτθριακοφ μακιματοσ Σκοπόσ του πρϊτου εργαςτθριακοφ μακιματοσ είναι να μελετιςουμε ερωτιματα επιλογισ
Διαβάστε περισσότεραΆςκθςθ 1θ: Να γραφεί αλγόρικμοσ που κα δθμιουργεί με τθ βοικεια διπλοφ επαναλθπτικοφ βρόχου, τον ακόλουκο διςδιάςτατο πίνακα:
2 ο Σετ Ασκήσεων Δομές Δεδομένων - Πίνακες Άςκθςθ 1θ: Να γραφεί αλγόρικμοσ που κα δθμιουργεί με τθ βοικεια διπλοφ επαναλθπτικοφ βρόχου, τον ακόλουκο διςδιάςτατο πίνακα: 2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8
Διαβάστε περισσότεραΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ Ω ΕΝΙΑΙΟ ΤΣΗΜΑ. ΚΕΦΑΛΑΙΟ 2: Σο Εςωτερικό του Τπολογιςτι
ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ ΚΕΦΑΛΑΙΟ 2: Σο Εςωτερικό του Τπολογιςτι 2.1 Ο Προςωπικόσ Υπολογιςτήσ εςωτερικά Σροφοδοτικό, Μθτρικι πλακζτα (Motherboard), Κεντρικι Μονάδα Επεξεργαςίασ (CPU), Κφρια Μνιμθ
Διαβάστε περισσότεραΕγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)
Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο) Πάτρα, 2013 Περιεχόμενα: Ειςαγωγή... 4 1. Επιμελητήριο... Error! Bookmark not defined. 1.1 Διαχειριςτήσ Αιτήςεων Επιμελητηρίου...
Διαβάστε περισσότεραMegatron ERP Βάςη δεδομζνων Π/Φ - κατηγοριοποίηςη Databox
Megatron ERP Βάςη δεδομζνων Π/Φ - κατηγοριοποίηςη Databox 03 05 ΙΛΤΔΑ ΠΛΗΡΟΦΟΡΙΚΗ Α.Ε. αρμά Ιηαμπζλλα Βαρλάμθσ Νίκοσ Ειςαγωγι... 1 Σι είναι το Databox...... 1 Πότε ανανεϊνεται...... 1 Μπορεί να εφαρμοςτεί
Διαβάστε περισσότεραςυςτιματα γραμμικϊν εξιςϊςεων
κεφάλαιο 7 Α ςυςτιματα γραμμικϊν εξιςϊςεων αςικζσ ζννοιεσ Γραμμικά, λζγονται τα ςυςτιματα εξιςϊςεων ςτα οποία οι άγνωςτοι εμφανίηονται ςτθν πρϊτθ δφναμθ. Σα γραμμικά ςυςτιματα με δφο εξιςϊςεισ και δφο
Διαβάστε περισσότεραΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 3: Εργονομία
ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ Εργονομία, ωςτι ςτάςθ εργαςίασ, Εικονοςτοιχείο (pixel), Ανάλυςθ οκόνθσ (resolution), Μζγεκοσ οκόνθσ Ποιεσ επιπτϊςεισ μπορεί να ζχει θ πολφωρθ χριςθ του υπολογιςτι ςτθν
Διαβάστε περισσότεραΔιαχείριςη Αριθμοδεικτών (v.1.0.7)
Διαχείριςη Αριθμοδεικτών (v.1.0.7) Περιεχόμενα 1. Μενοφ... 5 1.1 Αρικμοδείκτεσ.... 5 1.1.1 Δθμιουργία Αρικμοδείκτθ... 6 1.1.2 Αντιγραφι Αρικμοδείκτθ... 11 2. Παράμετροι... 12 2.1.1 Κατθγορίεσ Αρικμοδεικτϊν...
Διαβάστε περισσότεραΑνάπτυξη Εφαρμογών Σε Προγραμματιςτικό Περιβάλλον
Γραπτι Εξζταςθ ςτο μάκθμα Ανάπτυξη Εφαρμογών Σε Προγραμματιςτικό Περιβάλλον Όνομα: Επϊνυμο: Τμιμα: Ημερομθνία: 20/02/11 Θζμα 1 ο Α. Να χαρακτθρίςετε κακεμιά από τισ παρακάτω προτάςεισ ωσ Σωςτι (Σ) ι Λάκοσ
Διαβάστε περισσότεραΕφδοξοσ+ Συνδεκείτε ςτθν Εφαρμογι Φοιτθτϊν και μεταβείτε ςτθ ςελίδα «Ανταλλαγι Βιβλίων (Εφδοξοσ+)».
Εφδοξοσ+ Διαθζτοντασ βιβλία μζςω του «Εφδοξοσ+» Συνδεκείτε ςτθν Εφαρμογι Φοιτθτϊν και μεταβείτε ςτθ ςελίδα «Ανταλλαγι Βιβλίων (Εφδοξοσ+)». Εμφανίηεται θ λίςτα με όλα ςασ τα βιβλία. Από εδϊ μπορείτε: -
Διαβάστε περισσότεραΣτα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε:
ΔΟΜΗ ΑΠΟΦΑΗ Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε: Όταν το if που χρθςιμοποιοφμε παρζχει μόνο μία εναλλακτικι διαδρομι εκτζλεςθ, ο τφποσ δομισ
Διαβάστε περισσότεραΠεριεχόμενα. χολι Χοροφ Αντιγόνθ Βοφτου - Πολιτικι Διαχείριςθσ Cookie 1
Περιεχόμενα Περιεχόμενα... 1 1. Ειςαγωγή... 2 1.1 Σχετικά... 2 2. Γενικέσ Πληροφορίεσ για τα Cookies... 2 2.1 Οριςμόσ... 2 2.2 Χρήςη... 3 2.3 Τφποι... 3 2.4 Έλεγχοσ... 3 3. Cookies Σχολήσ... 4 3.1 Ειςαγωγή...
Διαβάστε περισσότεραΔιαδικασία Δημιοσργίας Ειδικών Λογαριασμών. (v.1.0.7)
Διαδικασία Δημιοσργίας Ειδικών Λογαριασμών (v.1.0.7) 1 Περίληψη Το ςυγκεκριμζνο εγχειρίδιο δημιουργήθηκε για να βοηθήςει την κατανόηςη τησ διαδικαςίασ δημιουργίασ ειδικών λογαριαςμών. Παρακάτω προτείνεται
Διαβάστε περισσότεραΣφντομεσ Οδθγίεσ Χριςθσ
Σφντομεσ Οδθγίεσ Χριςθσ Περιεχόμενα 1. Επαφζσ... 3 2. Ημερολόγιο Επιςκζψεων... 4 3. Εκκρεμότθτεσ... 5 4. Οικονομικά... 6 5. Το 4doctors ςτο κινθτό ςου... 8 6. Υποςτιριξθ... 8 2 1. Επαφζσ Στισ «Επαφζσ»
Διαβάστε περισσότεραΑςφάλεια και Προςταςία Δεδομζνων
Αςφάλεια και Προςταςία Δεδομζνων Μοντζλα Αςφάλειασ Σςιρόπουλοσ Γεϊργιοσ ΣΙΡΟΠΟΤΛΟ ΓΕΩΡΓΙΟ 1 Μοντζλα Αςφάλειασ Οι μθχανιςμοί που είναι απαραίτθτοι για τθν επιβολι μιασ πολιτικισ αςφάλειασ ςυμμορφϊνονται
Διαβάστε περισσότεραΤεχνικζσ Ανάλυςησ Διοικητικών Αποφάςεων
Τεχνικζσ Ανάλυςησ Διοικητικών Αποφάςεων Ενότητα 3: υςτιματα ουρϊν αναμονισ Κακθγθτισ Γιάννθσ Γιαννίκοσ χολι Οργάνωςθσ και Διοίκθςθσ Επιχειριςεων Σμιμα Διοίκθςθσ Επιχειριςεων Σκοποί ενότητασ Μελζτθ ςυςτθμάτων
Διαβάστε περισσότεραΕργαςτιριο Πικανοτιτων Σθμειϊςεισ προγραμματιςμοφ: βαςικζσ γνϊςεισ ανάπτυξθσ εφαρμογϊν. Κϊςτασ Αρβανιτάκθσ
Εργαςτιριο Πικανοτιτων Σθμειϊςεισ προγραμματιςμοφ: βαςικζσ γνϊςεισ ανάπτυξθσ εφαρμογϊν Κϊςτασ Αρβανιτάκθσ Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του
Διαβάστε περισσότεραΒάρειπ Δεδξμέμωμ. Επγαστήπιο ΙΙ. Τμήμα Πλεπουοπικήρ ΑΠΘ
Βάρειπ Δεδξμέμωμ Επγαστήπιο ΙΙ Τμήμα Πλεπουοπικήρ ΑΠΘ 2016-2017 2 Σκξπόπ ςξσ 2 ξσ εογαρςηοίξσ Σκοπόρ αςτού τος επγαστεπίος είναι: Η μελέτε επωτεμάτων σε μία μόνο σσέσε. Εξετάδοςμε τοςρ τελεστέρ επιλογήρ
Διαβάστε περισσότεραΕγχειρίδιο Χριςθσ τθσ διαδικτυακισ εφαρμογισ «Υποβολι και παρακολοφκθςθ τθσ ζγκριςθσ Εκπαιδευτικών Πακζτων»
Εγχειρίδιο Χριςθσ τθσ διαδικτυακισ εφαρμογισ «Υποβολι και παρακολοφκθςθ τθσ ζγκριςθσ Εκπαιδευτικών Πακζτων» Το Πλθροφοριακό Σφςτθμα τθσ δράςθσ «e-κπαιδευτείτε» ζχει ςτόχο να αυτοματοποιιςει τισ ακόλουκεσ
Διαβάστε περισσότεραΕγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Περιφέρειες)
Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Περιφέρειες) Ιούνιοσ 2013 Περιεχόμενα: Ειςαγωγή... 3 1. Περιφζρεια... 3 1.1 Διαχειριςτήσ Αιτήςεων Περιφζρειασ... 3 1.1.1. Είςοδοσ... 3 1.1.2. Αρχική
Διαβάστε περισσότεραΑΝΑΠΣΤΞΘ ΕΦΑΡΜΟΓΩΝ Ε ΠΡΟΓΡΑΜΜΑΣΙΣΙΚΟ ΠΕΡΙΒΑΛΛΟΝ 3 ο ΓΕΝΙΚΟ ΛΤΚΕΙΟ Ν. ΜΤΡΝΘ- ΕΠΙΜΕΛΕΙΑ: ΠΤΡΙΔΑΚΘ Λ.
Ερωτήςεισ Προβλήματα Α. Σημειώςτε δεξιά από κάθε πρόταςη το γράμμα Σ αν η πρόταςη είναι ςωςτή και το γράμμα Λ αν είναι λάθοσ. 1. Θ περατότθτα ενόσ αλγορίκμου αναφζρεται ςτο γεγονόσ ότι καταλιγει ςτθ λφςθ
Διαβάστε περισσότεραΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 6: Το γραφικό περιβάλλον Επικοινωνίασ (Γ.Π.Ε)
ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ ΚΕΦΑΛΑΙΟ 6: Το γραφικό περιβάλλον Επικοινωνίασ (Γ.Π.Ε) Γραφικό Περιβάλλον Επικοινωνίασ Περιβάλλον Εντολϊν Γραμμισ (Graphical User Interface/GUI), (Command Line Interface),
Διαβάστε περισσότεραSlide 1. Εισαγωγή στη ψυχρομετρία
Slide 1 Εισαγωγή στη ψυχρομετρία 1 Slide 2 Σφντομη ειςαγωγή ςτη ψυχρομετρία. Διάγραμμα Mollier (πίεςησ-ενθαλπίασ P-H) Σο διάγραμμα Mollier είναι μία γραφικι παράςταςθ ςε ζναν άξονα ςυντεταγμζνων γραμμϊν
Διαβάστε περισσότεραΕιδικά Θζματα Βάςεων Δεδομζνων
Ειδικά Θζματα Βάςεων Δεδομζνων Ενότητα 11: Αντικειμενοςτραφήσ και αντικείμενοςχεςιακζσ βάςεισ Δρ. Τςιμπίρθσ Αλκιβιάδθσ Τμιμα Μθχανικϊν Πλθροφορικισ ΤΕ Άδειεσ Χρήςησ Το παρόν εκπαιδευτικό υλικό υπόκειται
Διαβάστε περισσότεραΨθφιακά Ηλεκτρονικά. Ενότθτα 7 : Ελαχιςτοποίθςθ και κωδικοποίθςθ καταςτάςεων Φϊτιοσ Βαρτηιϊτθσ
Ελλθνικι Δθμοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Ψθφιακά Ηλεκτρονικά Ενότθτα 7 : Ελαχιςτοποίθςθ και κωδικοποίθςθ καταςτάςεων Φϊτιοσ Βαρτηιϊτθσ 1 Ανοιχτά Ακαδημαϊκά Μαθήματα ςτο ΤΕΙ Ηπείρου Τμιμα
Διαβάστε περισσότεραΣφςτημα Κεντρικήσ Υποςτήριξησ τησ Πρακτικήσ Άςκηςησ Φοιτητών ΑΕΙ
Σφςτημα Κεντρικήσ Υποςτήριξησ τησ Πρακτικήσ Άςκηςησ Φοιτητών ΑΕΙ Οδηγόσ Χρήςησ Εφαρμογήσ Φορζων Υποδοχήσ Πρακτικήσ Άςκηςησ Αφοφ πιςτοποιθκεί ο λογαριαςμόσ που δθμιουργιςατε ςτο πρόγραμμα «Άτλασ» ωσ Φορζασ
Διαβάστε περισσότερα3 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ ( while, do while )
3 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ ( while, do while ) Στα πιο πολλά προγράμματα απαιτείται κάποια ι κάποιεσ εντολζσ να εκτελοφνται πολλζσ φορζσ για όςο ιςχφει κάποια ςυνκικθ. Ο αρικμόσ των επαναλιψεων μπορεί να είναι
Διαβάστε περισσότεραΟδηγόσ εγκατάςταςησ και ενεργοποίηςησ
Οδηγόσ εγκατάςταςησ και ενεργοποίηςησ Ευχαριςτοφμε που επιλζξατε το memoq 4.5, το πρωτοκλαςάτο περιβάλλον μετάφραςθσ για ελεφκερουσ επαγγελματίεσ μεταφραςτζσ, μεταφραςτικά γραφεία και επιχειριςεισ. Αυτό
Διαβάστε περισσότεραΠρογραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 15. Πίνακεσ ΙI. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων
Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων 15. Πίνακεσ ΙI Ιωάννθσ Κατάκθσ Σιμερα o Ειςαγωγι o Διλωςθ o Αρχικοποίθςθ o Πρόςβαςθ o Παραδείγματα Πίνακεσ - Επανάλθψθ o Στθν προθγοφμενθ διάλεξθ κάναμε μια
Διαβάστε περισσότεραΟντοκεντρικόσ Προγραμματιςμόσ
Οντοκεντρικόσ Προγραμματιςμόσ Ενότθτα 7: C++ TEMPLATES, ΤΠΕΡΦΟΡΣΩΗ ΣΕΛΕΣΩΝ, ΕΞΑΙΡΕΕΙ Templates Ιωάννθσ Χατηθλυγεροφδθσ Πολυτεχνικι χολι Σμιμα Μθχανικών Η/Τ & Πλθροφορικισ Templates Ειςαγωγι Templates o
Διαβάστε περισσότεραΠειραματικι Ψυχολογία (ΨΧ66)
Πειραματικι Ψυχολογία (ΨΧ66) Διάλεξη 7 Σεχνικζσ για τθν επίτευξθ ςτακερότθτασ Πζτροσ Ροφςςοσ Μζθοδοι για την επίτευξη του ελζγχου Μζςω του κατάλλθλου ςχεδιαςμοφ του πειράματοσ (ςτόχοσ είναι θ εξάλειψθ
Διαβάστε περισσότεραΑνάπτυξη Εφαρμογών με Σχεςιακέσ Βάςεισ Δεδομένων
Ανάπτυξη Εφαρμογών με Σχεςιακέσ Βάςεισ Δεδομένων Δρ. Θεοδώρου Παύλοσ theodorou@uoc.gr Περιεχόμενα Τι είναι οι Βάςεισ Δεδομζνων (DataBases) Τι είναι Σφςτθμα Διαχείριςθσ Βάςεων Δεδομζνων (DBMS) Οι Στόχοι
Διαβάστε περισσότεραInternet a jeho role v našem životě Το Διαδίκτυο και ο ρόλοσ του ςτθ ηωι μασ
Internet a jeho role v našem životě Το Διαδίκτυο και ο ρόλοσ του ςτθ ηωι μασ Διαδίκτυο: μια πόρτα ςτον κόςμο Πϊσ μπορεί κανείσ ςε λίγα λεπτά να μάκει ποιεσ ταινίεσ παίηονται ςτουσ κινθματογράφουσ, να ςτείλει
Διαβάστε περισσότεραΔομζσ Δεδομζνων Πίνακεσ
Δομζσ Δεδομζνων Πίνακεσ Διάλεξθ 2 Περιεχόμενα Πίνακεσ: Οριςμοί, Γενικζσ ζννοιεσ Αποκικευςθ πινάκων Ειδικζσ μορφζσ πινάκων Αλγόρικμοι Αναηιτθςθσ Σειριακι Αναηιτθςθ Δυαδικι Αναηιτθςθ Οριςμοί, Γενικζσ ζννοιεσ
Διαβάστε περισσότεραΜΑΘΗΜΑΤΙΚΑ ΕΠΙΠΕΔΟ 11 12 (Β - Γ Λυκείου)
ΕΠΙΠΕΔΟ 11 12 (Β - Γ Λυκείου) 19 Μαρτίου 2011 10:00-11:15 3 point/μονάδες 1) Στθν πιο κάτω εικόνα πρζπει να υπάρχει αρικμόσ ςε κάκε κουκκίδα ϊςτε το άκροιςμα των αρικμϊν ςτα άκρα κάκε ευκφγραμμου τμιματοσ
Διαβάστε περισσότεραΔιαδικαςία Προγράμματοσ Ωρομζτρθςθσ. (v.1.0.7)
(v.1.0.7) 1 Περίλθψθ Σο ςυγκεκριμζνο εγχειρίδιο δθμιουργικθκε για να βοθκιςει τθν κατανόθςθ τθσ Διαδικαςίασ Προγράμματοσ Ωρομζτρθςθσ. Παρακάτω προτείνεται μια αλλθλουχία ενεργειϊν τθν οποία ο χριςτθσ πρζπει
Διαβάστε περισσότεραΥΡΟΝΣΙΣΗΡΙΟ Μ. Ε. ΚΑΙ ΚΕΝΣΡΟ ΙΔΙΑΙΣΕΡΩΝ ΜΑΘΗΜΑΣΩΝ «ΚΤΡΙΣΗ» ΔΙΑΓΩΝΙΜΑ ΘΕΜΑΣΑ Β ΛΤΚΕΙΟΤ ΥΕΒΡΟΤΑΡΙΟ 2018 ΑΕΠΠ
ΥΡΟΝΣΙΣΗΡΙΟ Μ. Ε. ΚΑΙ ΚΕΝΣΡΟ ΙΔΙΑΙΣΕΡΩΝ ΜΑΘΗΜΑΣΩΝ «ΚΤΡΙΣΗ» ΔΙΑΓΩΝΙΜΑ ΘΕΜΑΣΑ Β ΛΤΚΕΙΟΤ ΥΕΒΡΟΤΑΡΙΟ 2018 ΘΕΜΑ Α ΑΕΠΠ Α1. Για κακεμία από τισ παρακάτω προτάςεισ να χαρακτθρίςετε με ΣΩΣΤΟ ι ΛΑΘΟΣ 1. Η ζκφραςθ
Διαβάστε περισσότεραΠΡΟΦΟΡΑ ΖΗΣΗΗ ΚΡΑΣΘΚΗ ΠΑΡΕΜΒΑΗ
ΠΡΟΦΟΡΑ ΖΗΣΗΗ ΚΡΑΣΘΚΗ ΠΑΡΕΜΒΑΗ 1 Ειςαγωγι: Οι αγοραίεσ δυνάµεισ τθσ προςφοράσ και ηιτθςθσ Προσφορά και Ζήτηση είναι οι πιο γνωςτοί οικονοµικοί όροι. Η λειτουργία των αγορϊν προςδιορίηεται από δφο βαςικζσ
Διαβάστε περισσότεραΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ
ΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ Οδηγός Χρήσης Εφαρμογής Ελέγχου Προσφορών Αφοφ πιςτοποιθκεί ο λογαριαςμόσ που δθμιουργιςατε ςτο πρόγραμμα ωσ Πάροχοσ Προςφορϊν, κα λάβετε ζνα e-mail με
Διαβάστε περισσότεραΔιδάςκων: Κωνςταντίνοσ τεφανίδθσ
ΠΑΝΕΠΙΣΗΜΙΟ ΚΡΗΣΗ ΧΟΛΗ ΘΕΣΙΚΩΝ ΕΠΙΣΗΜΩΝ ΣΜΗΜΑ ΕΠΙΣΗΜΗ ΤΠΟΛΟΓΙΣΩΝ ΜΑΘΗΜΑ ΕΠΙΛΟΓΗ ΗΤ-564 ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΣΑ ΕΠΙΚΟΙΝΩΝΙΑ ΑΝΘΡΩΠΟΤ - ΜΗΧΑΝΗ Διδάςκων: Κωνςταντίνοσ τεφανίδθσ τόχοσ τθσ ςυγκεκριμζνθσ εργαςίασ
Διαβάστε περισσότεραΟδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ
Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ Αυτζσ οι οδθγίεσ ζχουν ςτόχο να βοθκιςουν τουσ εκπαιδευτικοφσ να καταςκευάςουν τισ δικζσ τουσ δραςτθριότθτεσ με το μοντζλο τθσ Αρικμογραμμισ.
Διαβάστε περισσότεραΒάςεισ Δεδομζνων Ι. Ενότητα 4: Μετατροπή ςχήματοσ Ο/Σ ςε ςχεςιακό. Δρ. Τςιμπίρθσ Αλκιβιάδθσ Τμιμα Μθχανικϊν Ρλθροφορικισ ΤΕ
Βάςεισ Δεδομζνων Ι Ενότητα 4: Μετατροπή ςχήματοσ Ο/Σ ςε ςχεςιακό Δρ. Τςιμπίρθσ Αλκιβιάδθσ Τμιμα Μθχανικϊν Ρλθροφορικισ ΤΕ Άδειεσ Χρήςησ Το παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χριςθσ Creative Commons.
Διαβάστε περισσότεραΒΙΟΛΟΓΟΙ ΓΙΑ ΦΥΣΙΚΟΥΣ
ΦΥΣΙΚΗ vs ΒΙΟΛΟΓΙΑ ΒΙΟΛΟΓΟΙ ΓΙΑ ΦΥΣΙΚΟΥΣ «Προτείνω να αναπτφξουμε πρώτα αυτό που κα μποροφςε να ζχει τον τίτλο: «ιδζεσ ενόσ απλοϊκοφ φυςικοφ για τουσ οργανιςμοφσ». Κοντολογίσ, τισ ιδζεσ που κα μποροφςαν
Διαβάστε περισσότεραΜάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ
Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ Ειςαγωγό Όπωσ είδαμε, ο χϊροσ εικονικϊν διευκφνςεων μνιμθσ που χρθςιμοποιεί κάκε διεργαςία, είναι αρκετά μεγαλφτεροσ από το χϊρο των φυςικϊν διευκφνςεων.
Διαβάστε περισσότεραΕΝΟΤΗΤΑ 3: Χριςθ εργαλείων ζκφραςθσ, επικοινωνίασ, ανακάλυψθσ και δθμιουργίασ. ΚΕΦΑΛΑΙΟ 7: Υπθρεςίεσ Αναηιτθςθσ ςτον Παγκόςμιο Ιςτό
ΕΝΟΤΗΤΑ 3: Χριςθ εργαλείων ζκφραςθσ, επικοινωνίασ, ΚΕΦΑΛΑΙΟ 7: Υπθρεςίεσ Αναηιτθςθσ ςτον Παγκόςμιο Ιςτό Αναηιτθςθ πλθροφοριϊν, Διεφκυνςθ Ιςτοςελίδασ (URL), κεματικοί Κατάλογοι, Λζξεισ Κλειδιά, Μθχανζσ
Διαβάστε περισσότεραΠεριοριςμοί μιασ Β.Δ. ςτθν Access(1/3)
Περιοριςμοί μιασ Β.Δ. ςτθν Access(1/3) Το όνομα ενόσ πίνακα, όπωσ και κάκε άλλου αντικειμζνου, μπορεί να ζχει μζγεκοσ ζωσ 64 χαρακτιρεσ. Το όνομα ενόσ πεδίου μπορεί να ζχει μζγεκοσ ζωσ 64 χαρακτιρεσ. Κάκε
Διαβάστε περισσότεραΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1
ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4. Να γίνει πρόγραμμα το οποίο να επιλφει το Διαγώνιο Σφςτθμα: A ι το ςφςτθμα : ι ςε μορφι εξιςώςεων το ςφςτθμα : Αλγόρικμοσ m(). Διαβάηουμε τθν τιμι του ( θ διάςταςθ του Πίνακα Α )..
Διαβάστε περισσότεραΔιαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ
Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ Οι παρακάτω οδθγίεσ αφοροφν το χριςτθ webdipe. Για διαφορετικό λογαριαςμό χρθςιμοποιιςτε κάκε φορά το αντίςτοιχο όνομα χριςτθ. = πατάμε αριςτερό κλικ ςτο Επιςκεφκείτε
Διαβάστε περισσότεραΕπιχειρηςιακή Ζρευνα και εφαρμογζσ με την χρήςη του λογιςμικοφ R
Επιχειρηςιακή Ζρευνα και εφαρμογζσ με την χρήςη του λογιςμικοφ R Ενότητα 5 η : Η Μζθοδοσ Simplex Παρουςίαςη τησ μεθόδου Κων/νοσ Κουνετάσ, Επίκουροσ Κακθγθτισ Νίκοσ Χατηθςταμοφλου, Υπ. Δρ. Οικονομικισ Επιςτιμθσ
Διαβάστε περισσότεραΔιαδικαζία Διατείριζης Εκηύπωζης Ιζοζσγίοσ Γενικού - Αναλσηικών Καθολικών. (v )
Διαδικαζία Διατείριζης Εκηύπωζης Ιζοζσγίοσ Γενικού - Αναλσηικών Καθολικών (v.1. 0.7) 1 Περίλθψθ Το ςυγκεκριμζνο εγχειρίδιο δθμιουργικθκε για να βοθκιςει τθν κατανόθςθ τθσ διαδικαςίασ διαχείριςθσ Εκτφπωςθσ
Διαβάστε περισσότεραΓενικά Μαθηματικά ΙΙ
ΑΡΙΣΟΣΕΛΕΙΟ ΠΑΝΕΠΙΣΗΜΙΟ ΘΕΑΛΟΝΙΚΗ ΑΝΟΙΚΣΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΣΑ Γενικά Μαθηματικά ΙΙ Ενότητα 13 η : Επαναλθπτικι Ενότθτα Λουκάσ Βλάχοσ Κακθγθτισ Αςτροφυςικισ Άδειεσ Χρήςησ Το παρόν εκπαιδευτικό υλικό υπόκειται
Διαβάστε περισσότεραΔείκτεσ απόδοςθσ υλικών
Δείκτεσ απόδοςθσ υλικών Κάκε ςυνδυαςμόσ λειτουργίασ, περιοριςμϊν και ςτόχων, οδθγεί ςε ζνα μζτρο τθσ απόδοςθσ τθσ λειτουργίασ του εξαρτιματοσ και περιζχει μια ομάδα ιδιοτιτων των υλικϊν. Αυτι θ ομάδα των
Διαβάστε περισσότεραΕιςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python
Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν Ειςαγωγι ςτθν Python Γ Μζροσ Modules, Αντικειμενοςτραφισ Προγραμματιςμόσ ςτθν Python, Classes, Objects, Αλλθλεπίδραςθ με αρχεία Ειςαγωγι αρκρωμάτων (modules): import
Διαβάστε περισσότεραΣχεδίαςη Σφγχρονων Ακολουθιακών Κυκλωμάτων
Σχεδίαςη Σφγχρονων Ακολουθιακών Κυκλωμάτων Πίνακεσ Διζγερςησ των FF Όπωσ είδαμε κατά τθ μελζτθ των FF, οι χαρακτθριςτικοί πίνακεσ δίνουν τθν τιμι τθσ επόμενθσ κατάςταςθσ κάκε FF ωσ ςυνάρτθςθ τθσ παροφςασ
Διαβάστε περισσότεραJoomla! - User Guide
Joomla! - User Guide τελευταία ανανέωση: 10/10/2013 από την ICAP WEB Solutions 1 Η καταςκευι τθσ δυναμικισ ςασ ιςτοςελίδασ ζχει ολοκλθρωκεί και μπορείτε πλζον να προχωριςετε ςε αλλαγζσ ι προςκικεσ όςον
Διαβάστε περισσότεραελ. 11/235, Περιεχόμενα Φακζλου "Σεχνικι Προςφορά"
υντάκτθσ : Ευάγγελοσ Κρζτςιμοσ χόλιο: ΠΑΡΑΣΗΡΗΗ 1 ελ. 11/235, Περιεχόμενα Φακζλου "Σεχνικι Προςφορά" Για τθν αποφυγι μεγάλου όγκου προςφοράσ και για τθ διευκόλυνςθ του ζργου τθσ επιτροπισ προτείνεται τα
Διαβάστε περισσότεραΗ θεωρία τησ ςτατιςτικήσ ςε ερωτήςεισ-απαντήςεισ Μέροσ 1 ον (έωσ ομαδοποίηςη δεδομένων)
1)Πώσ ορύζεται η Στατιςτικό επιςτόμη; Στατιςτικι είναι ζνα ςφνολο αρχϊν και μεκοδολογιϊν για: το ςχεδιαςμό τθσ διαδικαςίασ ςυλλογισ δεδομζνων τθ ςυνοπτικι και αποτελεςματικι παρουςίαςι τουσ τθν ανάλυςθ
Διαβάστε περισσότεραΕπιχειρηςιακή Ζρευνα και εφαρμογζσ με την χρήςη του λογιςμικοφ R
Επιχειρηςιακή Ζρευνα και εφαρμογζσ με την χρήςη του λογιςμικοφ R Ενότητα 6 η : Η Μζθοδοσ Μ και η Μζθοδοσ των Δφο Φάςεων Κων/νοσ Κουνετάσ, Επίκουροσ Κακθγθτισ Νίκοσ Χατηθςταμοφλου, Υπ. Δρ. Οικονομικισ Επιςτιμθσ
Διαβάστε περισσότεραΕΝΟΤΘΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΘ. ΚΕΦΑΛΑΙΟ 8: Πειρατεία Λογιςμικοφ
ΕΝΟΤΘΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΘ ΚΕΦΑΛΑΙΟ 8: Πειρατεία Λογιςμικοφ Άδεια χριςθσ, Πειρατεία Λογιςμικοφ, Πιςτοποιθτικό Αυκεντικότθτασ, Δωρεάν Λογιςμικό (Freeware), Λογιςμικό Ανοικτοφ Κϊδικα (Open source)
Διαβάστε περισσότεραΣυςκευζσ τθλεπικοινωνιϊν και δικτφωςθσ:
Συςκευζσ τθλεπικοινωνιϊν και δικτφωςθσ: Σειριακι Θφρα (1/2): Σειριακι Θφρα Σειριακι (2/2): Σειριακι Θφρα Σειριακι Θφρα (1/2): Σειριακι Θφρα Ακροδζκτεσ Σειριακισ Θφρασ Σειριακι Θφρα Dial Up Mo.dem: Mo.dem:
Διαβάστε περισσότεραΑςκιςεισ ςε (i) Δομζσ Ευρετθρίων και Οργάνωςθ Αρχείων (ii) Κανονικοποίθςθ
Αςκιςεισ ςε (i) Δομζσ Ευρετθρίων και Οργάνωςθ Αρχείων (ii) Κανονικοποίθςθ Δεκζμβριοσ 2016 Άςκθςθ 1 Θεωρείςτε ότι κζλουμε να διαγράψουμε τθν τιμι 43 ςτο Β+ δζντρο τθσ Εικόνασ 1. Η διαγραφι αυτι προκαλεί
Διαβάστε περισσότερα