Το εργαστήριο του μαθήματος χρησιμοποιεί υπολογιστικούς πόρους 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, pi-integral.c (και οι ενδεικτικές λύσεις: sum-float-avx.c, mmult-float-avx.c, pi-integral-avx.c).
Εργασία #1
- Εκφώνηση Εργασίας [Παράδοση: 26/3/25].
Ενότητα #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 και sum-reduction-double-threads-mutex.c).
- Διαφάνειες ενότητας (II).
- Template μετροπρογραμμάτων: incr-example-no-mutex-BAD.c (με mutex: incr-example-mutex.c), queue-example-mutex.c (με condition variables: queue-example-cv.c), work-steps-no-barrier.c (με barrier: work-steps-barrier.c).
- Template μετροπρογραμμάτων: prefix-sum-double.c, prefix-sum-double-pseudothreads.c (ενδεικτική λύση: prefix-sum-double-threads.c).
- Διαφάνειες ενότητας (III).
- Template μετροπρογραμμάτων: quicksort-serial.c (ενδεικτική λύση: quicksort-threads-pool.c).
Ενότητα #5
Προγραμματισμός threads με το OpenMP.Ενδεικτική θεωρία: Ενότητες 5.1 - 5.5 από το βιβλίο "Εισαγωγή στον Παράλληλο Προγραμματισμό" του Peter S. Pacheco.
Υλικό εργαστηρίων ενότητας #5
- Διαφάνειες ενότητας (I).
- Υποδείγματα κώδικα: hello-omp.c, omp-for-example.c, omp-parallel-for-example.c, omp-uneven-load.c.
- Template μετροπρογραμμάτων: triad-double.c (ενδεικτικές λύσεις: με συνδυασμένο parallel for και με ξεχωριστά parallel και for), mmult-double.c (ενδεικτική λύση: mmult-double-omp.c).
- Διαφάνειες ενότητας (II).
- Υποδείγματα κώδικα: omp-firstprivate.c, omp-barrier-critical.c, omp-master-single.c.
- Template μετροπρογραμμάτων: sum-reduction-double.c (ενδεικτικές λύσεις: με critical construct, με atomic construct και με reduction clause), pi-integral.c (ενδεικτική λύση: με reduction clause).
- Template μετροπρογραμμάτων: prefix-sum-double.c (ενδεικτική λύση: prefix-sum-double-omp.c), histogram-serial.c (ενδεικτική λύση: histogram-omp.c).
- Διαφάνειες ενότητας (III).
- Υποδείγματα κώδικα: omp-task-example1.c, omp-task-example2.c, omp-task-example3.c.
- Template μετροπρογραμμάτων: fib-notasks.c (ενδεικτική λύση: fib-tasks.c), quicksort-serial.c (ενδεικτική λύση: quicksort-tasks.c).
- Υποδείγματα κώδικα: omp-taskloop-example.c.
- Template μετροπρογραμμάτων: triad-double.c (ενδεικτική λύση με taskloop: triad-double-taskloop.c).
- Υποδείγματα κώδικα: tasks-dependence-initial.c (ενδεικτική λύση), fib-iterative.c (ενδεικτική λύση).
- Διαφάνειες ενότητας (IV).
- Υποδείγματα κώδικα: vectoradd-float-omp-simd.c, vectoradd-float-omp-threads-simd.c.
- Template μετροπρογραμμάτων: threshold-clamp-float.c (ενδεικτικές λύσεις: threshold-clamp-float-omp-simd.c και threshold-clamp-float-omp-threads-simd.c), sum-float.c (ενδεικτικές λύσεις: sum-float-omp-simd.c και sum-float-omp-threads-simd.c), mmult-float.c (ενδεικτικές λύσεις: mmult-float-omp-simd.c και mmult-float-omp-threads-simd.c).
Ενότητα #6
Εισαγωγή στον προγραμματισμό CUDA.Υλικό εργαστηρίων ενότητας #6
- Διαφάνειες ενότητας (I).
- Υποδείγματα κώδικα: one-addition.cu, vectoradd-float-cpu.c.
- Διαφάνειες ενότητας (II).
- Υποδείγματα κώδικα: gmem-test-access.cu,