If I'm running C++ code on a cluster, is it possible to use the value of OMP_NUM_THREADS in my program? For example, suppose I have two .cpp files main.cpp and func.cpp, where func.cpp is written in parallel using OpenMP. I want to be able to define the number of threads once (in the script below) and not have to define it again in func.cpp.
#!/bin/bash
#PBS -S /bin/bash
#PBS -l walltime=00:10:00
#PBS -l select=1:ncpus=4:mem=2gb
#PBS -q QName
#PBS -N Name
#PBS -o Results/output.txt
#PBS -e Results/error.txt
#PBS -m abe -M email@address
module purge
module load intel-compiler/11.1.073
export OMP_NUM_THREADS=4
cd $WORKDIR
./myprog
You can use omp_set_num_threads() to set the number of threads in your program.
To use the value externally specified by OMP_NUM_THREADS
, you'll need to read it from the environment variables using std::getenv. Be sure to 1) convert the string result to a number and 2) sanitize the value in case it's unset.
The pseudocode will look something like:
unsigned int thread_qty = std::max(atoi(std::getenv("OMP_NUM_THREADS")), 1);
omp_set_num_threads(thread_qty);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With