如果我在集群上运行 C++ 代码,是否可以在我的程序中使用 OMP_NUM_THREADS 的值?例如,假设我有两个 .cpp 文件 main.cpp 和 func.cpp,其中 func.cpp 是使用 OpenMP 并行编写的。我希望能够一次定义线程数(在下面的脚本中),而不必在 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
最佳答案
您可以使用 omp_set_num_threads()设置程序中的线程数。
要使用 OMP_NUM_THREADS
外部指定的值,您需要使用 std::getenv 从环境变量中读取它.请务必 1) 将字符串结果转换为数字,以及 2) 清理该值以防它未设置。
伪代码看起来像这样:
unsigned int thread_qty = std::max(atoi(std::getenv("OMP_NUM_THREADS")), 1);
omp_set_num_threads(thread_qty);
关于c++ - 在程序源文件中使用脚本变量 OMP_NUM_THREADS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24435759/