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

Παράλληλη Επεξεργασία — Ιούνιος 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.

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


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