# Εισαγωγικές έννοιες HPC --- ## Ηigh Performance Computing (HPC) - Με τον όρο HPC αναφερόμαστε σε υπολογιστικές υποδομές αιχμής που μπορούν να επιτελέσουν πολλές αριθμητικές πράξεις στη μονάδα του χρόνου με σκοπό: - είτε να επιλυθούν υφιστάμενα προβλήματα πιο γρήγορα (π.χ. πρόγνωση καιρού) - είτε να επιλυθούν μεγαλύτερα προβλήματα (π.χ. κλιματική αλλαγή) - Το πλήθος των υπολογισμών στη μονάδα του χρόνου εξαρτάται *κυρίως* από την ταχύτητα του επεξεργαστή και το εύρος διαμεταγωγής δεδομένων από και προς τη μνήμη RAM - Μετριέται σε FLOPs (Floating Point Operations per second) και *συνήθως* μας ενδιαφέρει το πλήθος πράξεων με **double precision** floating points - Το θεωρητικό μέγιστο εξαρτάται κυρίως από τα χαρακτηριστικά του επεξεργαστή - Η πραγματική (μετρούμενη) τιμή εξαρτάται από τον κώδικα, από τις βελτιστοποιήσεις που θα κάνει ο compiler (μεταγλωττιστής) ή και όσες έχει υλοποιήσει ο προγραμματιστής (code optimization). --- :::info :information_source: Με τον όρο κώδικα αναφερόμαστε στον πηγαίο κώδικα μίας εφαρμογής. Συνήθως ο κώδικας μεταγλωτίζεται σε γλώσσα μηχανής (εκτελέσιμο) με τη χρήση ενός compiler (μεταγλωτιστή). Παραδείγματα τέτοιων γλωσσών είναι η C, C++, FORTRAN κ.α.. Υπάρχουν και interpreted γλώσσες προγραμματισμού (π.χ. Python, MATLAB κ.α.) στις οποίες η μεταγλώτιση γίνεται δυναμικά στο runtime οπότε δεν παρεμβάλεται μεταγλωτιστής που να παράγει ένα εκτελέσιμο. Συνήθως οι compiled γλώσσες παράγουν ταχύτερα εκτελέσιμα σε σύγκριση με τις interpreted γλώσσες. ::: --- ## Παράλληλος προγραμματισμός - Από το ~2005 και έκτοτε δεν αυξάνεται η συχνότητα των επεξεργαστών αλλά το πλήθος τους (multi core αρχιτεκτονικές). ![1-Trends-in-transistor-count-performance-core-count-and-power-over-the-past-decades](https://hackmd.io/_uploads/ryIqCVWx0.png) - Αυτή η εξέλιξη έχει οδηγήσει στην υιοθέτηση μεθόδων παράλληλου προγραμματισμού όπου ζητούμενο είναι η ταυτόχρονη εκμετάλευση των πολλών επεξεργαστών. - Τα βασικά μοντέλα παραλληλίας είναι: - Shared memory parallel processing ή SMP με βιβλιοθήκες όπως OpenMP, pThreads κ.α. - Distributed memory parallel processing ή DMP με βιβλιοθήκες όπως MPI - Το DMP μοντέλο μπορεί να κάνει scale σε πολλά μηχανήματα ενώ το SMP μπορεί να κάνει scale μόνο εντός **ενός** H/Y - Για να είναι αποδοτική η DMP παραλληλία (για να κάνει scale σε πολλούς Η/Υ) απαιτείται η διασύνδεση των Η/Υ να γίνεται με δικτύωση χαμηλής απόκρισης (~μs) και μεγάλους εύρους (>10Gpbs) - Σε μεγάλους υπερυπολογιστές είναι σύνηθες να χρησιμοποιούνται και τα δύο επίπεδα παραλληλίας (DMP accross nodes και SMP inter node) - Επιπέον τα τελευταία ~20 χρόνια έχει βρει έδαφος η χρήση Co-processors όπως GPUs (π.χ. CUDA, OpenACC κ.α.) ή/και FPGAs (programmable chips) για την επιτάχυνση των υπολογισμών :::info :information_source: Υποδομές που διαθέτουν τα παραπάνω χαρακτηριστικά αναφέρονται γενικώς ως συστοιχίες υπολογιστών. Επίσης χρησιμοποιούνται οι όροι HPC (High Performance Computing) ή Supercomputer (υπερυπολογιστής) όταν αναφερόμαστε σε συστοιχίες υπολογιστών. Οι σημερινοί (Απρίλιος 2024) υπερυπολογιστές "σπάνε" το φράγμα του HFlop δηλαδή 10^18 υπολογισμών ανά δευτερόλεπτο. Η ταξινόμησή τους βασίζεται στο Linpack benchmark και η λίστα των κορυφαίων υπερυπολογιστών ενημερώνεται δύο φορές ετησίως στο [top500.org](https://top500.org/). :::