OpenMP hello world in C
From ScientificComputing
< Examples |
Load modules
We will use the new software stack in this tutorial:
[jarunanp@eu-login-11 ~]$ env2lmod [jarunanp@eu-login-11 ~]$ module list Currently Loaded Modules: 1) StdEnv 2) gcc/4.8.5
openMP Hello World
- Go to $SCRATCH and create a work directory
[jarunanp@eu-login-11 ~]$ cd $SCRATCH [jarunanp@eu-login-11 jarunanp]$ pwd /cluster/scratch/jarunanp [jarunanp@eu-login-11 jarunanp]$ mkdir test_openmp [jarunanp@eu-login-11 jarunanp]$ cd test_openmp [jarunanp@eu-login-11 test_openmp]$
- Create a file named hello_omp.c and edit it with a text editor (vi, nano or emacs)
// OpenMP header #include <omp.h> #include <stdio.h> int main(int argc, char* argv[]) { //Parallel code #pragma omp parallel { printf("Hello world from thread %d\n", omp_get_thread_num()); } }
- Compile the code
[jarunanp@eu-login-11 test_openmp]$ gcc -o hello_omp -fopenmp hello_omp.c [jarunanp@eu-login-11 test_openmp]$ ll total 20 -rwxr-x--- 1 user user-group 8680 Jun 14 10:55 hello_omp -rw-r----- 1 user user-group 231 Jun 14 10:55 hello_omp.c
Run a BSUB interactive session
- Request an interactive session with a compute node
[jarunanp@eu-login-11 test_openmp]$ bsub -n 4 -Is bash Generic job. Job <175495032> is submitted to queue <normal.4h>. <<Waiting for dispatch ...>> <<Starting on eu-ms-001-08>> FILE: /sys/fs/cgroup/cpuset/lsf/euler/job.175495032.32022.1623661994/tasks [jarunanp@eu-ms-001-08 test_openmp]$
- Execute the code
[jarunanp@eu-ms-001-08 test_openmp]$ export OMP_NUM_THREADS=4 [jarunanp@eu-ms-001-08 test_openmp]$ ./hello_omp Hello world from thread 1 Hello world from thread 3 Hello world from thread 0 Hello world from thread 2 [jarunanp@eu-ms-001-08 openmp]$
[jarunanp@eu-ms-001-08 test_openmp]$ export OMP_NUM_THREADS=8 [jarunanp@eu-ms-001-08 test_openmp]$ ./hello_omp Hello world from thread 0 Hello world from thread 5 Hello world from thread 3 Hello world from thread 4 Hello world from thread 1 Hello world from thread 7 Hello world from thread 2 Hello world from thread 6 [jarunanp@eu-ms-001-08 test_openmp]$
- Unset the environment variable OMP_NUM_THREADS
[jarunanp@eu-ms-001-08 test_openmp]$ unset OMP_NUM_THREADS
- Exit the interactive session
[jarunanp@eu-ms-001-08 test_openmp]$ exit exit [jarunanp@eu-login-11 test_openmp]$
Submit a batch job with BSUB command line
- submit a job
[jarunanp@eu-login-11 test_openmp]$ export OMP_NUM_THREADS=4 [jarunanp@eu-login-11 test_openmp]$ bsub -n 4 -W 10 ./hello_omp Generic job. Job <175495653> is submitted to queue <normal.4h>.
Create a job script
- Create a job script called job_script.bsub
#!/usr/bin/bash #BSUB -n 4 #BSUB -W 10 #BSUB -J test_openmp ./hello_omp
- Submit a job using the job script
[jarunanp@eu-login-11 test_openmp]$ bsub < job_script.bsub Generic job. Job <175495839> is submitted to queue <normal.4h>.
< Examples |