#

OpenMP Software on Odyssey

Introduction

This page will help you compile and run OpenMP applications on Odyssey. Currently we have both the Intel and GNU compiler suites available.

Example Code

Below are simple OpenMP example codes in both Fortran 90 and C++.

Fortran:

!=====================================================================
! Program: omp_test.f90
!=====================================================================
program omp_test
  implicit none
  integer(4) :: nthreads
  integer(4) :: tid
  integer(4) :: omp_get_num_threads
  integer(4) :: omp_get_thread_num
!$omp parallel private( tid )
  tid = omp_get_thread_num()
  write(6,*)"Thread ID:", tid
  if ( tid == 0 ) then
     nthreads = omp_get_num_threads()
     write(6,*)"Number of threads = ", nthreads
  end if
!$omp end parallel
  stop "End of program."
end program omp_test

C++:

//====================================================================
// Program: omp_test.cpp
//====================================================================
#include <iostream>
#include <string>
#include <sstream>
#include <math.h>
#include <omp.h>
using namespace std;
int main()
{
  int nthreads, tid;
#pragma omp parallel private( tid)
  {
    tid = omp_get_thread_num();
    nthreads = omp_get_num_threads();
    cout << "Thread ID: " << tid << endl;
    if ( tid == 0 ){
      cout << "Number of threads = " << nthreads << endl;
    }
  }
  return 0;
}

Compiling the program

Intel, Fortran 90:

[username@rclogin02 ~]$ ifort -o omp_test.x omp_test.f90 -openmp

Intel, C++:

[username@rclogin02 ~]$ icpc -o omp_test.x omp_test.cpp -openmp

GNU, Fortran 90:

[username@rclogin02 ~]$ gfortran -o omp_test.x omp_test.f90 -fopenmp

GNU, C++:

[username@rclogin02 ~]$ g++ -o omp_test.x omp_test.cpp -fopenmp

Running the program

You could use the following SLURM batch-job submission script to submit the job to the queue:

#!/bin/bash
#SBATCH -J omp_test
#SBATCH -o omp_test.out
#SBATCH -e omp_test.err
#SBATCH -p general
#SBATCH -t 30
#SBATCH --mem=1750
#SBATCH -c 8
#SBATCH -N 1
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
srun -c $SLURM_CPUS_PER_TASK ./omp_test.x

The OMP_NUM_THREADS environmental variable is used to set the number of threads to the desired number. If you name the above script omp_test.batch, for instance, the job is submitted to the queue with

sbatch omp_test.batch

References

CC BY-NC 4.0 This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License. Permissions beyond the scope of this license may be available at Attribution.