Difference between revisions of "MPI hello world in C"

From ScientificComputing
Jump to: navigation, search
m (Jarunanp moved page MPI Hello World in C++ to MPI Hello World in C)
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
__NOTOC__
 +
{{back_to_tutorials}}
 +
 
== Load modules ==
 
== Load modules ==
 
We will use the new software stack in this tutorial:
 
We will use the new software stack in this tutorial:
  
   $ env2lmod   
+
   [jarunanp@eu-login-10 ~]$ env2lmod   
   $ module load gcc/6.3.0 openmpi/4.0.2
+
   [jarunanp@eu-login-10 ~]$ module load gcc/6.3.0 openmpi/4.0.2
 
+
 
   The following have been reloaded with a version change:
 
   The following have been reloaded with a version change:
 
     1) gcc/4.8.5 => gcc/6.3.0
 
     1) gcc/4.8.5 => gcc/6.3.0
 
+
   $ which mpirun
+
   [jarunanp@eu-login-10 ~]$ which mpirun
 
   /cluster/apps/gcc-6.3.0/openmpi-4.0.2-4airvo32ypyuapzgi4fp2kjea5psqu3t/bin/mpirun
 
   /cluster/apps/gcc-6.3.0/openmpi-4.0.2-4airvo32ypyuapzgi4fp2kjea5psqu3t/bin/mpirun
  
 
== MPI Hello World ==
 
== MPI Hello World ==
 +
* Go to $SCRATCH and create a work directory
 +
  [jarunanp@eu-login-10 ~]$ cd $SCRATCH
 +
  [jarunanp@eu-login-10 jarunanp]$ pwd
 +
  /cluster/scratch/jarunanp
 +
  [jarunanp@eu-login-10 jarunanp]$ mkdir test_mpi
 +
  [jarunanp@eu-login-10 jarunanp]$ cd test_mpi
 +
  [jarunanp@eu-login-10 test_mpi]$
 +
 +
* Download the MPI Hello World example
 +
  [jarunanp@eu-login-10 test_mpi]$ wget -c https://gitlab.ethz.ch/jarunanp/hpc-examples/-/raw/main/mpi/c/hello_mpi.c?inline=false -O hello_mpi.c
 +
 +
* Compile the code
 +
  [jarunanp@eu-login-10 test_mpi]$ mpicc -o hello_mpi hello_mpi.c
 +
 +
* Run the executable
 +
  [jarunanp@eu-login-10 test_mpi]$ mpirun -np 2 hello_mpi
 +
  Hello world from processor eu-login-10, rank 0 out of 2 processors
 +
  Hello world from processor eu-login-10, rank 1 out of 2 processors
 +
 +
== Run a BSUB interactive session ==
 +
 +
* Request an interactive session on a compute node:
 +
  [jarunanp@eu-login-10 test_mpi]$ bsub -n 4 -W 01:00 -Is bash
 +
  Generic job.
 +
  Job <155089738> is submitted to queue <normal.4h>.
 +
  <<Waiting for dispatch ...>>
 +
  <<Starting on eu-ms-022-14>>
 +
  [jarunanp@eu-ms-022-14 test_mpi]$
 +
 +
* Run the executable
 +
  [jarunanp@eu-ms-022-14 test_mpi]$ mpirun -np 4 hello_mpi
 +
  Hello world from processor eu-ms-022-14, rank 0 out of 4 processors
 +
  Hello world from processor eu-ms-022-14, rank 1 out of 4 processors
 +
  Hello world from processor eu-ms-022-14, rank 2 out of 4 processors
 +
  Hello world from processor eu-ms-022-14, rank 3 out of 4 processors
 +
  [jarunanp@eu-ms-022-14 test_mpi]$
 +
 +
* Exit the interactive session
 +
  [jarunanp@eu-ms-022-14 test_mpi]$ exit
 +
  exit
 +
  [jarunanp@eu-login-10 test_mpi]$
 +
 +
 +
== Submit a batch job with BSUB command line ==
 +
* You can submit a job by using BSUB command line
 +
  [jarunanp@eu-login-10 test_mpi]$ bsub -n 4 -W 10 "mpirun hello_mpi"
 +
  MPI job.
 +
  Job <155090084> is submitted to queue <normal.4h>.
 +
 +
* Check the job status
 +
  [jarunanp@eu-login-10 test_mpi]$ bjobs
 +
  JOBID      USER    STAT  QUEUE      FROM_HOST  EXEC_HOST  JOB_NAME  SUBMIT_TIME
 +
  155090084  user PEND  normal.4h  eu-login-10            *llo_world Dec  8 15:53
 +
  [jarunanp@eu-login-10 test_mpi]$
  
This MPI Hello World example is taken from [http://www.mpitutorial.com www.mpitutorial.com]
+
* Check the output file lsf.o155090084
   $ cd $SCRATCH
+
   [jarunanp@eu-login-10 test_mpi]$ cat lsf.o155090084
  $ git clone git@../examples_euler.git
 
  $ gcc ... mpi_hello_world.cpp
 
  
 +
== Create a job script ==
  
== Submit a batch job ==
+
* Create a job script called ''job_script.bsub''
Request an interactive session with a compute node:
 
  $ bsub -n 18 -W 01:00 -Is bash
 
  
Check out how to submit a job with a BSUB commandline or create a job script
+
  #!/usr/bin/bash
 +
  #BSUB -n 4
 +
  #BSUB -W 10
 +
  #BSUB -J test_mpi
 +
 +
  source /cluster/apps/local/env2lmod.sh
 +
  module load gcc/6.3.0 openmpi/4.0.2
 +
  export OMP_NUM_THREADS=0
 +
  mpirun hello_mpi
  
Check the job status
+
* Submit a job using the job script
   $ bjobs
+
   [jarunanp@eu-login-10 test_mpi]$ bsub < job_script.bsub
 +
  MPI job.
 +
  Job <155090224> is submitted to queue <normal.4h>.
  
or
 
  
  $ bbjobs
+
{{back_to_tutorials}}

Latest revision as of 13:01, 8 November 2021

< Examples

Load modules

We will use the new software stack in this tutorial:

 [jarunanp@eu-login-10 ~]$ env2lmod  
 [jarunanp@eu-login-10 ~]$ module load gcc/6.3.0 openmpi/4.0.2

 The following have been reloaded with a version change:
   1) gcc/4.8.5 => gcc/6.3.0

 [jarunanp@eu-login-10 ~]$ which mpirun
 /cluster/apps/gcc-6.3.0/openmpi-4.0.2-4airvo32ypyuapzgi4fp2kjea5psqu3t/bin/mpirun

MPI Hello World

  • Go to $SCRATCH and create a work directory
 [jarunanp@eu-login-10 ~]$ cd $SCRATCH
 [jarunanp@eu-login-10 jarunanp]$ pwd
 /cluster/scratch/jarunanp
 [jarunanp@eu-login-10 jarunanp]$ mkdir test_mpi
 [jarunanp@eu-login-10 jarunanp]$ cd test_mpi
 [jarunanp@eu-login-10 test_mpi]$ 
  • Download the MPI Hello World example
 [jarunanp@eu-login-10 test_mpi]$ wget -c https://gitlab.ethz.ch/jarunanp/hpc-examples/-/raw/main/mpi/c/hello_mpi.c?inline=false -O hello_mpi.c
  • Compile the code
 [jarunanp@eu-login-10 test_mpi]$ mpicc -o hello_mpi hello_mpi.c
  • Run the executable
 [jarunanp@eu-login-10 test_mpi]$ mpirun -np 2 hello_mpi
 Hello world from processor eu-login-10, rank 0 out of 2 processors
 Hello world from processor eu-login-10, rank 1 out of 2 processors

Run a BSUB interactive session

  • Request an interactive session on a compute node:
 [jarunanp@eu-login-10 test_mpi]$ bsub -n 4 -W 01:00 -Is bash
 Generic job.
 Job <155089738> is submitted to queue <normal.4h>.
 <<Waiting for dispatch ...>>
 <<Starting on eu-ms-022-14>>
 [jarunanp@eu-ms-022-14 test_mpi]$
  • Run the executable
 [jarunanp@eu-ms-022-14 test_mpi]$ mpirun -np 4 hello_mpi
 Hello world from processor eu-ms-022-14, rank 0 out of 4 processors
 Hello world from processor eu-ms-022-14, rank 1 out of 4 processors
 Hello world from processor eu-ms-022-14, rank 2 out of 4 processors 
 Hello world from processor eu-ms-022-14, rank 3 out of 4 processors
 [jarunanp@eu-ms-022-14 test_mpi]$
  • Exit the interactive session
 [jarunanp@eu-ms-022-14 test_mpi]$ exit
 exit
 [jarunanp@eu-login-10 test_mpi]$


Submit a batch job with BSUB command line

  • You can submit a job by using BSUB command line
 [jarunanp@eu-login-10 test_mpi]$ bsub -n 4 -W 10 "mpirun hello_mpi"
 MPI job.
 Job <155090084> is submitted to queue <normal.4h>.
  • Check the job status
 [jarunanp@eu-login-10 test_mpi]$ bjobs
 JOBID      USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
 155090084  user PEND  normal.4h  eu-login-10             *llo_world Dec  8 15:53
 [jarunanp@eu-login-10 test_mpi]$
  • Check the output file lsf.o155090084
 [jarunanp@eu-login-10 test_mpi]$ cat lsf.o155090084

Create a job script

  • Create a job script called job_script.bsub
 #!/usr/bin/bash
 #BSUB -n 4
 #BSUB -W 10
 #BSUB -J test_mpi

 source /cluster/apps/local/env2lmod.sh
 module load gcc/6.3.0 openmpi/4.0.2
 export OMP_NUM_THREADS=0
 mpirun hello_mpi
  • Submit a job using the job script
 [jarunanp@eu-login-10 test_mpi]$ bsub < job_script.bsub 
 MPI job.
 Job <155090224> is submitted to queue <normal.4h>.


< Examples