如果我在集群上运行 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() https://gcc.gnu.org/onlinedocs/libgomp/omp_005fset_005fnum_005fthreads.html设置程序中的线程数。
使用外部指定的值OMP_NUM_THREADS
,您需要使用从环境变量中读取它std::getenv http://en.cppreference.com/w/cpp/utility/program/getenv。请务必 1) 将字符串结果转换为数字,2) 清理该值,以防其未设置。
伪代码看起来像:
unsigned int thread_qty = std::max(atoi(std::getenv("OMP_NUM_THREADS")), 1);
omp_set_num_threads(thread_qty);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)