Π ΑΡΑΛΛΗΛΗ / ΚΑΤΑΝΕΜΗΜΕΝΗ ΕΠΕΞΕΡΓΑΣΙΑ ΚΑΙ ΕΦΑΡΜΟΓΕΣ Εισαγωγή στο OpenMP
Π ΕΡΙΕΧΟΜΕΝΑ Εισαγωγή Σύνταξη στη C/C++ Hello World Σύνταξη στη C/C++ Κανόνας του τραπεζίου Υπολογισμός π Αναφορές
Ε ΙΣΑΓΩΓΗ Shared memory συστήματα Pthreads OpenMP Java threads Το OpenMP είναι προγραμματισμός σε πιο “υψηλό” επίπεδο από το Pthreads Πρέπει να το υποστηρίζει ο compiler gcc: -fopenmp
Ε ΙΣΑΓΩΓΗ OpenMP SPMD (Υπάρχει η δυνατότητα και για MPMD) Βασίζεται στα νήματα Μνήμη Κοινή μεταξύ των threads Τοπική για κάθε thread (τα άλλα δεν έχουν πρόσβαση)
Σ ΥΝΤΑΞΗ ΣΤΗ C / C ++ #include #pragma omp directive [ clauses [ ] ] directive: parallel, parallel for clause: num_threads (number of threads) # pragma omp parallel\ num_threads(thread_count) int omp_get_thread_num () : thread id int omp_get_num_threads () : αριθμός threads
H ELLO W ORLD #include void Hello(void); int main(int argc, char* argv[]){ int thread_count = strtol(argv[1], NULL, 10); # pragma omp parallel num_threads(thread_count) Hello(); return 0; } void Hello(void){ int my_rank = omp_get_thread_num() ; int thread_count = omp_get_num_threads (); printf("Hello from thread %d of %d\n", my_rank, thread_count); }
Σ ΥΝΤΑΞΗ ΣΤΗ C/C++ implicit barrier parallel for single _OPENMP: δείχνει αν υποστηρίζει ο compiler OpenMP Προσοχή στα «κρίσιμα τμήματα» #pragma omp critical Μεταβλητές private : clause shared : clause Reduction clause reduction (+,-,*: μεταβλητή)
Σ ΥΝΤΑΞΗ ΣΤΗ C/C++ parallel for directive Πρέπει να ξέρουμε από πριν τον αριθμό των επαναλήψεων No data dependence Όχι if με return
Α ΝΑΦΟΡΕΣ Peter S. Pacheco, An Introduction to Parallel Programming, Morgan Kaufmann, 2011 Thomas Rauber, Gudula Runger, Parallel Programming for Multicore and Cluster Systems, Springer, 2010