Προγραμματισμός Συστημάτων

Σύντομη περιγραφή

Το μάθημα «Προγραμματισμός Συστημάτων» εστιάζει στο πώς γράφεται αποδοτικός κώδικας σε σύγχρονα υπολογιστικά συστήματα, συνδέοντας αρχιτεκτονική επεξεργαστών και παράλληλο προγραμματισμό. Καλύπτει βασικές μετρικές απόδοσης (π.χ. FLOPs/MIPS, χρόνος εκτέλεσης) και προχωρά σε θέματα όπως ILP, pipelines, superscalar/VLIW, καθώς και τον τρόπο που οι εξαρτήσεις δεδομένων και η ιεραρχία μνήμης επηρεάζουν την ταχύτητα. Στο πρακτικό κομμάτι δουλεύονται τεχνικές παραλληλισμού με threads και OpenMP (από βασικά constructs μέχρι tasks), μαζί με SIMD/vectorization (χειροκίνητα ή μέσω compiler). Τέλος, εξετάζονται έννοιες πολυπύρηνων συστημάτων (MIMD), IPC, και κρίσιμα ζητήματα συνοχής/συνέπειας μνήμης (atomics, critical sections, MSI κ.ά.).

Tip – Τι χρειάζεται προσοχή

  • Ιεραρχία μνήμης & caches: locality, cache misses και σωστή διάταξη δεδομένων — συχνά καθορίζουν περισσότερο την απόδοση από τον “καθαρό” υπολογισμό.
  • Εξαρτήσεις & race conditions: να είναι ξεκάθαρο πότε υπάρχει πραγματικός παραλληλισμός και πότε απαιτούνται atomics/critical, ώστε να αποφεύγονται λάθη ορθότητας.
  • OpenMP & SIMD: σωστή επιλογή constructs (parallel/for/tasks) και ρεαλιστικές προσδοκίες για speedup (Amdahl), μαζί με έλεγχο ότι το vectorization όντως συμβαίνει.

Τι κερδίζεις από αυτό το μάθημα

  • Εξοπλίζει με πρακτική κατανόηση του performance engineering: πώς μετριέται, πού χάνεται χρόνος, και πώς βελτιώνεται με συστηματικό τρόπο.
  • Δίνει ισχυρά εργαλεία για απαιτητικά αντικείμενα και έργα που “πατάνε” σε παράλληλη επεξεργασία και αρχιτεκτονική (HPC, systems, high-performance code), με έμφαση σε λύσεις που στέκουν και θεωρητικά και υλοποιητικά.