OPENMP Kullanım Kılavuzu

UHeM sitesinden
Atla: kullan, ara

simple.c isimli bir openmp kodumuz olduğunu varsayalım. Bu OpenMP kodu derleyerek, "programim" adıyla bir program (executable) elde etmek için, aşağıdaki şekilde derleme yapılabilir:

Gcc için:

[yildirim@lnode2 ~]$ gcc -fopenmp simple.c -o programim

Intel'in derleyicisi için:

[yildirim@lnode2 ~]$ icc -openmp simple.c -o programim
simple.c(9) : (col. 1) remark: OpenMP DEFINED REGION WAS PARALLELIZED



Unutulmamalıdır ki OpenMP kodları ortak paylaşımlı bellekler gerektirdiği için, sadece tek bir bilgisayarda çalışacaktır. MPI işleri gibi birden fazla bilgisayarı kullanacak şekilde çalıştırılamazlar.


Derlediğimiz programımızı UHEM'de çalıştırmak için,

[yildirim@lnode2 ~]$ bsub -q kuyruk_adi -m ege –P proje_adi -n 8 -a openmp  -R "span[hosts=1]" -o %J.out -e %J.err ./programim
Job <6230> is submited to queue <short>.

Buradaki "span[hosts=1]" ifadesi "istedigim tüm işlemcileri tek bir makinada ver" demektir. Openmp birden fazla bilgisayarı aynı anda kullanamadığından bu gereklidir. Ayrıca "-a openmp" ile işimizin openmp işi oldugunu lsf'e bildiriyoruz.


Bakalım işimiz çalıştı mı?

[yildirim@lnode2 ~]$ bjobs
JOBID   USER      STAT   QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
6230    yildirim  PEND   short       ege                            ./programim      Mar 15 13:30
[yildirim@lnode2 ~]$ bjobs
JOBID    USER   STAT  QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
6230    yildirim RUN   short      ege          b094           ./programim         Mar 15 13:3

Ve aşağıdaki gibi bir çıktı elde edebiliriz:

The output (if any) follows:
Hello World from thread = 0
Number of threads = 8
Hello World from thread = 1
Hello World from thread = 3
Hello World from thread = 2
Hello World from thread = 4
Hello World from thread = 5
Hello World from thread = 7
Hello World from thread = 6