Παράλληλη Επεξεργασία — Ιούνιος 2021 — Ενότητα 1–2 (ερωτήσεις 1–2)¶
Μεταγραφή από τα 1.jpg και 2.jpg· η λύση στο 16.PNG δεν μεταγράφεται εδώ.
1.jpg¶
Ερώτηση 1 / 5 (Πολλαπλής Επιλογής (Μοναδική Απάντηση) — 0.40 βαθμοί)
Ενότητα 2 (POSIX Threads / OpenMP)
Το πλήθος των νημάτων που θα δημιουργηθούν σε μια παράλληλη περιοχή μπορεί να καθοριστεί με τους παρακάτω 4 διαφορετικούς τρόπους. Αν σε μια παράλληλη περιοχή χρησιμοποιηθούν και οι 4 τρόποι ποιος από αυτούς έχει τη μεγαλύτερη προτεραιότητα;
- [ ] Εξ ορισμού τιμή της υλοποίησης OpenMP
- [ ] Το clause num_threads στην οδηγία #pragma omp parallel
- [ ] Η συνάρτηση omp_set_num_threads()
- [ ] Η μεταβλητή περιβάλλοντος OMP_NUM_THREADS
2.jpg¶
[Λείπει από τη φωτογραφία: η επικεφαλίδα της ερώτησης (αριθμός και βαθμοί)]
Ενότητα 2 (POSIX Threads / OpenMP)
Ο παρακάτω κώδικας κάνει χρήση του μοντέλου εργασιών (tasks) του OpenMP.
int a ;
int main(int argc, char *argv[])
{
int b,c ;
#pragma omp parallel shared(c) private(b)
{
int d ;
#pragma omp task
{
int e ;
// σημείο αναφοράς εντός του task
}
}
// more code here
return 0;
}
Στον παραπάνω κώδικα και συγκεκριμένα στο σημείο αναφοράς εντός του task, η μεταβλητή b είναι:
- [ ] shared
- [ ] private
- [ ] firstprivate
- [ ] threadprivate
Λύσεις (🟡 community)
Κατάσταση: 🟡 community Πηγή: εξωτερικό site (λύση κώδικα OpenMP tasks, όπως σημειώνει η συνεδρία)
Προσοχή
Η λύση στο 16.PNG απαντά για τη μεταβλητή c, ενώ το Θέμα 2 της συνεδρίας ρωτά για τη μεταβλητή b· ο κανόνας που αναφέρει αφορά και τη b, αλλά η απάντηση για τη b δεν δίνεται ρητά. Η προέλευση του εξωτερικού site δεν είναι γνωστή· η λύση δεν είναι επίσημη.
Λύσεις — Παράλληλη Επεξεργασία — Ιούνιος 2021¶
16.PNG¶
Computer Ανάλυση-Θέματα Παράλληλη Επεξεργασία
5.1.2.20 Θέμα 20
Ο παρακάτω κώδικας κάνει χρήση του μοντέλου εργασιών (tasks) του OpenMP
int a;
int main(int argc, char *argv[])
{
int b, c;
#pragma omp parallel shared(c) private(b)
{
int d;
#pragma omp task
{
int e;
//σημείο αναφοράς εντός του task
}
}
//more code here
return 0;
}
Στον παραπάνω κώδικα και συγκεκριμένα στο σημείο αναφοράς εντός του task η μεταβλητή c είναι:
a. shared
b. private
c. firstprivate
δ. threadprivate
Απάντηση
a. shared
Παρατήρηση
Αν σε ένα task δεν δηλώνεται ο τύπος των μεταβλητών τότε ισχύουν οι εξής κανόνες:
- Μια μεταβλητή που είναι shared στην παράλληλη περιοχή μέσα στο task θεωρείται επίσης ως shared
- Μια μεταβλητή που είναι private στην παράλληλη περιοχή μέσα στο task θεωρείται ως firstprivate
- Μια μεταβλητή που δεν δηλώνεται καθόλου στην παράλληλη περιοχή μέσα στο task θεωρείται επίσης ως firstprivate
Η c είναι shared στην παράλληλη περιοχή και παραμένει shared μέσα στο task, πράγμα που σημαίνει ότι όλα τα νήματα και tasks μοιράζονται την ίδια μεταβλητή c.