#!/bin/bash
#
#SBATCH --job-name=job-openmp
#SBATCH --output=job-openmp.out
#SBATCH --error=job-openmp.err
#
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=10

echo "SLURM Input environment variables : "
echo SLURM_JOB_NAME=$SLURM_JOB_NAME
echo SLURM_JOB_NUM_NODES=$SLURM_JOB_NUM_NODES
echo SLURM_MEM_PER_CPU=$SLURM_MEM_PER_CPU
echo SLURM_CPUS_PER_TASK=$SLURM_CPUS_PER_TASK

echo
echo "SLURM Output environment variables : "
echo SLURM_CPUS_ON_NODE=$SLURM_CPUS_ON_NODE
echo SLURM_JOB_CPUS_PER_NODE=$SLURM_JOB_CPUS_PER_NODE
echo SLURM_CPUS_PER_TASK=$SLURM_CPUS_PER_TASK
echo SLURM_JOB_ID=$SLURM_JOB_ID
echo SLURM_JOB_NODELIST=$SLURM_JOB_NODELIST
echo SLURM_NTASKS=$SLURM_NTASKS
echo

# we must instantiate the control variable OMP_NUM_THREADS
# which tells the binary the maximum number of threads it can use
# this variable must correspond to the specification of the slurm job
# taken from the --cpus-per-task parameter
# this aprameter is available in SLURM_CPUS_PER_TASK environemnt variable
# example :
# export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
#
# or for a mixed MPI / OpenMP job :
# export OMP_NUM_THREADS=`expr $SLURM_JOB_CPUS_PER_NODE / $SLURM_TASKS_PER_NODE`

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

hostname
gcc -fopenmp job-openmp.c -o job-openmp
./job-openmp
