Skip to content

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 από τον αντίστοιχο φάκελο. Για περισσότερες πληροφορίες δείτε εδώ.