Παράλληλη Επεξεργασία — Εξέταση Ιουνίου (χρονολογία άγνωστη, Ενότητα 2)¶
Μεταγραφή από τις φωτογραφίες του φακέλου Themata/For Disc/Εξέταση Ιουνίου (2.1–2.6). Σημείωση: η φωτογραφία περιέχει χειρόγραφες απαντήσεις φοιτητή.
2.1.png¶
Ερώτηση 1 / 6 (Πολλαπλής Επιλογής (Μοναδική Απάντηση) — 0.40 βαθμοί)
Ενότητα 2 (POSIX Threads / OpenMP)
Ποιο clause πρέπει να προσθέσουμε στην οδηγία parallel στον παρακάτω κώδικα ώστε η τιμή της τοπικής μεταβλητής N να έχει τιμή 1000 σε όλα τα νήματα της παράλληλης περιοχής;
int N = 1000;
#pragma omp parallel ΕΠΙΛΕΞΤΕ ΤΟ ΣΩΣΤΟ CLAUSE ΠΟΥ ΠΡΕΠΕΙ ΝΑ ΒΑΛΕΤΕ ΕΔΩ
- [ ] firstprivate(N)
- [ ] private(N)
- [ ] lastprivate(N)
- [ ] num_threads(N)
2.2.png¶
Ερώτηση 2 / 6 (Πολλαπλής Επιλογής (Μοναδική Απάντηση) — 0.40 βαθμοί)
Ενότητα 2 (POSIX Threads / OpenMP)
Η αξιοποίηση έργων (tasks) στο OpenMP:
- [ ] Επιτρέπει τον υπολογισμό μεγαλύτερου όγκου έργου σε δοθέν υπολογιστικό σύστημα
- [ ] Δεν προσφέρει επιπλέον λειτουργία σε σχέση με την χρήση μόνο νημάτων
- [ ] Επιτρέπει την ευκολότερη έκφραση μεγαλύτερου εύρους αλγορίθμων με χρήση παραλληλίας
- [ ] Όλα τα παραπάνω
2.3.png¶
Ερώτηση 3 / 6 (Πολλαπλής Επιλογής (Μοναδική Απάντηση) — 0.40 βαθμοί)
Ενότητα 2 (POSIX Threads / OpenMP)
Δίνεται ο παρακάτω κώδικας OpenMP. Ποια θα είναι η τιμή της τοπικής μεταβλητής test_var σε κάθε νήμα της παράλληλης περιοχής;
int test_var = 5;
#pragma omp parallel private(test_var)
{
/* Τι τιμή έχει η test_var σε κάθε νήμα της παράλληλης περιοχής; */
}
- [ ] Απροσδιόριστη
- [ ] 5
- [ ] 0
- [ ] 5 * p, όπου p το πλήθος των νημάτων της παράλληλης περιοχής
2.4.png¶
Ερώτηση 4 / 6 (Πολλαπλής Επιλογής (Μοναδική Απάντηση) — 0.40 βαθμοί)
Ενότητα 2 (POSIX Threads / OpenMP)
Μια υλοποίηση του προτύπου των POSIX Threads επιτρέπεται να υλοποιήσει τα νήματα:
- [ ] Μόνο ως νήματα επιπέδου πυρήνα
- [ ] Μόνο ως νήματα επιπέδου χρήστη
- [ ] Είτε ως νήματα επιπέδου χρήστη είτε ως νήματα επιπέδου πυρήνα
- [ ] Μόνο ως έργα (tasks)
2.5.png¶
Ερώτηση 5 / 6 (Πολλαπλής Επιλογής (Μοναδική Απάντηση) — 0.40 βαθμοί)
Ενότητα 2 (POSIX Threads / OpenMP)
Ο παρακάτω κώδικας τι πρόβλημα παρουσιάζει ως προς την παράλληλη εκτέλεση του σε ένα υπολογιστικό σύστημα που έχει 8 πυρήνες; Θεωρείστε πως η συνάρτηση thread_func() είναι ορισμένη στο πρόγραμμα και σωστή.
pthread_t tid[10];
int i;
for (i = 0; i < 10; i++) {
pthread_create(&tid[i], NULL, thread_func, NULL);
pthread_join(tid[i], NULL);
}
- [ ] Τα νήματα που δημιουργούνται δεν εκτελούνται ταυτόχρονα, ακόμα και αν κανένας πυρήνας δεν χρησιμοποιείται από άλλο πρόγραμμα
- [ ] Δημιουργούνται περισσότερα νήματα από τους διαθέσιμους πυρήνες
- [ ] Η χρήση της συνάρτησης pthread_join() δεν είναι απαραίτητη στο συγκεκριμένο πρόγραμμα
- [ ] Το πρόγραμμα δεν έχει κάποιο πρόβλημα
2.6.png¶
Ερώτηση 6 / 6 (Πολλαπλής Επιλογής (Μοναδική Απάντηση) — 0.40 βαθμοί)
Ενότητα 2 (POSIX Threads / OpenMP)
Ποιο από τα παρακάτω δεν είναι τμήμα του προγραμματιστικού μοντέλου OpenMP;
- [ ] Μεταγλωττιστής
- [ ] Οδηγίες προς τον μεταγλωττιστή
- [ ] Βιβλιοθήκη χρόνου εκτέλεσης
- [ ] Μεταβλητές συστήματος
Λύσεις (⚪ AI, μη επαληθευμένο)
Κατάσταση: ⚪ AI, μη επαληθευμένο Πηγή: λύσεις AI (deepseek-flash), ανεξάρτητη επανάληψη και αντιπαραβολή· καμία δεν έχει ελεγχθεί από άνθρωπο
Προσοχή
Λύση από AI — ελέγξτε την· δεν έχει επαληθευτεί από άνθρωπο. Η ένδειξη «δύο λύσεις συμφωνούν» δεν σημαίνει ότι η απάντηση είναι σωστή.
AI λύσεις — 2021-a¶
Οι λύσεις γράφτηκαν από μοντέλα AI και δεν έχουν ελεγχθεί από άνθρωπο. Η αρίθμηση ακολουθεί το αρχείο θεμάτων.
Θέμα 2.1¶
Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: υψηλή
Σωστή επιλογή: 1) firstprivate(N). Χρειαζόμαστε ιδιωτικό αντίγραφο της N σε κάθε νήμα, αρχικοποιημένο με την τιμή που είχε πριν από την παράλληλη περιοχή, δηλαδή 1000. Το private(N) θα άφηνε το αντίγραφο απροσδιόριστο, ενώ τα lastprivate/num_threads δεν κάνουν αυτό που ζητείται.
Θέμα 2.2¶
Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: υψηλή
Σωστή επιλογή: 3) Επιτρέπει την ευκολότερη έκφραση μεγαλύτερου εύρους αλγορίθμων με χρήση παραλληλίας. Τα OpenMP tasks βοηθούν στην έκφραση ακανόνιστης/δυναμικής παραλληλίας και δεν αυξάνουν από μόνα τους το διαθέσιμο υπολογιστικό έργο· επίσης προσφέρουν επιπλέον αφαίρεση σε σχέση με τη χρήση μόνο νημάτων.
Θέμα 2.3¶
Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: υψηλή
Σωστή επιλογή: 1) Απροσδιόριστη. Με private(test_var), κάθε νήμα αποκτά δικό του αντίγραφο χωρίς αρχικοποίηση από την εξωτερική τιμή· άρα δεν είναι εγγυημένο ότι θα έχει τιμή 5 ή 0.
Θέμα 2.4¶
Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: υψηλή
Σωστή επιλογή: 3) Είτε ως νήματα επιπέδου χρήστη είτε ως νήματα επιπέδου πυρήνα. Τα POSIX Threads είναι πρότυπο API και δεν επιβάλλουν συγκεκριμένη υλοποίηση των νημάτων.
Θέμα 2.5¶
Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: υψηλή
Σωστή επιλογή: 1) Τα νήματα που δημιουργούνται δεν εκτελούνται ταυτόχρονα, ακόμα και αν κανένας πυρήνας δεν χρησιμοποιείται από άλλο πρόγραμμα. Το pthread_join(tid[i], NULL) βρίσκεται μέσα στο loop αμέσως μετά το pthread_create, οπότε το κύριο νήμα περιμένει να τερματίσει κάθε νήμα πριν δημιουργήσει το επόμενο· έτσι δεν επιτυγχάνεται παραλληλία.
Θέμα 2.6¶
Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: μέτρια
Σωστή επιλογή: 1) Μεταγλωττιστής. Το προγραμματιστικό μοντέλο OpenMP περιλαμβάνει οδηγίες προς τον μεταγλωττιστή, βιβλιοθήκη χρόνου εκτέλεσης και μεταβλητές περιβάλλοντος (αν εδώ εννοούνται οι λεγόμενες «μεταβλητές συστήματος»). Ο μεταγλωττιστής είναι εξωτερικό εργαλείο υλοποίησης, όχι τμήμα του μοντέλου.