OpenMP εργασίες¶
Μία σύντομη εισαγωγή στον παράλληλο προγραμματισμό και στη χρήση του OpenMP, υπάρχει εδώ.
Έστω ότι θέλουμε να χρησιμοποιήσουμε ένα OpenMP source file με όνομα timers.c.
Ένα batch script υποβολής
εργασίας OpenMP, πρέπει να ορίζει τον αριθμό των threads
(νήματα) τα οποία θα χρησιμοποιηθούν. Αυτό γίνεται, αναθέτοντας έναν ακέραιο αριθμό στην μεταβλητή OMP_NUM_THREADS
, προσθέτοντας στο script υποβολής, την παρακάτω εντολή. Μπορούμε να αναθέσουμε τον ζητούμενο ακέραιο αριθμό threads
ή να αναθέσουμε σε αυτή, την τιμή της SLURM_NTASKS
, η οποία εκφράζει τον αριθμό των cores
που έχουμε ζητήσει να δεσμευθούν στο σύστημα.
export OMP_NUM_THREADS=10 # ζητάμε 10 threads
export OMP_NUM_THREADS=$SLURM_NTASKS
Αριθμοί κόμβων στο OpenMP
Υπενθυμίζουμε ότι λόγω της αρχιτεκτονικής του OpenMP, ο αριθμός των κόμβων πρέπει να είναι 1.
#SBATCH --nodes=1
Αρχικά, δημιουργούμε το batch script
προς υποβολή(έστω openmp-example.sh).
Σε αυτό, ορίζουμε επιπρόσθετα τις #SBATCH directives
: --ntasks
και --nodes=1
. Στη συνέχεια, κάνουμε compile το αρχείο timers.c
, με την εντολή gcc -fopenmp
για να δημιουργήσουμε το εκτελέσιμο timers
. Η εντολή export OMP_NUM_THREADS=$SLURM_NTASKS
αναθέτει στη μεταβλητή την τιμή 10, για το λόγο που συζητείται παραπάνω. Τέλος, η εντολή ./timers
, εκτελεί το εκτελέσιμο πρόγραμμα.
Παράδειγμα
#!/bin/bash
#SBATCH --partition=batch
#SBATCH --ntasks=10
#SBATCH --nodes=1
#SBATCH --time=1:00:00
gcc timers.c -o timers -fopenmp
export OMP_NUM_THREADS=$SLURM_NTASKS
./timers
Αναγκαιότητα φόρτωσης module
Στην περίπτωση που θέλουμε να κάνουμε compile με intel compiler ή με κάποια αλλη έκδοση του gcc, πρέπει να φορτώσουμε το κατάλληλο module από τον αντίστοιχο φάκελο. Για περισσότερες πληροφορίες δείτε εδώ.