# Εισαγωγικές έννοιες 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 αρχιτεκτονικές).

- Αυτή η εξέλιξη έχει οδηγήσει στην υιοθέτηση μεθόδων παράλληλου προγραμματισμού όπου ζητούμενο είναι η ταυτόχρονη εκμετάλευση των πολλών επεξεργαστών.
- Τα βασικά μοντέλα παραλληλίας είναι:
- 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/).
:::