Εξέταση Ιουνίου 2024
Ποιοι απαλλάσσονταιΤο εργαστήριο του μαθήματος χρησιμοποιεί υπολογιστικούς πόρους AWS Cloud χρηματοδοτούμενους από το ΕΔΥΤΕ.
Ενότητα #1
Εισαγωγή: Βασικές έννοιες παράλληλου υπολογισμού.
Ενδεικτική θεωρία: Ενότητες 2.3 - 2.6 και 2.10.1 - 2.10.2 από το βιβλίο "Εισαγωγή στον Παράλληλο Προγραμματισμό" του Peter S. Pacheco.
Υλικό ενότητας #1
- Διαφάνειες ενότητας.
- Template μετροπρογραμμάτων: άθροισμα πίνακα doubles και άθροισμα πίνακα 2D doubles.
Ενότητα #2
Η ιεραρχία μνήμης (κύρια και κρυφές μνήμες), η επίδρασή της στην απόδοση και τα εμπόδια που θέτει στις προσπάθειες παραλληλισμού.
Ενδεικτική θεωρία: Ενότητες 2.2.1 - 2.2.4 από το βιβλίο "Εισαγωγή στον Παράλληλο Προγραμματισμό" του Peter S. Pacheco.
Υλικό εργαστηρίων ενότητας #2
- Διαφάνειες ενότητας.
- Template μετροπρογραμμάτων: triad-double.c και αντιμετάθεση πινάκων NxN.
- Λύσεις ασκήσεων: inner loop unroll, outer loop unroll & jam, cache blocking.
Ενότητα #3
Προγραμματισμός με εντολές SSE/AVX. Από τους υπερυπολογιστές (vector processors) στους εμπορικούς επεξεργαστές.Ενδεικτική θεωρία: Ενότητα 2.3.1 από το βιβλίο "Εισαγωγή στον Παράλληλο Προγραμματισμό" του Peter S. Pacheco.
Δείτε επίσης: Intel Intrinsics Guide.
Υλικό εργαστηρίων ενότητας #3
- Διαφάνειες ενότητας (I).
- Template για χρήση εντολών SSE/AVX.
- Template μετροπρογραμμάτων: vectoradd-float.c, triad-float.c, threshold-clamp-float.c (και οι ενδεικτικές λύσεις: vectoradd-float-avx.c, triad-float-avx.c, threshold-clamp-float-avx-blendv.c).
- Διαφάνειες ενότητας (II).
- Παράδειγμα οριζόντιου αθροίσματος με εντολές AVX/SSE.
- Template μετροπρογραμμάτων: sum-float.c, mmult-float.c (και οι ενδεικτικές λύσεις: sum-float-avx.c, mmult-float-avx.c).
Εργασία #1
- Εκφώνηση Εργασίας [Παράδοση:
15/4/2422/4/24].
Ενότητα #4
Παραλληλισμός σε επίπεδο threads (TLP). Προγραμματισμός με POSIX Threads (pthreads).Ενδεικτική θεωρία: Ενότητες 4.1 - 4.2 από το βιβλίο "Εισαγωγή στον Παράλληλο Προγραμματισμό" του Peter S. Pacheco.
Υλικό εργαστηρίων ενότητας #4
- Διαφάνειες ενότητας (I).
- Υποδείγματα χρήσης pthreads: δημιουργία ενός thread, δημιουργία πολλών όμοιων threads, καταμερισμός εργασίας σε blocks.
- Template μετροπρογραμμάτων: triad-double.c, mmult-double.c (και οι ενδεικτικές λύσεις: triad-double-pthreads.c, mmult-double-pthreads.c).
- Template μετροπρογραμμάτων: sum-reduction-double.c, pi-integral.c (και οι ενδεικτικές λύσεις: sum-reduction-double-threads.c).
- Διαφάνειες ενότητας (II).
- Template μετροπρογραμμάτων: incr-example-no-mutex-BAD.c (με mutex: incr-example-mutex.c), queue-example-BAD.c (ενδεικτική λύση, με mutex: queue-example-mutex.c, με condition variables: queue-example-cv.c).
- Template μετροπρογραμμάτων: work-steps-no-barrier.c (με barrier: work-steps-barrier.c), prefix-sum-double.c, prefix-sum-double-pseudothreads.c (ενδεικτική λύση: prefix-sum-double-threads.c).
- Διαφάνειες ενότητας (III).
- Template μετροπρογραμμάτων: quicksort-serial.c.
Ενότητα #5
Προγραμματισμός threads με το OpenMP.Ενδεικτική θεωρία: Ενότητες 5.1 - 5.5 από το βιβλίο "Εισαγωγή στον Παράλληλο Προγραμματισμό" του Peter S. Pacheco.
Υλικό εργαστηρίων ενότητας #5
- Διαφάνειες ενότητας (I).
- Υποδείγματα κώδικα: hello-omp0.c, omp-for-example.c.
- Template μετροπρογραμμάτων: triad-double.c (ενδεικτικές λύσεις: [1] και [2]), mmult-double.c (ενδεικτική λύση: [1]).
- Υποδείγματα κώδικα: omp-firstprivate.c, omp-barrier-critical.c.
- Template μετροπρογραμμάτων: sum-reduction-double.c (ενδεικτικές λύσεις: [1] και [2]), pi-integral.c (ενδεικτική λύση: [1]).
- Διαφάνειες ενότητας (II).
- Υποδείγματα κώδικα: omp-task-example1.c, omp-task-example2.c, omp-task-example3.c.
- Template μετροπρογραμμάτων: fib-notasks.c (ενδεικτική λύση), quicksort-serial.c (ενδεικτική λύση).
- Υπόδειγμα κώδικα: triad-double-taskloop.c
- Υποδείγματα κώδικα: tasks-dependence-initial.c (ενδεικτική λύση), fib-iterative.c (ενδεικτική λύση).
Εργασία #2
- Εκφώνηση Εργασίας [Παράδοση: 3/6/2024].
Ενότητα #6
Εισαγωγή στον προγραμματισμό CUDA.Υλικό εργαστηρίων ενότητας #6
- Διαφάνειες ενότητας (I).
- Υποδείγματα κώδικα: one-addition.cu, vectoradd-float-cpu.c (ενδεικτικές λύσεις: 1 μόνο thread, 1 μόνο block, πολλαπλά blocks, grid striding).
- Διαφάνειες ενότητας (II).
- Υποδείγματα κώδικα: sum-reduction-float-cpu.c, transpose-float-gmem.cu.