Μετάβαση στο περιεχόμενο

Παράλληλη Επεξεργασία — Εξέταση Ιουνίου (χρονολογία άγνωστη, Ενότητα 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 περιλαμβάνει οδηγίες προς τον μεταγλωττιστή, βιβλιοθήκη χρόνου εκτέλεσης και μεταβλητές περιβάλλοντος (αν εδώ εννοούνται οι λεγόμενες «μεταβλητές συστήματος»). Ο μεταγλωττιστής είναι εξωτερικό εργαλείο υλοποίησης, όχι τμήμα του μοντέλου.

✔ Επιβεβαίωσε · ✖ Βρήκα λάθος


✖ Βρήκα λάθος στη μεταγραφή